إجمالي مرات مشاهدة الصفحة

الثلاثاء، 27 سبتمبر 2016

تحويل رقم العمود إلى حرف والعكس Column Number To Letter And Vice Versa

السلام عليكم ورحمة الله وبركاته

أقدم لكم دالتين في غاية الأهمية ، الدالة الأولى هي دالة معرفة تحول رقم العمود إلى حرف ، والدالة الثانية تقوم بتحويل حرف العمود إلى رقم.


الدوال بسيطة جداً إلا أنني قمت بشرح مفصل لهما ، وكيف تم بناء هذه الدوال لنتعلم كيف ننشيء دالة معرفة بأنفسنا ، ويوجد مع كل دالة إجراء فرعي كمثال تطبيقي لكيفية استخدام الدالة.

كما يوجد في الموضوع كيفية استخدام صندوق الإدخال InputBox ، وكيفية التعامل في حالة الإدخال الخاطيء للمستخدم أي أن الموضوع لا يقتصر فقط على الدوال المعرفة.

ها هو الكود في الموديول الأول (تحويل رقم العمود إلى حرف)

Sub Test_ColToLetter_Function()
'هذا الكود مثال لكيفية استخدام الدالة المعرفة داخل إجراء فرعي
'حيث تقوم الدالة المعرفة بتحويل رقم العمود إلى حرف
'=============================================================
    'تعريف متغير ليحمل القيمة التي سيتم إدخالها في صندوق الإدخال
    Dim Col As Variant

    'تعيين قيمة للمتغير لتساوي القيمة المدخلة في صندوق الإدخال
    '[G] وبشكل افتراضي يتم وضع الرقم 7 والذي يمثل العمود السابع أو العمود
    Col = InputBox("Enter Column Number", "Entry", 7)

    'إذا كانت قيمة الإدخال ليست رقم فإنه
    If Not IsNumeric(Col) Then

        'يتم إظهار رسالة تفيد بإدخال رقم صحيح
        MsgBox "Enter Valid Number", vbExclamation

    'أما إذا كانت القيمة المدخلة رقمية
    Else

        'تظهر للمستخدم رسالة تفيد بحرف العمود للرقم الذي تم إدخاله
        MsgBox "Column Letter For Column ( " & Col & " ) Is " & ColToLetter(Col)

    'نهاية جملة الشرط
    End If
End Sub

Function ColToLetter(ByVal iCol As Integer)
'لتحويل رقم العمود إلى حرف [ColToLetter] دالة معرفة باسم
'الدالة المعرفة لها بارامتر واحد وهو متغير من النوع الرقمي
'يحمل القيمة الرقمية لرقم العمود [iCol] المتغير باسم
'==========================================================

    'الدالة المعرفة قيمتها تساوي حرف العمود لرقم العمود المستخرج من عنوان الخلية
    'يساوي 7 [iCol] مثال لنفترض أننا أدخلنا رقم العمو 7 ، فهذا يعني أن المتغير
    'قم بفتح النافذة الفورية من خلال
    'View >> immediate Window
    'ثم قم بتجربة السطر التالي للحصول على عنوان الخلية
    '?Cells(1, 7).Address
    'النتيجة في النافذة الفورية هي عنوان الخلية في الصف الأول والعمود السابع
    '[$G$1] أي أن عنوان الخلية سيكون بهذا الشكل
    'بما أننا نريد الحصول على حرف العمود فقط بالتالي سنتخلص من كلاً من
    '[Replace] علامات الدولار $ وكذلك الرقم 1 وذلك باستخدام الدالة
    '[""] حيث يتم استبدال العلامات الغير مرغوب فيها بفراغ
    'لنحصل في النهاية على حرف العمود فقط وهو الغرض من الدالة المعرفة
    ColToLetter = Replace(Replace(Cells(1, iCol).Address, "1", ""), "$", "")
End Function

وإليكم الكود في الموديول الثاني (تحويل حرف العمود إلى رقم)

Sub Test_ColToNumber_Function()
'هذا الكود مثال لكيفية استخدام الدالة المعرفة داخل إجراء فرعي
'حيث تقوم الدالة المعرفة بتحويل حرف العمود إلى رقم
'=============================================================
    'تعريف متغير ليحمل القيمة التي سيتم إدخالها في صندوق الإدخال
    Dim strCol As Variant

    'تعيين قيمة للمتغير لتساوي القيمة المدخلة في صندوق الإدخال
    'والذي يمثل العمود السابع [G] وبشكل افتراضي يتم وضع حرف
    strCol = InputBox("Enter Column Letter : A - B - ...", "Entry", "G")

    'سطر لتفادي حدوث خطأ في حالة أن المستخدم قام بإدخال أرقام
    'فهذا لا يمثل عمود [LKIJH] أو أي حروف لا تصلح للتعبير عن حروف الأعمدة مثل
    '[Skipper] في حالة الخطأ يتم الانتقال إلى السطر
    On Error GoTo Skipper

    'إذا كان الإدخال صحيح لحرف العمود تظهر رسالة تفيد برقم العمود ثم الخروج من الإجراء الفرعي
    MsgBox "Column Number For Column ( " & strCol & " ) Is " & ColToNumber(strCol)
    Exit Sub

'هذا السطر يتم تنفيذه في حالة حدوث خطأ في الإدخال في صندوق الإدخال
Skipper:
    MsgBox "Enter Valid Letter", vbExclamation
End Sub

Function ColToNumber(ByVal strColName As String)
'لتحويل حرف العمود إلى رقم [ColToNumber] دالة معرفة باسم
'الدالة المعرفة لها بارامتر واحد وهو متغير من النوع النصي
'يحمل القيمة النصية لحرف العمود [strColName] المتغير باسم
'==========================================================

    'الدالة المعرفة قيمتها تساوي رقم العمود لنطاق حرف العمود في الصف الأول
    '[G] يساوي [strColName] هذا يعني أن المتغير [G] مثال لنفترض أنه تم إدخال حرف العمود
    'إذاً الشطر الأيمن من الدالة يمثل السطر التالي
    'ٌRange("G1").Column
    '[G1] هذا السطر بهذا الشكل يقوم بإرجاع رقم العمود للخلية
    'لتجربة السطر السابق ، يمكن فتح النافذة الفورية من خلال
    'View >> immediate Window
    'ثم كتابة السطر التالي للتأكد من إرجاع رقم العمود بهذا السطر
    '?Range("G1").Column
    'قم بنسخ السطر بدايةً من علامة الاستفهام وقم بلصقه في النافذة الفورية
    'ثم أخيراً اضغط إنتر لتحصل على الرقم 7 كنتيجة لهذا السطر
    '[G] حيث يمثل الرقم 7 العمود
    ColToNumber = Range(strColName & "1").Column
End Function


إعداد / ياسر خليل أبو البراء

هناك 5 تعليقات:

  1. رائع دائما و دائما رائع جزاك الله خيرا مع خالص تحياتى

    ردحذف
  2. بارك فيك أخي الغالي مختار ، وكم يشرفني مرورك العطر بالمدونة

    ردحذف
  3. ساعات بحس ان اللى بتعمله فى الأكسيل ده سحر
    بارك الله فيك

    ردحذف
  4. ربنا يبارك فيك أخي الكريم
    لا سحر ولا حاجة ..كل الحكاية بحاول أشوف أبسط الطرق والفكرة أساس النجاح لأي عمل

    ردحذف
  5. eToro صفقات التداول المفتوحة في 227,585,248

    اكتشف eToro شبكة التداول الاجتماعي الرائدة في العالم حيث يحقق ملايين المستخدمين أرباحًا عن طريق نسخ تصرفات التداول التي يقوم بها أفضل المتداولين.

    ردحذف