Şimdi bu listeyi ListBox nesnesine alalım.
1. Bunun için döngü kullanıp verileri tek tek ListBox’a alabiliriz:
Private Sub UserForm_Initialize()
Dim Satir As Integer, Sutun As Byte
For Satir = 0 To 8
For Sutun = 0 To 2
ListBox1.AddItem
ListBox1.List(Satir, Sutun) = Cells(Satir + 2, Sutun + 1)
Next
Next
ListBox1.ColumnCount = 3
End Sub</SPAN>
For-Next döngülerini 0’dan (ListBox nesnesinde ilk endeks 0) kayıt(kolon) adedinin bir eksiğine kadar kurduk.
2. Döngü kullanmadan dizi olarak ListBox nesnesine alabiliriz.
Private Sub UserForm_Initialize()
ListBox1.List = ActiveSheet.Range("A2:C10").Value
ListBox1.ColumnCount = 3
End Sub</SPAN>
3. ListBox’un RowSource özelliğini kullanarak da alabiliriz.
Private Sub UserForm_Initialize()
ListBox1.RowSource = "Sayfa1!A2:C10"
ListBox1.ColumnCount = 3
End Sub</SPAN>
Verilerimizi ListBox nesnesine alınca ortaya alttaki gibi bir görüntü çıktı:
Şimdi sıra geldi verileri A-Z düzeninde sıralamaya. Bunun için bir Kullanıcı Tanımlı Fonksiyon (KTF) hazırladık ve içerisinde iç içe 2 döngü kulandık.
Private Function Sirala(Liste As Variant)
Dim i As Integer, j As Integer, x As Variant
For i = LBound(Liste) To UBound(Liste) - 1
For j = i + 1 To UBound(Liste)
If StrComp(Liste(i, 0), Liste(j, 0), vbTextCompare) = 1 Then
x = Liste(j, 0)
Liste(j, 0) = Liste(i, 0)
Liste(i, 0) = x
End If
Next j
Next i
Sirala = Liste
End Function</SPAN>
Bu KTF’de StrComp fonksiyonunu kullandık.
M.Temel Korkmaz Hoca’mızın
EXCEL ile PROGRAMLAMA-1 kitabının 307.sayfasında StrComp fonsiyonu şu şekilde açıklanmış
StrComp – İki String (metinsel) ifadenin karşılaştırma sonucunu verir.
StrComp ( ifade1, ifade2 , Karşılaştırma ) Karşılaştırma: Bu argümana 0 (sıfır) değeri ( vbBinaryCompare ) verilirse büyük küçük harf ayrımı yapılır. Bu argüman 1 değerini ( vbTextCompare ) alırsa bu ayrım yapılmaz.
DİKKAT: Sadece “i” harfi problem çıkartabilir. “i” karakteri “I” karakterine dönüştürülebilir. Yani burada 2 karakter sırası karşılaştırılıyor ve sonuç bir tamsayı döndürüyor. Döndürülen sonuç “1” ise ifade1 büyüktür, “-1” ise ifade2 büyüktür, “0” ise ifade1=ifade2.
Özetle fonksiyonumuz bir sırada her üst ve alttaki metinleri karşılaştırıyor ve bunun sonucunda döndürülen değere göre bunların yerlerini değiştiriyor veya olduğu gibi bırakıyor. Üstte vermiş olduğumuz kodlar sadece tek sütun sıraladığı için çok sütunlu listelerde işimize yaramaz. Çok sütunlu sıralama için iç içe bir döngü daha kurmamız gerekiyor.
Private Sub Sirala_Click()
Dim Liste As Variant 'değşkenimizi tanımladık
Liste = ListBox1.List