Vba'da bir dizi nasıl sıralanır?

VBA’da bir diziyi sıralamak için, dizinin ilk öğesini bir sonrakiyle eşleştirebileceğiniz ve ilk öğenin önce gelmesi gerekiyorsa bunları değiştirebileceğiniz bir kod yazmanız gerekir. Bunun için FOR (Sonraki İçin) döngüsüne ve UCASE işlevine ihtiyacınız var.

Bu derste bir dizinin elemanlarını sıralamanın iki yolunu (AZ ve ZA) göreceğiz.

Bir diziyi sıralama (AZ)

Aşağıdaki kodda beş elemanlı bir diziniz var ve bu elemanların E’den A’ya kadar değişen değerleri var ve şimdi A’dan Z’ye sıralamamız gerekiyor.

dizi-sıralama-1

Bir diziyi sıralama adımları

  1. Öncelikle dizinin üst ve alt sınırlarını kullanarak For Next ile iç içe bir döngü yazmanız gerekiyor.
  2. Bundan sonra bu döngüde iki öğeyi karşılaştırmak için VBA IF ifadesini kullanmanız gerekir.
  3. Buradan, eğer ilk elemanın bir sonraki elemandan önce gelmesi gerekiyorsa, değerlerini değişkenlere kaydederek bunları değiştirmeniz gerekir.
  4. Sonunda döngüyü tamamlamak için “Sonraki” anahtar kelimesini kullanın.
 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

Sonuçları orada görmek için Hemen penceresini etkinleştirdiğinizden emin olun.

Bir diziyi sıralama (ZA)

Aynı şekilde ZA’ya göre de sıralama yapabilirsiniz. Önceki yöntemde, dizideki ilk öğeyi sonraki öğeyle karşılaştırdık ancak bu kodda tam tersini yapmanız gerekiyor. Yani eğer ikinci eleman (sırayla bir sonraki) birinciden büyükse, kod onları değiştirecektir.

 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

Yorum ekle

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir