أساسيات VBA إكسل : استعمالات الجداول في VBA الجزء الثاني

أساسيات VBA إكسل : استعمالات الجداول في VBA الجزء الثاني



هذه التدوينة هي جزء ثاني للتدوينة التي تكلمنا فيها عن استعمالات الجداول في 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


الجدول الديناميكي


مثلا  قاعدة البيانات نفسها يتم تحديثها بانتظام وأنه لا يمكننا بالتالي إدخال قيم ثابتة في الإعلان ... في هذه الحالة ، سيكون الجدول الديناميكي مفيدًا للغاية.

أساسيات VBA إكسل : استعمالات الجداول في VBA الجزء الثاني


لمعرفة رقم الصف الأخير في قاعدة البيانات الخاصة بنا ، استخدم الصيغة التالية :

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 = Array("SI", "RECHERCHEV", "SOMME", "NB", "ESTNUM", "STXT") tableau = Split("SI/RECHERCHEV/SOMME/NB/ESTNUM/STXT", "/") 

tableau = Split("SI RECHERCHEV SOMME NB ESTNUM STXT", " ")


Comments
No comments
Post a Comment



    Reading Mode :
    Font Size
    +
    16
    -
    lines height
    +
    2
    -