לולאות ב-VBA

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

לולאות VBA כוללות:

לאחר מכן, נסקור מקרוב כל אחד מהמחזורים הללו.

ל-Loop Operator ב-Visual Basic

המבנה של מפעיל הלולאה השמיים ב-Visual Basic ניתן לארגן באחת משתי צורות: כלולאה להבא או בתור לולאה לכל אחד.

מחזור "ל... הבא"

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

עבור i = 1 עד 10 סך הכל = סך + iArray(i) הבא i

בלופ הפשוט הזה להבא נעשה שימוש במשתנה i, שלוקח ברצף את הערכים 1, 2, 3, … 10, ועבור כל אחד מהערכים הללו, קוד ה-VBA בתוך הלולאה מבוצע. לפיכך, לולאה זו מסכמת את רכיבי המערך. iArray במשתנה סה"כ.

בדוגמה לעיל, תוספת הלולאה לא צוינה, אז כדי להגדיל את המשתנה i מ-1 ל-10, ברירת המחדל היא תוספת 1... עם זאת, במקרים מסוימים יש צורך להשתמש בערכי תוספת שונים עבור הלולאה. ניתן לעשות זאת באמצעות מילת המפתח שלבכפי שמוצג בדוגמה הפשוטה הבאה.

עבור d = 0 עד 10 שלב 0.1 dTotal = dTotal + d הבא ד

מכיוון שבדוגמה לעיל, שלב ההגדלה מוגדר שווה ל 0.1, ואז המשתנה dTotal עבור כל חזרה על המחזור מקבל את הערכים 0.0, 0.1, 0.2, 0.3,... 9.9, 10.0.

כדי לקבוע את שלב הלולאה ב-VBA, אתה יכול להשתמש בערך שלילי, למשל, כך:

עבור i = 10 ל-1 שלב -1 iArray(i) = i הבא i

הנה התוספת -1, אז המשתנה i עם כל חזרה על המחזור מקבל את הערכים 10, 9, 8, … 1.

לולאה "לכל אחד"

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

עמום wSheet כגליון עבודה עבור כל wSheet בגיליונות עבודה MsgBox "Найден лист: " & wSheet.Name wSheet הבא

הצהרת הפסקת לולאה "יציאה עבור"

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

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

עבור i = 1 עד 100 If dValues(i) = dVal Then IndexVal = i Exit For End If Next i

לולאת Do While ב- Visual Basic

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

'פרוצדורה משנה מוציאה מספרי Fibonacci שאינם עולים על 1000 Sub Fibonacci() Dim i As Integer 'מונה לציון מיקום האלמנט ברצף Dim iFib As Integer 'מאחסן את הערך הנוכחי של הרצף Dim iFib_Next As Integer 'מאחסן את הערך הבא של הרצף Dim iStep As Integer 'מאחסן את הגודל של התוספת הבאה 'אתחול משתנים i ו-iFib_Next i = 1 iFib_Next = 0 'לולאת Do While תתבצע עד שהערך של 'מספר פיבונאצ'י הנוכחי גדול מ-1000 עשה בעוד iFib_Next < 1000 אם i = 1 ואז 'מקרה מיוחד עבור הרכיב הראשון iStep = 1 iFib = 0 אחרת 'שמור את הגודל של התוספת הבאה לפני החלפת 'הערך הנוכחי של הרצף iStep = iFib iFib = iFib_Next End אם 'הדפס את מספר פיבונאצ'י הנוכחי בעמודה A של גליון העבודה הפעיל 'בשורה עם index i Cells(i , 1). Value = iFib 'חשב את מספר פיבונאצ'י הבא והגדל את אינדקס מיקום האלמנט ב-1 iFib_Next = iFib + iStep i = i + 1 Loop End Sub

בדוגמה הנתונה, התנאי iFib_Next < 1000 נבדק בתחילת הלולאה. לכן, אם הערך הראשון iFib_Next אם היו יותר מ-1000, הלולאה לעולם לא הייתה מבוצעת.

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

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

עשה ... לולאה בעוד iFib_Next < 1000

סמל «עשה עד» ב-Visual Basic

מחזור תעשה עד ש מאוד דומה למחזור עושה תוך כדי: גוש הקוד בגוף הלולאה מבוצע שוב ושוב עד לעמידה בתנאי המצוין (התוצאה של הביטוי המותנה היא נָכוֹן). בהליך הבא תַת באמצעות מחזור תעשה עד ש אחזר ערכים מכל התאים בעמודה A גליון עבודה עד שהעמודה נתקלת בתא ריק:

iRow = 1 Do Until IsEmpty(Cells(iRow, 1)) 'ערך התא הנוכחי מאוחסן במערך dCellValues ​​dCellValues(iRow) = Cells(iRow, 1).Value iRow = iRow + 1 Loop

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

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

האם ... Loop Until Is Empty(Cells(iRow, 1))

השאירו תגובה