VBA ReDim | تعامل مع المصفوفات الديناميكية باستخدام VBA ReDim Preserve

بيان Excel VBA ReDim

بيان VBA Redim مشابه للبيان الخافت لكن الاختلاف هو أنه يُستخدم لتخزين أو تخصيص مساحة تخزين أكبر أو تقليل مساحة التخزين لمتغير أو مصفوفة معه ، والآن هناك جانبان مهمان يستخدمان مع العبارة الحفاظ ، إذا تم استخدام save مع هذه العبارة ، فإنه يُنشئ مصفوفة جديدة ذات حجم مختلف ، وإذا لم يتم استخدام save مع هذه العبارة ، فإنه يغير فقط حجم مصفوفة المتغير الحالي.

المصفوفات هي جزء مهم من ترميز VBA. باستخدام المصفوفات يمكننا تخزين أكثر من قيمة في نفس المتغير الذي حددناه. مثلما نعلن عن المتغير باستخدام كلمة "Dim" بالمثل ، نحتاج إلى تعريف اسم المصفوفة باستخدام "Dim" أيضًا.

للإعلان عن اسم المصفوفة ، نحتاج أولاً إلى تحديد نوع المصفوفة التي سنقوم بتعريفها. في المصفوفات ، لدينا 5 أنواع.

  1. مصفوفة ثابتة
  2. مصفوفة ديناميكية
  3. مصفوفة ذات بعد واحد
  4. مصفوفة ثنائية الأبعاد
  5. صفيف متعدد الأبعاد

في المصفوفة الثابتة في excel ، سنحدد القيمة الأدنى والقيمة العليا للمصفوفة مسبقًا بوقت كافٍ أثناء الإعلان عن المتغير. على سبيل المثال ، انظر إلى المثال أدناه.

رمز:

 ReDim_Example1 فرعي () Dim MyArray (من 1 إلى 5) كنهاية سلسلة فرعية 

هنا MyArray هو اسم المصفوفة التي يمكن أن تحتوي على القيمة من 1 إلى 5. يمكن أن يحتوي MyArray على 5 نتائج مختلفة فيه مثل النتيجة أدناه.

رمز:

 Sub ReDim_Example1 () Dim MyArray (1 To 5) As String MyArray (1) = "Hi" MyArray (2) = "Good" MyArray (3) = "Morning" MyArray (4) = "Have a" MyArray (5) = "يوم جميل" End Sub 

مصفوفة ديناميكية مع بيان ReDim

ولكن في المصفوفة الديناميكية ، هذا ليس هو الحال ، لن نقرر القيمة الأدنى والقيمة العليا مقدمًا بوقت طويل ، بل نقوم فقط بتعريف اسم المصفوفة وتعيين نوع البيانات.

 ReDim_Example1 فرعي () Dim MyArray () باعتباره String End Sub 

من أجل جعل اسم المصفوفة ديناميكيًا ، نحتاج إلى إعلانه بكلمة "Dim" أولاً ولكن لا نحدد حجم المصفوفة مسبقًا. نحن فقط نسمي مصفوفة بقيم فارغة داخل الأقواس (). عندما لا تتضمن المصفوفة الحجم ، يتم التعامل معها كمصفوفة ديناميكية.

خافت MyArray () كسلسلة

في اللحظة التي تذكر فيها حجم المصفوفة داخل الأقواس تصبح مصفوفة ثابتة. خافت MyArray (1 إلى 5) كسلسلة

في المصفوفة الديناميكية ، نقوم دائمًا بتغيير حجم المصفوفة باستخدام كلمة "ReDim" في السطر التالي من الكود.

ReDim MyArray (1 إلى 6) كسلسلة

أي قيمة مخزنة في اسم المصفوفة في الخطوات السابقة ، أي استخدام عبارة "Dim" تبقى فارغة ، والحجم الذي أعلناه باستخدام "ReDim" يصبح الحجم الجديد للمصفوفة.

أمثلة لاستخدام بيان VBA Redim

يمكنك تنزيل قالب VBA ReDim Excel هذا هنا - قالب VBA ReDim Excel

مثال 1

ألق نظرة على مثال استخدام عبارة "ReDim" عمليًا. اتبع الخطوات التالية لتطبيق "ReDim".

الخطوة 1: قم بإنشاء اسم ماكرو أولاً.

الخطوة 2: قم بتعريف اسم المصفوفة كسلسلة.

رمز:

 ReDim_Example1 فرعي () Dim MyArray () باعتباره String End Sub 

الخطوة 3: الآن استخدم كلمة "Redim" وقم بتعيين حجم المصفوفة.

رمز:

 Sub ReDim_Example1 () Dim MyArray () على هيئة String ReDim MyArray (1 إلى 3) End Sub 

الخطوة 4: الآن يمكن أن يحتوي اسم المصفوفة "MyArray" على ما يصل إلى 3 قيم هنا. قم بتعيين القيمة لهذه المصفوفات الثلاثة مثل الموجودة أدناه.

رمز:

 Sub ReDim_Example1 () Dim MyArray () كسلسلة ReDim MyArray (1 إلى 3) MyArray (1) = "مرحبًا" MyArray (2) = "إلى" MyArray (3) = "VBA" End Sub 

لذا ، فإن المصفوفة الأولى تساوي الكلمة "Welcome" ، والمصفوفة الثانية تساوي الكلمة "to" ، والمصفوفة الثالثة تساوي الكلمة "VBA".

الخطوة 5: الآن قم بتخزين قيم الصفيف هذه في الخلايا.

رمز:

 Sub ReDim_Example1 () Dim MyArray () كسلسلة ReDim MyArray (1 إلى 3) MyArray (1) = "مرحبًا" MyArray (2) = "إلى" MyArray (3) = نطاق "VBA" ("A1"). القيمة = MyArray (1) Range ("B1"). القيمة = MyArray (2) Range ("C1"). القيمة = MyArray (3) End Sub 

الخطوة 6: إذا قمت بتشغيل هذا الرمز ، فيجب أن تكون لدينا هذه القيم في الخلية A1 و B1 و C1 على التوالي.

مثال # 2 - تغيير حجم المصفوفة مع تذكر القيم القديمة.

بمجرد تعيين القيم لاسم المصفوفة ، يمكننا أيضًا تغيير حجمها في أي وقت في الإجراء باستخدام كلمة "ReDim Preserve".

افترض أنك قد أعلنت بالفعل اسم مصفوفة وقمت بتعيين قيم لاسم المصفوفة مثل الاسم أدناه.

الآن ترغب في زيادة طول المصفوفة بمقدار 2 أي 5. في هذه الحالة ، يمكننا استخدام كلمة VBA “ReDim Preserve” لتغيير حجم المصفوفة لتذكر القيم القديمة أيضًا.

رمز:

 Sub ReDim_Example2 () Dim MyArray () مثل String ReDim MyArray (3) MyArray (1) = "مرحبًا" MyArray (2) = "إلى" MyArray (3) = "VBA" ReDim Preserve MyArray (4) MyArray (4) = نطاق "الحرف 1" ("A1"). القيمة = MyArray (1) النطاق ("B1"). القيمة = MyArray (2) النطاق ("C1"). القيمة = MyArray (3) النطاق ("D1"). القيمة = MyArray (4) End Sub 

الآن يمكننا إسناد قيمتين إضافيتين للمصفوفة.

رمز:

 Sub ReDim_Example2 () Dim MyArray () مثل String ReDim MyArray (3) MyArray (1) = "مرحبًا" MyArray (2) = "إلى" MyArray (3) = "VBA" ReDim Preserve MyArray (4) MyArray (4) = نطاق "الحرف 1" ("A1"). القيمة = MyArray (1) النطاق ("B1"). القيمة = MyArray (2) النطاق ("C1"). القيمة = MyArray (3) النطاق ("D1"). القيمة = MyArray (4) End Sub 

الآن قم بتخزين هذه القيم في الخلايا.

رمز:

 Sub ReDim_Example2 () Dim MyArray () مثل String ReDim MyArray (3) MyArray (1) = "مرحبًا" MyArray (2) = "إلى" MyArray (3) = "VBA" ReDim Preserve MyArray (4) MyArray (4) = نطاق "الحرف 1" ("A1"). القيمة = MyArray (1) النطاق ("B1"). القيمة = MyArray (2) النطاق ("C1"). القيمة = MyArray (3) النطاق ("D1"). القيمة = MyArray (4) End Sub 

الآن قم بتشغيل الماكرو وشاهد ما سيحدث

لذلك حصلنا على الكلمة الجديدة في الخلية D1.

سبب حاجتنا إلى استخدام كلمة "تحفظ" لأن المصفوفة يجب أن تتذكر قيم المصفوفة القديمة في الإجراء.

في اللحظة التي تتجاهل فيها كلمة "تحفظ" لن تتذكر القيم القديمة.

أشياء يجب تذكرها هنا

  • يمكن أن يحتوي ReDim فقط على القيمة الأخيرة للمصفوفة ، وليس القيم العديدة. على سبيل المثال ، لا يمكننا استخدام هذا الكود "ReDim Preserve MyArray (4 to 5)" ، سيؤدي هذا إلى ظهور الخطأ.
  • لا يمكننا ReDim مصفوفات ثابتة. في اللحظة التي تقوم فيها بتعيين حجم المصفوفة داخل الأقواس ، تصبح مصفوفة ثابتة.
  • باستخدام ReDim لا يمكننا تغيير نوع البيانات. يمكن أن تحتوي المصفوفة على نوع البيانات الذي قمنا بتعيينه أثناء التصريح عن المصفوفة.