من ضمن المفاهيم/الأساليب المستخدمة في لغات البرمجة ما يُعرف بالحلقات التكرارية Loops. تقوم الحلقات التكرارية بتنفيذ كود معين عدد محدد من المرات؛ وهي بذلك توفر على المٌبرمج الوقت والجهد المبذول في عملية كتابة الأكواد
في موضوع اليوم نستعرض أحد أنواع الحلقات التكرارية المتاحة للإستخدام في مايكروسوفت إكسل For Next
النقاط الرئيسية في هذا الموضوع
- طريقة كتابة الحلقة التكرارية For … Next
- إستخدام المعامل Step للتحكم في إتجاه ومقدار الحركة داخل الحلقة التكرارية
- كيفية إنهاء عمل الحلقة التكرارية قبل إنتهاء سلسلة التنفيذ من خلال المعامل Exit For
- الشكل العام للحلقة التكرارية For Each
- ملاحظات على الحلقة التكرارية For Each
- كيفية إعداد قائمة بأسماء أوراق العمل Worksheets
الاكواد المستخدمة :
Sub test()
Cells(7, 9).Value = 1
Cells(8, 9).Value = 1
Cells(9, 9).Value = 1
Cells(10, 9).Value = 1
Cells(11, 9).Value = 1
Cells(12, 9).Value = 1
Cells(13, 9).Value = 1
End Sub |
Sub test2()
For i = 7 To 13 Step 2
Cells(i, 9).Value = 1
Next i
End Sub |
Sub test3()
For i = 2 To 8 Step 2
Cells(16, i).Value = 1
Next i
End Sub |
Sub test4()
For i = 8 To 2 Step -2
Cells(18, i).Value = 5
Next i
End Sub |
Sub test5()
For i = 24 To 30
If Cells(i, 2) > Date Then Exit For
Cells(i, 4).Value = Cells(i, 2).Value
Next i
End Sub |
وبعد أن تحدثنا عنالحلقات التكرارية For Nextوفائدتها في تنفيذ كود معين لعدد محدد من المرات تعالو بنا نستعرض نوع جديد وهو For Each.
الشكل العام للحلقة التكرارية For Each
For each عنصر in المجموعة
الكود المراد تنفيذه
Next عنصر |
مثال
الماكرو التالي يقوم بعمل تنسيق لكل خلية (العنصر) ضمن النطاق الذي تم تحديده (المجموعة) باللون ذو الكود رقم 111
Sub For_Each_Loop()
For Each cell In Selection
cell.Interior.Color = 111
Next cell
End Sub |
ملاحظات على الحلقة التكرارية For Each
- تقوم الحلقة التكرارية For Each بتنفيذ الكود على العنصر element داخل المجموعة Collection وبذلك فهي يتم تنفيذها بعدد غير معلوم اثناء كتابة الكود (على عكس)
- الحلقة التكرارية For Next التي يتم تنفيذها بعدد معلوم حدوده من الحد الأدني Lower Bound والحد الأعلي Upper Bound
- يمكننا إستخدام المعامل Exit For لإيقاف الحلقة التكرارية عن العمل في حالة تحقق شرط معين (على سبيل المثال إستخدام لمشاهدة الروابط يلزمك التسجيل في أكاديمية الصقر للتدريبفي الكود)
For Each element In Collection
كود 1
Exit For
كود 2
Next element |
الأكواد المستخدمة
Sub ForEachLoop1()
Dim cell As Range
For Each cell In Range("b5:e12")
If cell.Value >= 5 Then
cell.Interior.ColorIndex = 43
End If
Next cell
End Sub |
Sub Foreachloop2()
Dim cell As Range
For Each cell In Selection
cell.Font.ColorIndex = 3
Next cell
End Sub |
Sub ShowAllSheets()
Dim sheet As Worksheet
For Each sheet In Sheets
sheet.Visible = True
Next sheet
End Sub |
كيفية إعداد قائمة بأسماء أوراق العمل Worksheets التي توجد بالملف ثم تحويل إسم كل شيت الى رابط للشيت Hyperlink.
الأساليب المتبعة في هذا الكود
- الحلقة التكرارية For Each
- الدالة Hyperlink – VBA
كود إنشاء قائمة بأسماء worksheets في الملف
Option Explicit
Sub ListAllSheets2()
Dim sht As Worksheet
Dim i As Integer
i = 2
For Each sht In Worksheets
i = i + 1
ActiveSheet.Hyperlinks.Add _
anchor:=Cells(i, 2), _
Address:="", _
SubAddress:=sht.Name & "!a1", _
TextToDisplay:=sht.Name
Next sht
End Sub |
حين تكون أسماء أوراق العمل تشتمل على مسافة، فإن كود الهايبرلينك لا يعمل وبعطي رسالة خطأ؛ لمعالجة هذه المشكلة يتم تعديل الكود الى التالي
Option Explicit
Sub ListAllSheets2()
Dim sht As Worksheet
Dim i As Integer
i = 2
For Each sht In Worksheets
i = i + 1
ActiveSheet.Hyperlinks.Add _
anchor:=Cells(i, 2), _
Address:="", _
SubAddress:="'" & sht.Name & "'" & "!a1", _
TextToDisplay:=sht.Name
Next sht
End Sub |
والى هنا انتهى درس اليوم
مع اللقاء ودرس جديد ان شاء الله
مع تحيات أخوكم
عبدالجيد أبو محمد وابراهيم