VBA ReDim | התמודד עם מערכים דינמיים באמצעות VBA ReDim Preserve

הצהרת Excel VBA ReDim

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

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

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

  1. מערך סטטי
  2. מערך דינמי
  3. מערך אחד ממדי
  4. מערך דו מימדי
  5. מערך רב מימדי

במערך הסטטי ב- excel, נחליט את הערך התחתון והערך העליון של המערך מבעוד מועד תוך הכרזת המשתנה. לדוגמה, עיין בדוגמה הבאה.

קוד:

 משנה ReDim_Example1 () עמעום MyArray (1 עד 5) כתחתית מחרוזת 

כאן MyArray הוא שם המערך שיכול להחזיק את הערך מ -1 עד 5. MyArray יכול להחזיק 5 תוצאות שונות בו כמו זו למטה.

קוד:

 תת ReDim_Example1 () עמעום MyArray (1 עד 5) כמחרוזת MyArray (1) = "היי" MyArray (2) = "טוב" MyArray (3) = "בוקר" MyArray (4) = "יש" MyArray (5) = סוף יום "יום נחמד" 

מערך דינמי עם הצהרת ReDim

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

 Sub ReDim_Example1 () Dim MyArray () כ- Sub Substrings Sub 

על מנת להפוך את שם המערך לדינמי עלינו להכריז עליו במילה "עמום" אך לא להחליט את גודל המערך מבעוד מועד. אנחנו פשוט שם מערך עם ערכים ריקים בסוגריים (). כאשר המערך אינו כולל גודל אז מתייחסים אליו כאל מערך דינמי.

עמום MyArray () כמחרוזת

ברגע שאתה מזכיר את גודל המערך בתוך הסוגריים הוא הופך למערך סטטי. עמום MyArray (1 עד 5) כמחרוזת

במערך הדינמי, אנו תמיד משנים את גודל המערך על ידי שימוש במילה "ReDim" בשורה הבאה של הקוד.

ReDim MyArray (1 עד 6) כמחרוזת

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

דוגמאות לשימוש בהצהרת VBA Redim

תוכלו להוריד תבנית VBA ReDim Excel כאן - תבנית VBA ReDim Excel

דוגמה מס '1

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

שלב 1: צור תחילה שם מאקרו.

שלב 2: הצהיר על שם מערך כמחרוזת.

קוד:

 Sub ReDim_Example1 () Dim MyArray () כ- Sub Substrings Sub 

שלב 3: כעת השתמש במילה "Redim" והקצה את גודל המערך.

קוד:

 תת ReDim_Example1 () עמעום MyArray () כמחרוזת ReDim MyArray (1 עד 3) סוף סוף 

שלב 4: אז עכשיו שם המערך "MyArray" יכול להכיל עד 3 ערכים כאן. הקצה את הערך לשלושת המערכים הללו כמו למטה.

קוד:

 Sub ReDim_Example1 () Dim MyArray () As String ReDim MyArray (1 To 3) MyArray (1) = "Welcome" MyArray (2) = "to" MyArray (3) = "VBA" Sub Sub 

לכן, המערך הראשון שווה למילה "ברוך הבא", המערך השני שווה למילה "ל-", והמערך השלישי שווה למילה "VBA".

שלב 5: כעת שמור את ערכי המערך הללו בתאים.

קוד:

 תת ReDim_Example1 () עמום MyArray () כמחרוזת ReDim MyArray (1 עד 3) MyArray (1) = "ברוך הבא" MyArray (2) = "ל-" MyArray (3) = "VBA" טווח ("A1"). ערך = MyArray (1) טווח ("B1"). ערך = MyArray (2) טווח ("C1"). ערך = MyArray (3) Sub Sub 

שלב 6: אם אתה מפעיל קוד זה עלינו להחזיק את הערכים הללו בתא A1, B1 ו- C1 בהתאמה.

דוגמה מס '2 - שנה את גודל מערך תוך זכירת הערכים הישנים.

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

נניח שכבר הצהרת על שם מערך והקצית ערכים לשם המערך כמו זה שלמטה.

כעת תרצה להגדיל את אורך המערך ב -2 כלומר 5. במקרה זה, אנו יכולים להשתמש במילה VBA "ReDim Preserve" כדי לשנות את גודל אורך המערך כדי לזכור גם את הערכים הישנים.

קוד:

 Sub ReDim_Example2() Dim MyArray() As String ReDim MyArray(3) MyArray(1) = "Welcome" MyArray(2) = "to" MyArray(3) = "VBA" ReDim Preserve MyArray(4) MyArray(4) = "Character 1" Range("A1").Value = MyArray(1) Range("B1").Value = MyArray(2) Range("C1").Value = MyArray(3) Range("D1").Value = MyArray(4) End Sub 

Now we can assign two more values to the array.

Code:

 Sub ReDim_Example2() Dim MyArray() As String ReDim MyArray(3) MyArray(1) = "Welcome" MyArray(2) = "to" MyArray(3) = "VBA" ReDim Preserve MyArray(4) MyArray(4) = "Character 1" Range("A1").Value = MyArray(1) Range("B1").Value = MyArray(2) Range("C1").Value = MyArray(3) Range("D1").Value = MyArray(4) End Sub 

Now store these values in cells.

Code:

 Sub ReDim_Example2() Dim MyArray() As String ReDim MyArray(3) MyArray(1) = "Welcome" MyArray(2) = "to" MyArray(3) = "VBA" ReDim Preserve MyArray(4) MyArray(4) = "Character 1" Range("A1").Value = MyArray(1) Range("B1").Value = MyArray(2) Range("C1").Value = MyArray(3) Range("D1").Value = MyArray(4) End Sub 

Now run the macro and see what happens

So we got the new word in the D1 cell.

The reason why we need to use the word “preserve” because array should remember the old array values in the procedure.

The moment you ignore the word “preserve” it will not remember old values.

Things to Remember Here

  • ReDim can only hold the last value of the array, not the many values. For example, we cannot use this code “ReDim Preserve MyArray(4 to 5)”, this will throw the error.
  • We cannot ReDim static arrays. The moment you assign the size of the array inside the parenthesis it becomes a static array.
  • Using ReDim we cannot change the data type. The array can hold whatever the data type we have assigned while declaring the array.