الدرس السادس المصفوفات Arrays
المصفوفة هي موقع ذاكرة قادر على تخزين أكثر من قيمة. يجب أن تكون جميع القيم من نفس نوع البيانات.
إذا كنت تريد تخزين قائمة من نفس نوع البيانات في متغير واحد ، يمكنك استخدام مصفوفة لتخزينها.
باستخدام مصفوفة ، يمكنك ذكر القيم ذات الصلة بنفس الاسم.
يمكنك استخدام الرمز المنخفض أو الفهرس لتمييزهما عن بعضهما البعض.
يشار إلى القيم الفردية باسم عناصر المصفوفة. وهي متجاورة من الفهرس 0 إلى أعلى قيمة للمؤشر
ابعاد الصفيف
1. بُعد واحد: يستخدم المصفوفة فهرسًا واحدًا فقط في بُعد واحد.
Dim agecount (100) كـ UInteger
يوضح المثال أعلاه مصفوفة ذات بعد واحد من الأعداد العمرية من 0 إلى 100.
2. بعدين : تستخدم المصفوفة دليلين في البعدين.
على سبيل المثال ، عدة طلاب في كل فصل. يتطلب كلاً من عدد الفصول وعدد الطلاب في كل فصل.
قاتمة الطلاب تعد (50 ، 5) بايت
يوضح المثال أعلاه مصفوفة ثنائية الأبعاد ، يعد الطالب من 1 إلى 50 والفئة 1 إلى 5.
3. متعدد الأبعاد: المصفوفة تستخدم أكثر من فهرسين في المصفوفة المتعددة.
على سبيل المثال ، درجة الحرارة خلال النهار (29 ، 30 ، 32).
درجة حرارة خافتة (29 ، 30 ، 32) مفردة
مزايا المصفوفة في الإكسل بلغة VBA
هناك بعض مزايا المصفوفة ، مثل:
➖ يقوم بتجميع البيانات المرتبطة منطقيًا معًا.
على سبيل المثال ، إذا كنت تريد تخزين قائمة بالطلاب ، فيمكنك استخدام متغير مصفوفة واحد. لديها مواقع منفصلة لفئات الطلاب مثل المدرسة الثانوية والمدارس الثانوية والمدارس الابتدائية وما إلى ذلك.
➖ تجعل المصفوفة من السهل كتابة تعليمات برمجية معقولة. بالنسبة لنفس البيانات المرتبطة منطقيًا ، فإنه يسمح بتعريف متغير واحد ، بدلاً من تحديد أكثر من متغير واحد.
➖ المصفوفه يعطي أداء أفضل. بمجرد تحديد المصفوفة ، يكون من الأسرع فرز البيانات واستردادها وتعديلها.
مثال على المصفوفة ذات البعد الواحد
Private Sub Constant_demo_Click() Dim arr(5) arr(0) = "1" arr(1) = "VBScript" arr(2) = 100 arr(3) = 2.45 arr(4) = #10/07/2013# arr(5) = #12.45 PM# msgbox("Value stored in Array index 0 : " & arr(0)) msgbox("Value stored in Array index 1 : " & arr(1)) msgbox("Value stored in Array index 2 : " & arr(2)) msgbox("Value stored in Array index 3 : " & arr(3)) msgbox("Value stored in Array index 4 : " & arr(4)) msgbox("Value stored in Array index 5 : " & arr(5)) End Sub
مخرجات الكود
Value stored in Array index 0 : 1
Value stored in Array index 1 : VBScript
Value stored in Array index 2 : 100
Value stored in Array index 3 : 2.45
Value stored in Array index 4 : 7/10/2013
Value stored in Array index 5 : 12:45:00 PM
مثال 2 على المصفوفة ذات البعد الواحد
Private Sub Constant_demo_Click() Dim arr(5) arr(0) = "1" arr(1) = "VBScript" arr(2) = 100 arr(3) = 2.45 arr(4) = #10/07/2013# arr(5) = #12.45 PM# msgbox("Value stored in Array index 0 : " & arr(0)) msgbox("Value stored in Array index 1 : " & arr(1)) msgbox("Value stored in Array index 2 : " & arr(2)) msgbox("Value stored in Array index 3 : " & arr(3)) msgbox("Value stored in Array index 4 : " & arr(4)) msgbox("Value stored in Array index 5 : " & arr(5)) End Sub
مخرجات الكود
Value stored in Array index 0 : 1
Value stored in Array index 1 : VBScript
Value stored in Array index 2 : 100
Value stored in Array index 3 : 2.45
Value stored in Array index 4 : 7/10/2013
Value stored in Array index 5 : 12:45:00 PM
المصفوفه الديناميكية ReDim في الإكسل بلغة VBA
تُستخدم عبارة ReDim للإعلان عن متغيرات الصفيف الديناميكي وتخصيص مساحة التخزين أو إعادة تخصيصها.
بناء الجملة
ReDim [Preserve] varname(subscripts) [, varname(subscripts)]
➖ وصف المصفوفة
الاحتفاظ - معلمة اختيارية تُستخدم للاحتفاظ بالبيانات في مصفوفة موجودة عند تغيير حجم البعد الأخير.
مثال
في المثال التالي ، تم إعادة تعريف المصفوفة ثم حفظ القيم عند تغيير الحجم الحالي للمصفوفة.
ملاحظة - عند تغيير حجم مصفوفة أصغر مما كانت عليه في الأصل ، ستفقد البيانات الموجودة في العناصر المحذوفة.
Private Sub Constant_demo_Click() Dim a() as variant i = 0 redim a(5) a(0) = "XYZ" a(1) = 41.25 a(2) = 22 REDIM PRESERVE a(7) For i = 3 to 7 a(i) = i Next End Sub
عند تنفيذ الكود المذكور أعلاه ، فإنه ينتج الإخراج التالي.
XYZ
41.25
22
3
4
5
6
7
ملاحظات مهمه جدا حول المصفوفات في الإكسل بلغة VBA
➖ المصفوفات هي طريقة فعالة لتخزين قائمة من العناصر من نفس النوع.
➖ يمكنك الوصول إلى عنصر مصفوفة مباشرة باستخدام رقم الموقع المعروف باسم منخفض أو فهرس .
➖ الخطأ الشائع " منخفض خارج النطاق " ناتج عن الوصول إلى موقع غير موجود.
➖ هناك نوعان من صفائف: ثابت و ديناميكي .
➖ يتم استخدام Static عندما يكون طول المصفوفة هو نفسه دائمًا.
➖ تسمح لك المصفوفات الديناميكية بتحديد طول المصفوفة في وقت التشغيل.
➖ يوفر LBound و UBound طريقة آمنة للعثور على أصغر وأكبر عدد من المشتركين في المصفوفة.
➖ المصفوفة الأساسية هي ذات بعد واحد .
➖ يمكنك أيضًا الحصول على مصفوفات متعددة الأبعاد.
➖ يمكنك فقط تمرير مصفوفة إلى إجراء باستخدام ByRef .
➖ يمكنك القيام بهذا على النحو التالي: ByRef arr () طالما.
➖ يمكنك إرجاع مصفوفة من دالة ولكن المصفوفة التي تم تعيينها لها يجب ألا تكون مخصصة حاليًا.
➖ تعتبر ورقة العمل بصفوفها وأعمدتها في الأساس صفيفًا ثنائي الأبعاد .
➖ يمكنك القراءة مباشرة من نطاق ورقة عمل إلى مصفوفة ثنائية الأبعاد في سطر واحد فقط من التعليمات البرمجية.
➖ يمكنك أيضًا الكتابة من مصفوفة ثنائية الأبعاد إلى نطاق في سطر واحد فقط من التعليمات البرمجية.
الثابت Const في الإكسل بلغة VBA
ـ Const ثابت هو موقع ذاكرة مسمى يستخدم للاحتفاظ بقيمة لا يمكن تغييرها أثناء تنفيذ البرنامج النصي.
إذا حاول المستخدم تغيير قيمة ثابتة ، ينتهي تنفيذ البرنامج النصي بخطأ.
يتم التصريح عن الثوابت بنفس طريقة التصريح عن المتغيرات.
فيما يلي قواعد تسمية الثابت .
➖ يجب عليك استخدام حرف كأول حرف.
➖ لا يمكنك استخدام مسافة أو نقطة (.) أو علامة تعجب (!) أو الأحرف @ ، & ، $ ، # في الاسم.
➖ لا يمكن أن يتجاوز الاسم 255 حرفًا.
➖ لا يمكنك استخدام الكلمات الأساسية المحجوزة لـ Visual Basic كاسم متغير.
مثال
Private Sub CommandButton1_Click() Const MyInteger As Integer = 42 Const myDate As Date = #11/21/2021# Const myDay As String = "Sunday" MsgBox "Integer is " & MyInteger & Chr(10) & "myDate is " & myDate & Chr(10) & "myDay is " & myDay End Sub
لاحظ مخرجات البرنامج في الصوره