מערכים ב-Visual Basic for Application

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

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

Dim Team_Member1 As String Dim Team_Member2 As String ... Dim Team_Member20 As String

אבל אתה יכול להשתמש בדרך הרבה יותר פשוטה ומאורגנת - אחסן רשימה של שמות חברי צוות במערך של 20 משתנים כמו מחרוזת:

עמום Team_Members(1 עד 20) כמחרוזת

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

Team_Members(1) = "ג'ון סמית'"

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

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

עבור i = 1 עד 20 תאים(i,1).Value = Team_Members(i) הבא i

ברור שעבודה עם מערך שמאחסן 20 שמות היא הרבה פחות מסורבלת ומדויקת משימוש ב-20 משתנים נפרדים. אבל מה אם השמות האלה הם לא 20, אלא 1000? ואם בנוסף, נדרש לשמור בנפרד את שמות המשפחה והפטרונות?! ברור שבקרוב יהיה בלתי אפשרי לחלוטין לטפל בכמות כזו של נתונים בקוד VBA ללא עזרת מערך.

מערכים רב מימדיים ב-Excel Visual Basic

מערכי Visual Basic שנדונו לעיל נחשבים לחד מימדיים. זה אומר שהם מאחסנים רשימה פשוטה של ​​שמות. עם זאת, למערכים יכולים להיות מימדים מרובים. לדוגמה, ניתן להשוות מערך דו מימדי לרשת של ערכים.

נניח שאתה רוצה לשמור את נתוני המכירות היומיים לחודש ינואר עבור 5 צוותים שונים. זה ידרוש מערך דו מימדי המורכב מ-5 סטים של מדדים למשך 31 יום. בואו נכריז על מערך כזה:

Dim Jan_Sales_Figures(1 עד 31, 1 עד 5) כמטבע

כדי לגשת לרכיבי מערך Jan_Sales_Figures, עליך להשתמש בשני אינדקסים המציינים את היום בחודש ואת מספר הפקודה. לדוגמה, כתובת של רכיב המכיל נתוני מכירות עבור 2-אה צוותים עבור 15 ינואר ייכתב כך:

Jan_Sales_Figures(15, 2)

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

הכרזה על מערכים ב-Excel Visual Basic

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

עמום Team_Members(1 עד 20) כמחרוזת

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

עמום Team_Members(0 עד 19) כמחרוזת

למעשה, כברירת מחדל, המספור של רכיבי המערך מתחיל מ-0, ובהצהרת המערך, ייתכן שהאינדקס הראשוני לא יצוין כלל, כך:

Dim Team_Members(19) כמחרוזת

מהדר VBA יתייחס לערך כזה כאל הכרזה על מערך של 20 אלמנטים עם מדדים מ-0 עד 19.

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

Dim Jan_Sales_Figures(1 עד 31, 1 עד 5) כמטבע

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

Dim Jan_Sales_Figures(31, 5) כמטבע

אז ערך זה יטופל כמערך דו מימדי, שהמימד הראשון שלו מכיל 32 אלמנטים עם אינדקסים מ-0 עד 31, והממד השני של המערך מכיל 6 אלמנטים עם אינדקסים מ-0 עד 5.

מערכים דינמיים

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

מערך דינמי מוכרז בסוגריים ריקים, כך:

Dim Team_Members() כמחרוזת

לאחר מכן, תצטרך להכריז על הממד של המערך במהלך ביצוע קוד באמצעות הביטוי ReDim:

ReDim Team_Members(1 עד 20)

ואם במהלך ביצוע הקוד אתה צריך לשנות שוב את גודל המערך, אז אתה יכול להשתמש שוב בביטוי ReDim:

אם Team_Size > 20 אז ReDim Team_Members(1 To Team_Size) End If

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

אם Team_Size > 20 אז ReDim Preserve Team_Members(1 To Team_Size) End If

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

השאירו תגובה