كيفية فرز مجموعة في vba؟

لفرز مصفوفة في VBA، تحتاج إلى كتابة رمز يمكنك من خلاله مطابقة العنصر الأول من المصفوفة مع العنصر التالي ومبادلةهما إذا كان العنصر الأول يجب أن يأتي قبله. أنت بحاجة إلى حلقة FOR (للتالي) لهذا الغرض والدالة UCASE .

في هذا البرنامج التعليمي، سوف نرى الطريقتين (AZ و ZA) لفرز عناصر المصفوفة.

فرز مصفوفة (AZ)

في الكود أدناه، لديك مصفوفة مكونة من خمسة عناصر، وهذه العناصر لها قيم تتراوح من E إلى A، والآن نحتاج إلى الفرز بالترتيب AZ.

فرز صفيف-1

خطوات فرز المصفوفة

  1. أولاً، تحتاج إلى كتابة حلقة متداخلة باستخدام For Next باستخدام الحدود العلوية والسفلية للمصفوفة.
  2. بعد ذلك، في هذه الحلقة، تحتاج إلى استخدام عبارة VBA IF لمقارنة العنصرين.
  3. من هناك، إذا كان العنصر الأول يجب أن يأتي قبل العنصر التالي، فستحتاج إلى تبديلهما عن طريق حفظ قيمهما في المتغيرات.
  4. في النهاية، استخدم الكلمة الأساسية “التالي” لإكمال الحلقة.
 Option Base 1 Sub vba_sort_array_a_to_z() Dim myArray() As Variant ReDim myArray(5) Dim i As Integer Dim j As Integer Dim Temp As String myArray(1) = "E" myArray(2) = "D" myArray(3) = "C" myArray(4) = "B" myArray(5) = "A" 'sorting array from A to Z For i = LBound(myArray) To UBound(myArray) For j = i + 1 To UBound(myArray) If UCase(myArray(i)) > UCase(myArray(j)) Then Temp = myArray(j) myArray(j) = myArray(i) myArray(i) = Temp End If Next j Next i Debug.Print myArray(1) Debug.Print myArray(2) Debug.Print myArray(3) Debug.Print myArray(4) Debug.Print myArray(5) End Sub

تأكد من تفعيل النافذة الفورية لرؤية النتائج هناك.

فرز مصفوفة (ZA)

وبنفس الطريقة، يمكنك الفرز حسب ZA. في الطريقة السابقة، قمنا بمقارنة العنصر الأول بالعنصر التالي في التسلسل، ولكن في هذا الكود عليك أن تفعل العكس. لذا، إذا كان العنصر الثاني (التالي في الترتيب) أكبر من الأول، فسيقوم الكود بتبديلهما.

 Option Base 1 Sub vba_sort_array_z_to_a() Dim myArray() As Variant ReDim myArray(5) Dim i As Integer Dim j As Integer Dim Temp As String myArray(1) = "A" myArray(2) = "B" myArray(3) = "C" myArray(4) = "D" myArray(5) = "E" 'sorting array from A to Z For i = LBound(myArray) To UBound(myArray) For j = i + 1 To UBound(myArray) If UCase(myArray(i)) < UCase(myArray(j)) Then Temp = myArray(j) myArray(j) = myArray(i) myArray(i) = Temp End If Next j Next i Debug.Print myArray(1) Debug.Print myArray(2) Debug.Print myArray(3) Debug.Print myArray(4) Debug.Print myArray(5) End Sub

اضف تعليق

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *