المصفوفات في Visual Basic for Application

المصفوفات في Visual Basic for Application هي هياكل تخزن عادةً مجموعات من المتغيرات ذات الصلة من نفس النوع. يتم الوصول إلى إدخالات الصفيف من خلال فهرسها العددي.

على سبيل المثال ، هناك فريق من 20 شخصًا يجب حفظ أسمائهم لاستخدامها لاحقًا في كود VBA. يمكن للمرء ببساطة الإعلان عن 20 متغيرًا للاحتفاظ بكل اسم ، على النحو التالي:

Dim Team_Member1 كسلسلة Dim Team_Member2 كسلسلة ... Dim Team_Member20 كسلسلة

ولكن يمكنك استخدام طريقة أبسط وأكثر تنظيمًا - قم بتخزين قائمة بأسماء أعضاء الفريق في مجموعة من 20 متغيرًا مثل خيط:

Dim Team_Members (1 to 20) as String

في السطر الموضح أعلاه ، أعلنا عن مصفوفة. لنكتب الآن قيمة لكل عنصر من عناصره ، على النحو التالي:

Team_Members (1) = "جون سميث"

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

يتم توضيح كيفية عمله أدناه مع مثال رمز يطبع أسماء كل عضو في الفريق بالتسلسل في خلايا العمود. A ورقة عمل Excel نشطة.

بالنسبة إلى i = 1 إلى 20 خلية (i ، 1) .Value = Team_Members (i) Next i

من الواضح أن العمل مع مصفوفة تخزن 20 اسمًا أقل تعقيدًا وأكثر دقة من استخدام 20 متغيرًا منفصلاً. ولكن ماذا لو لم تكن هذه الأسماء 20 بل 1000؟ وإذا كان مطلوبًا بالإضافة إلى ذلك الاحتفاظ بألقاب العائلة وألقابها بشكل منفصل ؟! من الواضح أنه سيصبح قريبًا من المستحيل تمامًا التعامل مع مثل هذا الحجم من البيانات في كود VBA دون مساعدة مصفوفة.

المصفوفات متعددة الأبعاد في Excel Visual Basic

تعتبر مصفوفات Visual Basic التي تمت مناقشتها أعلاه ذات بعد واحد. هذا يعني أنهم يقومون بتخزين قائمة بسيطة من الأسماء. ومع ذلك ، يمكن أن تحتوي المصفوفات على أبعاد متعددة. على سبيل المثال ، يمكن مقارنة مصفوفة ثنائية الأبعاد بشبكة من القيم.

لنفترض أنك تريد حفظ أرقام المبيعات اليومية لشهر يناير لـ 5 فرق مختلفة. سيتطلب ذلك مصفوفة ثنائية الأبعاد تتكون من 5 مجموعات من المقاييس لمدة 31 يومًا. دعنا نعلن عن مصفوفة مثل هذا:

قاتمة Jan_Sales_Figures (1 إلى 31 ، 1 إلى 5) كعملة

للوصول إلى عناصر المصفوفة أرقام_مبيعات يناير، تحتاج إلى استخدام فهرسين يشيران إلى يوم الشهر ورقم الأمر. على سبيل المثال ، عنوان عنصر يحتوي على أرقام مبيعات لـ 2 أوه فرق ل 15 عشر سيتم كتابة يناير على هذا النحو:

أرقام_مبيعات يناير (15 ، 2)

بالطريقة نفسها ، يمكنك إعلان مصفوفة ذات أبعاد 3 أو أكثر - فقط أضف أبعادًا إضافية إلى إعلان المصفوفة واستخدم فهارس إضافية للإشارة إلى عناصر هذه المصفوفة.

التصريح عن المصفوفات في Excel Visual Basic

في وقت سابق من هذه المقالة ، نظرنا بالفعل في عدة أمثلة لتصريح المصفوفات في VBA ، لكن هذا الموضوع يستحق نظرة فاحصة. كما هو موضح ، يمكن الإعلان عن مصفوفة أحادية البعد على النحو التالي:

Dim Team_Members (1 to 20) as String

مثل هذا التصريح يخبر مترجم VBA بأن المصفوفة أعضاء الفريق يتكون من 20 متغيرًا يمكن الوصول إليها في مؤشرات من 1 إلى 20. ومع ذلك ، قد نفكر في ترقيم متغيرات المصفوفة لدينا من 0 إلى 19 ، وفي هذه الحالة يجب إعلان المصفوفة على النحو التالي:

Dim Team_Members (0 to 19) as String

في الواقع ، يبدأ ترقيم عناصر المصفوفة افتراضيًا من 0 ، وفي إعلان المصفوفة ، قد لا يتم تحديد الفهرس الأولي على الإطلاق ، مثل هذا:

Dim Team_Members (19) As String

سيتعامل مترجم VBA مع هذا الإدخال كإعلان عن مصفوفة من 20 عنصرًا بمؤشرات من 0 إلى 19.

يتم تطبيق نفس القواعد عند التصريح عن مصفوفات Visual Basic متعددة الأبعاد. كما هو موضح بالفعل في أحد الأمثلة ، عند التصريح عن مصفوفة ثنائية الأبعاد ، يتم فصل مؤشرات أبعادها بفاصلة:

قاتمة Jan_Sales_Figures (1 إلى 31 ، 1 إلى 5) كعملة

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

خافت Jan_Sales_Figures (31 ، 5) كعملة

ثم سيتم التعامل مع هذا الإدخال كمصفوفة ثنائية الأبعاد ، يحتوي البعد الأول منها على 32 عنصرًا مع فهارس من 0 إلى 31 ، ويحتوي البعد الثاني للمصفوفة على 6 عناصر مع فهارس من 0 إلى 5.

صفائف ديناميكية

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

يتم التصريح عن المصفوفة الديناميكية بأقواس فارغة ، مثل هذا:

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

بعد ذلك ، ستحتاج إلى الإعلان عن بُعد المصفوفة أثناء تنفيذ التعليمات البرمجية باستخدام التعبير إعادة ديم:

ReDim Team_Members (1 إلى 20)

وإذا احتجت أثناء تنفيذ الكود إلى تغيير حجم المصفوفة مرة أخرى ، فيمكنك استخدام تعبير ReDim مرة أخرى:

إذا كان حجم الفريق> 20 ثم ReDim Team_Members (1 To Team_Size) End If

ضع في اعتبارك أن تغيير حجم المصفوفة الديناميكية بهذه الطريقة سيؤدي إلى فقدان جميع القيم المخزنة في المصفوفة. من أجل تخزين البيانات الموجودة بالفعل في المصفوفة ، تحتاج إلى استخدام الكلمة الأساسية المحافظةكما هو مبين أدناه:

إذا كان حجم الفريق> 20 ثم ReDim Preserve Team_Members (1 To Team_Size) End If

للأسف الكلمة الرئيسية المحافظة يمكن استخدامها فقط لتغيير الحد الأعلى لبُعد المصفوفة. لا يمكن تغيير الحد الأدنى للمصفوفة بهذه الطريقة. أيضًا ، إذا كانت المصفوفة لها أبعاد متعددة ، فاستخدم الكلمة الأساسية المحافظة، يمكن فقط تغيير حجم البعد الأخير للصفيف.

اترك تعليق