מדריך | מאקרו למתחילים חלק 5: לולאה בתוך לולאה
-
לולאה בתוך לולאה
אז במדריך הקודם ראינו איך משלבים לולאה מתמשכת בתוך הלולאה (תנאי If), שידע לעשות דברים שונים לפי המיקום.
אבל מה נעשה אם נרצה למלא לא רק עמודה אחת כלפי מטה, אלא שטח שלם? כמו טבלה?
כלומר: אנחנו רוצים למלא את לוח הכפל, או למלא נתונים לרוחב ולא רק בתא A
אז בעז"ה נראה היום איך עושים "לולאה בתוך לולאה" (לולאה כפולה).
אז יש לנו את הפקודה הזאת:Sub LoopInsideLoop() Dim i As Integer Dim j As Integer For i = 1 To 5 For j = 1 To 4 Cells(i, j).Value = "שורה " & i & " כיסא " & j Next j Next i End Sub
הקטע הראשון והאחרון – מוכרים מהמדריכים הקודמים ככלי יסוד לכל מאקרו.
אחרי זה יש לנו:Dim i As Integer Dim j As Integerכלומר: משתנים של הלולאה וכאן אנחנו צריכים שני משתנים אחד יספור את השורות ( i) ואחד יספור את העמודות (j)
והנקודה החשובה בקוד זה הקטע הזהFor i = 1 To 5 For j = 1 To 5כאן קורה הלולאה השנייה אנחנו אומרים למחשב:
תתפוס את שורה מספר 1 (i=1) ואל תעבור לשורה הבאה אלא תריץ לולאה חדשה שתספור מ-1 עד 5 לרוחב (j)
כלומר: בכל התאים בשורה 1
בתוך הלולאה אנחנו כותבים:Cells(i, j).Value = "שורה " & i & " כיסא " & jכלומר:
בתא שנמצא בשורה i ובעמודה j, תכניס את התוצאה של ההכפלה ביניהם.
מה שקורה בפועל זה:
המחשב עומד על שורה 1, ורץ: עמודה 1, עמודה 2, עמודה 3... עד 5.
רק אחרי שהוא סיים את ה-Next j (סיים את השורה לרוחב), הוא מגיע ל-Next iכלומר: עכשיו תרד לשורה מספר 2, ותתחיל את כל הסיבוב של העמודות מהתחלה.
למעשה בשתי מילים
הלולאה החיצונית (i) מחזיקה את השורה, והלולאה הפנימית (j) וממלאת את התאים באותה שורה, עד שעוברים לשורה הבאה
כמובן שאין צורך להסביר למה זה מנפק"מ
מספיק התמונה הבאה

כמו שאנחנו רואים זה ממלא לנו את כל הטבלה לארוך ולרוחב עם מספור אוטמטי!
בהצלחה!