Would you like to react to this message? Create an account in a few clicks or log in to continue.



 
AnasayfaPortalliGaleriAramaLatest imagesKayıt OlGiriş yap

 

 ListBox'da 3 Sütuna Göre Sıralama Yaptırmak

Aşağa gitmek 
YazarMesaj
PROX
ADMİNİSTRATOR
ADMİNİSTRATOR
PROX


Mesaj Sayısı : 1192
GeRÇek İSiM : ZONETURKWORLD
LEVELX :
ListBox'da 3 Sütuna Göre Sıralama Yaptırmak Left_bar_bleue100 / 100100 / 100ListBox'da 3 Sütuna Göre Sıralama Yaptırmak Right_bar_bleue

RuH HaLi :
ListBox'da 3 Sütuna Göre Sıralama Yaptırmak Left_bar_bleue100 / 100100 / 100ListBox'da 3 Sütuna Göre Sıralama Yaptırmak Right_bar_bleue

SPEED : ListBox'da 3 Sütuna Göre Sıralama Yaptırmak 2810
ULKE : ListBox'da 3 Sütuna Göre Sıralama Yaptırmak 110
Kayıt tarihi : 21/12/07

LEVEL
ZONETURK: THEZONETURK

ListBox'da 3 Sütuna Göre Sıralama Yaptırmak Empty
MesajKonu: ListBox'da 3 Sütuna Göre Sıralama Yaptırmak   ListBox'da 3 Sütuna Göre Sıralama Yaptırmak Icon_minitimePerş. Ocak 03, 2008 9:23 pm

ListBox'da 3 Sütuna Göre Sıralama Yaptırmak Mak_21_1

Ş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ı:

ListBox'da 3 Sütuna Göre Sıralama Yaptırmak Mak_21_2

Ş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
Sayfa başına dön Aşağa gitmek
https://zoneturk.yetkin-forum.com
 
ListBox'da 3 Sütuna Göre Sıralama Yaptırmak
Sayfa başına dön 
1 sayfadaki 1 sayfası
 Similar topics
-

Bu forumun müsaadesi var:Bu forumdaki mesajlara cevap veremezsiniz
 :: MICROSOFT OFFİCE :: Excel-
Buraya geçin: