السلام عليكم ورحمة الله وبركاته
أقدم لكم درس بسيط للمبتدئين في عالم الأكواد ، وهو درس لا غنى عنه ، وربما لا تجد كود لا يستخدم هذه الحيلة ، ألا وهي إيجاد رقم آخر صف به بيانات حيث يمكنك الأمر من جعل النطاق المطلوب العمل عليه نطاق ديناميكي (أي غير ثابت)
قد تبدو الكلمات صعبة في كثير من الأحيان ، لكن بالصور وبالتطبيق ستتضح الصورة بشكل جلي ، فهيا بنا نبدأ بعون الله
بفرض أن لديك في العمود الأول A بعض البيانات ، وأردت معرفة رقم آخر صف به بيانات في هذا العمود .. سأضع الكود بشكل مبدئي ثم نتناول كل جزئية على حدا لتفهم كيف يسير الأمر
CODE
Sub FindLastRow()
Dim lastRow As Long
lastRow = ThisWorkbook.Sheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row
MsgBox lastRow
End Sub
الكود بسيط يتكون بشكل أساسي من عنوان للكود وجملة نهاية الكود ، وبينهما ثلاثة أسطر
يبدأ الكود بكلمة Sub وهي اختصار لكلمة Subroutine أي إجراء فرعي (وهو ما يطلق عليه الكود أو الماكرو) ، وكما أن لكل شيء عنوان فلابد من تسمية الكود ، ويفضل أن تكون التسمية معبرة عن الهدف من الكود (هذه عادة طيبة يتبعها المبرمجون ، ربما ستعرف أهمية هذه النقطة إذا كنت بصدد بناء برنامج ضخم يحتوي على الكثير والكثير من الأكواد) ، فالتسمية تيسر عليك الأمر فيما بعد للوصول لكود محدد .. وهنا قمت بتسمية الماكرو FindLastRow أي إيجاد الصف الأخير.
وللتسمية شروط لن نتطرق إليها ، ولكن يفضل استخدام حروف إنجليزية كبيرة وصغيرة ، والابتعاد عن الرموز الخاصة ما عدا رمز UnderScore يمكن استخدامه للفصل بين الكلمات ، فيمكن تسمية الماكرو بهذا الاسم على سبيل المثال Find_Last_Row
وكما أن لكل شيء بداية ، فلابد له من نهاية والنهاية تكون بجملة End Sub أي إنهاء الإجراء الفرعي
ننتقل للب الموضوع وهو كيفية إيجاد رقم آخر صف في عمود محدد :::
** اكتب في صندوق الاسم Name Box على يسار شريط المعادلات ، اكتب A1000 مثلاً ثم اضغط إنتر
الآن من شريط الحالة أسفل البرنامج ستجد أيقونة لتسجيل الماكرو Record Macro قم بالنقر عليها
بعد النقر عليها سيظهر مربع حواري لبدء عملية تسجيل الماكرو ، انقر على زر الأمر OK لتبدأ في التسجيل (كل ما سنقوم به هو الانتقال للأعلى في نفس العمود) .. الخلية النشطة الآن هي الخلية A1000 والمطلوب الانتقال للأعلى ويتم ذلك بالضغط على Ctrl + سهم لأعلى
ستلاحظ تغير شكل الأيقونة الخاصة بالتسجيل لهذا الشكل (دليل على أن عملية التسجيل قد بدأت)
قم بالضغط على مفتاح Ctrl من لوحة المفاتيح ، ولا ترفع إصبعك من على المفتاح ، ثم اضغط سهم لأعلى من الأسهم الموجودة في لوحة المفاتيح
ثم قم بالنقر على نفس الأيقونة لإيقاف عملية التسجيل ، وانتقل لمحرر الأكواد عن طريق الضغط على Alt + F11 لترى ما تم تسجيله ، ستجد الشكل التالي :<code> </code>
CODE
Sub Macro1()
'
' Macro1 Macro
'
'
Selection.End(xlUp).Select
End Sub
كما نلاحظ تمت الإشارة إلى الخلية A1000 والتي كانت نشطة (محددة) بكلمة Selection يليها كلمة End مع ذكر الاتجاه لأعلى ما بين قوسين xlUp ، ثم أخيراً يتم تحديد تلك الخلية ، أي ببساطة يتم استخدام الجزء الأوسط للانتقال من خلية محددة لأعلى في نفس العمود
في الكود المقدم يبدأ السطر الأول بتعريف متغير باستخدام كلمة Dim يليها اسم المتغير ويفضل أن يكون معبر عن الهدف من استخدامه ، وبما أن المتغير سيستخدم لمعرفة رقم آخر صف فقمت بتسميته lastRow ، ثم بعد تسيمة المتغير يتم تعريف نوعه وهو سيكون رقم صحيح طويل ، حيث أن الصفوف في ورقة العمل تبدأ من 1 إلى 1048576.
في السطر التالي يتم تعيين قيمة للمتغير الذي تم الإعلان عنه ليساوي رقم آخر صف في العمود الأول.
يتم الإشارة أولاً إلى المصنف الذي سيتم العمل عليه ، وبما أن العمل سيكون على المصنف الحالي فنستخدم كلمة ThisWorkbook ، ويمكن الاستغناء عن هذا الجزء إذا كان العمل على مصنف واحد فقط.
ثم يتم الإشارة إلى ورقة العمل المطلوب استخراج رقم آخر صف بها وتستخدم كلمة Sheets يليها اسم ورقة العمل ، ويمكن الإشارة بطريقة أخرى باستخدام فهرسة الأوراق .. المهم أن توضع اسم ورقة العمل بين أقواس تنصيص (باستخدام Shift + حرف الطاء من لوحة المفاتيح)
بعد الإشارة للمصنف وورقة العمل نأتي للإشارة إلى الخلية في ورقة العمل ، والخلية المطلوبة هنا غير معلومة ، وسنحصل عليها بمعلومية عدد صفوف ورقة العمل وباستخدام الحيلة التي قمنا بها منذ قليل وهي الانتقال لأعلى من أي خلية فارغة في العمود نفسه
للإشارة إلى آخر خلية في العمود نستخدم كلمة Cells ويليها رقم الصف ورقم العمود ما بين قوسين بهذا الشكل:
CODE
Cells(Rows.Count, 1)<br />
الجزء الأول يشير لرقم الصف ، وتم استخدام Rows.Count للإشارة إلى آخر صف في العمود وهو الصف رقم 1048576 (في النسخ الجديدة للأوفيس) ، المهم هنا أنه يشير لأكبر رقم صف في العمود ، والجزء الثاني يشير لرقم العمود وهو هنا رقم 1 للإشارة إلى العمود الأول ..أي لو كنت تريد التعامل مع العمود الثالث C على سبيل المثال فيتحتم عليك استخدام الرقم 3 بدلاً من الرقم 1
بعد الإشارة لآخر صف في العمود يتم الانتقال لأعلى باسخدام الجملة:
CODE
End(xlUp)<br />
بهذا نكون قد وصلنا لمحطة النهاية وهي الخلية المعنية (التي يهمنا أمرها) ، ولكن بهذا القدر نحصل على الخلية نفسها وليكن A9 ، والمطلوب هو رقم الصف نفسه ، بالتالي نستخدم كلمة Row للحصول على رقم الصف للخلية المعنية
في نهاية المطاف في السطر الثالث نظهر رقم آخر صف في رسالة
أرجو أن يكون الشرح وافي ومفيد ، لأن هذا الكود يعتبر من أهم الأكواد التي لا غنى عنها لأي مبرمج سيتعامل مع ورقة العمل
أخوكم في الله / ياسر خليل أبو البراء