התקשרו אלינו: 052-2928949
ימים א'-ה' בין השעות 9:00-17:00

התקשרו אלינו: 052-2928949 א-ה 9:00-17:00

לולאות Do

VBA Tip

לולאות Do

VBA Tip

לולאות Do Loop

לולאה היא טכניקה לביצוע פעולות שחוזרות על עצמן.
במקום לכתוב את הפעולות שוב ושוב, נכתוב אותן פעם אחת בלבד, נכניס למבנה לולאה
ונורה לתוכנה כמה פעמים לחזור על הפעולות.
ישנם שני סוגים עיקריים של לולאות – לולאות מסוג DO ולולאות מסוג FOR.
לולאת DO, בה יעסוק מאמר זה, מאפשרת לחזור על קוד, בהתבסס על קיומו של תנאי מסוים, כאשר מספר החזרות אינו ידוע מראש.

אז ראשית, מהם תנאים?

תנאי הוא ביטוי חשבוני שהתוצאה שלו יכולה להיות אמת או שקר, לדוגמה:

Range("a1") > Range("a2")
Range("a1") <= Range("a2")
Range("a1") = ""
Range("a1") = 999
Range("a1") <> Range("a2")

הסבר:
הביטוי הראשון טוען שהערך שנמצא בתא A1 גדול יותר מהערך שקיים בתא B2.
לביטוי זה יכולות להיות אחת משתי תוצאות – אמת או שקר.
אם הערך שנמצא בתא A1 אכן גדול מהערך שנמצא בתא A2, אזי תוצאת הביטוי היא אמת,
ואם הוא שווה או קטן, אזי תוצאת הביטוי היא שקר.
רק במקרה של 'אמת' הקוד יכנס לתוך הלולאה ויבצע את הפעולות הרשומות בה.
בשאר הדוגמאות הראיתי אפשרויות נוספות לכתיבת ביטויים שתוצאתם היא אמת או שקר,
ניתן להשתמש כמובן גם בAnd, Or ו Not

ישנם שני סוגי לולאות מסוג Do-Loop:

לולאת Do While

הלולאה מאפשרת חזרה על פקודות מסוימות, כל עוד מתקיים תנאי מסוים.

Range("a1").Select
Do While ActiveCell.Value <> ""
      ActiveCell.Value = ActiveCell.Value + 1
      ActiveCell.Offset(1, 0).Select
Loop

הסבר:
בדוגמה שלעיל, הלולאה מוסיפה 1 לערך שנמצא בתא הפעיל, ולאחר מכן בוחרת את התא שנמצא מתחתיו, כל עוד התא הפעיל אינו ריק.
כאשר בזמן הריצה יבחר תא ריק, יפסיק הקוד את פעולתו (גם אם קיימים תאים נוספים ובהם ערכים, לאחר מיקומו של התא הריק).

לולאת Do-Until

הלולאה מאפשרת חזרה על פקודות מסוימות, עד שמתקיים תנאי מסוים.

Range("a1").Select
Do Until ActiveCell.Value = ""
       ActiveCell.Value = ActiveCell.Value + 1
       ActiveCell.Offset(1, 0).Select
Loop

הסבר:
בדוגמה שלעיל, הלולאה מוסיפה 1 לערך שנמצא בתא הפעיל, ולאחר מכן בוחרת את התא שנמצא מתחתיו, עד שתגיע לתא ריק.
כאשר בזמן הריצה יבחר תא ריק, יפסיק הקוד את פעולתו (גם אם קיימים תאים נוספים ובהם ערכים, לאחר מיקומו של התא הריק).

למעשה, מבצעים שני הקודים את אותה הפעולה, אך בהתייחסות שונה –
בקוד הראשון מתבצע התנאי כל עוד התא אינו ריק, ואילו בקוד השני מתבצע התנאי עד שיגיע לתא ריק.

ועכשיו, טריק שמעטים מכירים:
בפורמט שכתבנו את הקודים לעיל, הבדיקה נעשית כבר בכניסה ללולאה, ואם התנאי לא מתקיים, לא יתבצעו הפעולות.
אבל, לפעמים אנחנו מעוניינים שללא קשר לתנאי, הפעולה תתבצע לפחות פעם אחת, בין אם התנאי מתקיים או לא מתקיים.
כדי לעשות את זה, נעביר את התנאי משורת ה DO לשורת ה LOOP, כך:

Range("a1").Select
Do
     ActiveCell.Value = ActiveCell.Value + 1
     ActiveCell.Offset(1, 0).Select
Loop While ActiveCell.Value <> ""

רוצים ללמוד על לולאת FOR? לחצו כאן

דילוג לתוכן