MICROSOFT LOGO
MICROSOFT LOGO
קורס אקסל VBA

קורס אקסל VBA – לולאות

carmel website
carmel-website
carmel-website

לולאות מאפשרות לחזור על אותו רצף של פקודות מספר פעמים. ישנם שני סוגים של לולאות:

  • For Loops – חזרה על רצף פקודות מספר מוגדר של פעמים:
    • For-Next – מספר החזרות נקבע מראש וניתן לקבוע גם את האינטרוולים בין החזרות.
    • For-Each – לולאות המבוצעות על Collections (ר' עמ' 62). מספר החזרות תלוי במספר האובייקטים באוסף.
  • Do Loops – חזרה על רצף פקודות כל עוד מתקיים תנאי מסוים, כלומר, מספר פעמים לא ידוע מראש:
    • Do-While – לולאה שתמשיך לרוץ ולבצע חזרות כל עוד תנאי מוגדר מתקיים ותפסיק כאשר הוא לא יתקיים.
    • Do-Until – לולאה שתמשיך לרוץ ולבצע חזרות כל עוד תנאי מוגדר לא מתקיים ותפסיק כאשר הוא יתקיים.

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

לולאת For-Next

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

For RunsCounter = {Start Number} To {End Number}

Command

Command

Command

Next RunsCounter

RunsCounter – דוגמה למשתנה שסופר את הריצות, עבורו יש להגדיר את המספרים ביניהם ירוץ הקוד (Start Number ו-End Number).

הדוגמה הבאה מציגה לולאה המוגדרת לחזור חמש פעמים:

תוצאת ריצת הקוד בגיליון:

הדוגמה הבאה מציגה קוד אשר בונה בגיליון את לוח הכפל עד 5, באמצעות לולאת ForNext:

תוצאת ריצת הקוד בגיליון:

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

הדוגמה הבאה מציגה לולאה של מונה הצועד מ-1 ועד 20 בקפיצות של 2:

תוצאת ריצת הקוד בגיליון:

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

תוצאת ריצת הקוד בגיליון:

ניתן להריץ את המונה גם לאחור. הדוגמה הבאה מציגה לולאה של מונה הצועד מ-50 ועד 1 בקפיצות של 3:

תוצאת ריצת הקוד בגיליון:

לולאת For-Each

כאמור, גם לולאת ForEach מבצעת מספר מוגדר של חזרות, אך ההגדרה הזו היא לא מספרית, אלא נובעת מכמות האובייקטים או הפריטים ב- Collection(ר' עמ' 62). כלומר, לולאת ForEach רצה על כל האובייקטים או הפריטים באוסף ומבצעת פעולות עבור כל אחד מהם. כזכור, האובייקטים או הפריטים באוסף מסודרים ברצף כרונולוגי, בהתאם לסדר זה תרוץ הלולאה על האוסף.

להלן המבנה התחבירי של הלולאה:

For Each {Object} in {Collection}

Command

Command

Command

Next

הדוגמה הבאה מציגה את יצירת לוח הכפל, הפעם באמצעות ForEach במקום ForNext (כפי שבוצע בסעיף הקודם):

  • ניתן לראות כי האוסף עליו רצה הלולאה היא של Range בין התאים A1:E5.
  • TA– משתנה עזר שמציין את האובייקט הנוכחי (תא בטווח שבין A1:A5) בו נמצאת הלולאה בכל חזרה.
  • הפקודה המתבצעת בכל חזרה, היא הזנה לתוך ערך התא הנוכחי את המכפלה של מספר השורה ומספר העמודה של אותו התא:
    • Row – מאפיין השייך לאובייקט מסוג Cell (תא) המציין את מספר השורה.
    • Column – מאפיין השייך לאובייקט מסוג Cell (תא) המציין את מספר העמודה.

תוצאת ריצת הקוד בגיליון:

באמצעות היכולת לרוץ על כל האובייקטים באוסף נוכל לבצע מספר פעולות חשובות באופן מהיר, קצר ויעיל. למשל: מילוי מהיר ואוטומטי של פריטים בתוך אוסף, יצירת רשימת מאפיינים מותאמת אישית עבור כל אובייקט מותאם אישית (ר' עמ' 65), ריצה על טווח נתונים במסד נתונים גדול ולבדוק כל תא ו/או לשנות את המאפיינים שלו בריצה אוטומטית ומהירה.

היתרונות העיקריים של לולאת ForEach על פני לולאות אחרות:

  • ForEach מתאימה לריצה על אובייקטים.
  • זמן הריצה של הקוד קצר בהרבה מאשר לולאת ForNext.

הדוגמא הבאה מציגה יצירת אוסף פריטים חדש על בסיס רשימה שקיימת בגיליון. להלן רשימת הפריטים בגיליון:

להלן הקוד ליצירת האוסף:

  • ניתן להבחין בשורת הקוד Set {Collection} = Nothing. פקודה זו מנקה אוסף מכל הפריטים שבו.
  • רשימת הפריטים בגיליון היא אוסף הנמצא בטווח תאים. עבור כל אובייקט באוסף Range שבין תא A1 בגיליון ועד התא האחרון ברשימה, הוא Range("A1").End(xlDown), מתבצעות חזרות הלולאה.
  • VegItem– משתנה עזר שמציין את האובייקט הנוכחי בו נמצאת הלולאה בכל חזרה.
  • בכל חזרה נכנס הערך שבתוך התא כפריט חדש לתוך אוסף אחר הוא VeggieColl.

להלן תצוגת חלונית Locals לאחר ריצת הקוד:

לולאות Do-Loop

באמצעות לולאות Do-Loop ניתן לחזור על קטע קוד ביחס להתקיימות תנאי מסוים, כאשר אין לנו מספר חזרות מוגדר. בלולאת Do-While החזרות ממשיכות כל התנאי מתקיים ובלולאת Do-Until החזרות ממשיכות עד לרגע שהתנאי מתקיים.

להלן המבנה התחבירי של הלולאות:

Do While {Condition}                                                              Do Until {Condition}

Command                                                                               Command

Command                                                                               Command

Command                                                                               Command

Loop                                                                                       Loop

הדוגמה הבאה מציגה טבלה של מוצרים (מק"ט, שם ומחיר), שיש להוזיל ב-2%:

להלן הקוד עם לולאת DoWhile שעוברת בכל תא בטבלה שיש בו מחיר ומוזילה אותו ב-2% (לכדי 0.98 מתוך המחיר):

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

תוצאת ריצת הקוד בגיליון:

הדוגמה הבאה מציגה את הקוד עבור אותה הפעולה עם לולאת DoUntil:

ניתן לראות כי ההבדל בתנאי הוא באופרטור: במקום כל עוד (While) ערך התא הפעיל שונה מריק (" "), התנאי הוא עד ((Until שערך התא הפעיל שווה לריק.

הדוגמה הבאה מציגה ציונים של סטודנטים במבחן, שנבחנו במועדים A ו-B:

להלן קוד להוספת 7 נקודות לציוני כל הסטודנטים שנבחנו במועד A בלבד:

תוצאת ריצת הקוד בגיליון:

תוכן עניינים

מלאו פרטים ונחזור אליכם בהקדם
למדו מהמומחים שלנו
קורסים נוספים
למה לבחור בכרמל הדרכה?
אנחנו מציעים פתרונות איכותיים להדרכות מקצועיות שחוסכות לכם זמן ומשאבים, ומספקים לכם את הכלים לקחת את הכישורים שלכם צעד קדימה!
carmel website
מרצים מובילים

בעלי ניסיון הדרכתי
ומעשי עשיר

carmel website
מגיעים אליכם

אתם קובעים את
מיקום הקורס והמועד

carmel website
תאוריה ותרגול

חומרי לימוד ומעבדות
רשמיות של מיקרוסופט הזמינים בענן

carmel website
תוכנית מותאמת

התאמה מלאה ואישית
לדרישות ולצרכי הארגון

מתחיל ב-07.01.2025

3 מפגשים

16:00 - 09:00
דילוג לתוכן