أساسيات VBA إكسل : استعمالات الجداول في VBA الجزء الثاني
هذه التدوينة هي جزء ثاني للتدوينة التي تكلمنا فيها عن استعمالات الجداول في VBA
الجدول ثنائي الأبعاد
لحفظ عدة
أعمدة من البيانات ، يلزم وجود بُعد إضافي.
هنا مثال:
حفظ البيانات
في جدول ثنائي الأبعاد:
'Déclarations Dim tableau(10, 2) 'Tableau de 11 x 3 "cases" Dim i As Integer 'Enregistrement des valeurs dans le tableau For i = 0 To 10 tableau(i, 0) = Range("A" & i + 2) tableau(i, 1) = Range("B" & i + 2) tableau(i, 2) = Range("C" & i + 2) Next
وبعض الأمثلة
على القيم:
MsgBox tableau(0, 0) 'Renvoie : 11.03.2026 MsgBox tableau(0, 1) 'Renvoie : 24 MsgBox tableau(9, 2) 'Renvoie : NON MsgBox tableau(10, 2) 'Renvoie : OUI
الجدول الديناميكي
مثلا قاعدة البيانات نفسها يتم تحديثها بانتظام وأنه لا يمكننا بالتالي إدخال قيم ثابتة
في الإعلان ... في هذه الحالة ، سيكون الجدول الديناميكي مفيدًا للغاية.
لمعرفة رقم
الصف الأخير في قاعدة البيانات الخاصة بنا ، استخدم الصيغة التالية :
derniereLigne = Cells(Rows.Count, 1).End(xlUp).Row
إذا أدخلت
متغيرًا عند التصريح ، فلن يقبله الاكسيل .
قم بتعريف
جدول ديناميكية(أقواس فارغة) ، ثم حدد أبعادها باستخدام Redim
Dim tableau() ReDim tableau(derniereLigne - 2, 2)
بهذه الطريقة
ستحفظ تلقائيًا جميع صفوف قاعدة البيانات في الجدول:
Sub exemple() 'Déclarations Dim tableau(), derniereLigne As Integer, i As Integer 'Dernière ligne de la base de données derniereLigne = Cells(Rows.Count, 1).End(xlUp).Row 'Redimensionnement ReDim tableau(derniereLigne - 2, 2) 'Enregistrement des valeurs dans le tableau For i = 0 To derniereLigne - 2 tableau(i, 0) = Range("A" & i + 2) tableau(i, 1) = Range("B" & i + 2) tableau(i, 2) = Range("C" & i + 2) Next End Sub
UBOUND
في المثال
أعلاه ، كان الرقم الأخير في الجدول لدينا يساوي derniereLigne - 2 :
For i = 0 To derniereLigne - 2
الحل لمعرفة
هذا الرقم (إذا لم تكن هذه المعلومات متوفرة بالفعل) هو استخدام وظيفة Ubound :
For i = 0 To UBound(tableau)
ترجع هذه
الدالة أكبر رقم لبُعد مختار.
بعض الأمثلة
لفهم أفضل:
Sub exemple() Dim tableau(10, 2) MsgBox UBound(tableau) 'Renvoie : 10 MsgBox UBound(tableau, 1) 'Renvoie : 10 MsgBox UBound(tableau, 2) 'Renvoie : 2 End Sub
حفظ نطاق من الخلايا
من الممكن حفظ
نطاق من الخلايا في جدول دون المرور بحلقة.
'Déclarations Dim tableau(10, 2) 'Tableau de 11 x 3 "cases" Dim i As Integer 'Enregistrement des valeurs dans le tableau For i = 0 To 10 tableau(i, 0) = Range("A" & i + 2) tableau(i, 1) = Range("B" & i + 2) tableau(i, 2) = Range("C" & i + 2) Next
يمكن استبدال
الكود أعلاه بما يلي:
'Déclaration Dim tableau() 'Enregistrement des valeurs dans le tableau tableau = Range("A2:C12")
حتى لو بدت
هذه الطريقة الثانية جذابة للوهلة الأولى ، فإنها في كثير من الحالات تجعلك تضيع
وقتًا أطول من الطريقة الأولى ...
من خلال تسجيل
بياناتك في الجدول بهذه الطريقة ، فإن الرقم الأول ليس 0 ولكن 1 ، يمكن أن يكون
مربكًا. بالإضافة إلى ذلك ، إذا اخترت أثناء التطوير حفظ
البيانات التي تلبي معايير معينة فقط في الجدول (أو إجراء عملية أخرى) ، فسيتعين
عليك المرور عبر حلقة على أي حال.
ARRAY
قد تحتاج
أحيانًا إلى إنشاء جدول يحتوي على قائمة ثابتة من القيم.
أحد الحلول هو
التصريح عن المصفوفة وإدخال القيم واحدة تلو الأخرى:
Dim tableau(5) tableau(0) = "SI" tableau(1) = "RECHERCHEV" tableau(2) = "SOMME" tableau(3) = "NB" tableau(4) = "ESTNUM" tableau(5) = "STXT"
الحل الأكثر
عمليا هو استخدام الدالة Array التي تُرجع
جدول من القيم:
tableau = Array("SI", "RECHERCHEV", "SOMME", "NB", "ESTNUM", "STXT")
SPLIT
تسمح لك وظيفة Split بتقسيم سلسلة
أحرف إلى مصفوفة وفقًا لمحدد محدد.
على سبيل
المثال ، هذه سلسلة نصية:
chaine = "SI, RECHERCHEV, SOMME, NB, ESTNUM, STXT"
لتحويل سلسلة
الأحرف هذه إلى الجدول، استخدم وظيفة Split وقم بتعيين
الفاصل:
tableau = Split(chaine, ", ")
سيعيد
الجدول القيم التالية:
MsgBox tableau(0) 'Renvoie : SI MsgBox tableau(1) 'Renvoie : RECHERCHEV MsgBox tableau(2) 'Renvoie : SOMME MsgBox tableau(3) 'Renvoie : NB MsgBox tableau(4) 'Renvoie : ESTNUM MsgBox tableau(5) 'Renvoie : STXT
تُرجع الجداول
الثلاثة التالية أيضًا نفس القيم:
tableau = Split("SI RECHERCHEV SOMME NB ESTNUM STXT", " ")