Listboxta Dinamik Arama

Katılım
28 Mart 2015
Mesajlar
24
Excel Vers. ve Dili
2010
Altın Üyelik Bitiş Tarihi
20-03-2024
Arkadaşlar merhabalar. Kodum aşağıdaki gibidir.
Kodlarla listboxtaki verileri filtreliyorum yani arama yapıyorum. Ancak şöyle bir sorun yaşıyorum. Arama yapmak istediğim sütunu belirlemeye çalışıyorum bir türlü bulduramadım. Daha önce aynı yöntemi farklı bir projede kullanmıştım ama üzerinden zaman geçtiği için unutmuşum. Bilgisi bulunan bir arkadaşımdan ricam kodları bana izah edebilir mi..


Özellikle takıldığım kodlarını anlamadığım noktalar...
ReDim liste(1 To UBound(veri, 1), 1 To 1) ' Burada liste dizisinin 1 inci elemanından Veri aralığında bulunan sayı kadar eleman olduğu belirtiliyor diye biliyorum. Ayrıca (veri, 1) hususu ve devamında gelen (1 To 1) neyi belirliyor veya nerelere etki ediyor..

Bir diğer takıldığım nokta:
For X = LBound(veri) To UBound(veri) ' Bunun bir döngü olduğunu tabiki biliyorum ancak takıldığım nokta şurası LBound yani en alt sayıdan Ubound yani en yüksek sayıya kadar dön diyor... Ancak şimdi benim veri aralığım 12 sütunda bulunmakta ve 360 civarında satır var.. Buradaki sorum şu bu döngü 360 kez mi dönecek yoksa 12x360 kez mi dönecek bunu anlamadığım için işlemlerim eksik kalıyor.

Diğer bir nokta : Ad = UCase(Replace(Replace(veri(X, 3), "ı", "I"), "i", "İ")) ' Ad değişkenini veri aralığı döngü sayısından X , 3 e eşitlemişim.. Şimdi buradaki X satır mı sütun mu neyi gösteriyor.. Ayrıca 3 sayısı sütun ise bunu değiştiriyorum ama aramayı bulmuyor aşağıdaki Y döngüsünde listeyi oluşturmuyor..

Diğer bir nokta Y döngüsünü 1 eşitlemişiz ve listenin en yüksek sayısı kadar dön demişiz lakin veri aralığının 3 nolusu neyi gösteriyor bunu da anlamadım..

Diğer bir nokta : ReDim Preserve liste(1 To UBound(veri, 1), 1 To Say) Burada listeyi güncelleme yapıyoruz bunu biliyorum lakin 1 inci elemandan En yüksek sayı ve yine verinin 1 nolu elemanından yine 1 To Say yani bulunan kadar diyor ama tam anlamadım burasını..

Son olarak ise: Listenin güncel hali sanırım liste(Y, Say) = veri(X, Y) kodu ile çekiliyor ki burayı da anlamadım..

Kusura bakılmasın lütfen uzun bir soru oldu ama hem sorunumu çözmek hem de excel vbanın eksik olduğum bu kısmını tamamlamak istiyorum. O yüzden detaylıca yazmak istedim..

Yardımcı olacak arkadaşlarıma şimdiden teşekkür ediyorum.


Kod:
Private Sub TextBox14_Change()

    Dim S1 As Worksheet, veri As Variant, Son As Long
    Dim Ad As String, aranan As String, X As Long, Say As Long
    
    Set S1 = Sheets("SİPARİŞLER")
    
    Son = S1.Cells(Rows.Count, "B").End(xlUp).Row
    veri = S1.Range("A2:L" & Son).Value
    
    If TextBox14.Text = "" Then
        LstboxSonSatirA = Sheets("SİPARİŞLER").Cells(Rows.Count, "A").End(xlUp).Row
        ListBox1.RowSource = "SİPARİŞLER!A2:L" & LstboxSonSatirA
        ListBox1.ColumnCount = 12
        ListBox1.ColumnWidths = 30 & ";" & 60 & ";" & 80 & ";" & 60 & ";" & 190 & ";" & 35 & ";" & 35 & ";" & 35 _
        & ";" & 130 & ";" & 50 & ";" & 50 & ";" & 50
    End If
    
    ReDim liste(1 To UBound(veri, 1), 1 To 1)
        
    On Error Resume Next
    ListBox1.Clear
    ListBox1.RowSource = ""
    On Error GoTo 0
    
    If TextBox14 <> "" Then
        For X = LBound(veri) To UBound(veri)
            Ad = UCase(Replace(Replace(veri(X, 3), "ı", "I"), "i", "İ"))
            aranan = UCase(Replace(Replace(TextBox14, "ı", "I"), "i", "İ"))
            If Ad Like "*" & aranan & "*" Then
            
            
                Say = Say + 1
                For Y = 1 To UBound(veri, 3)
                    ReDim Preserve liste(1 To UBound(veri, 1), 1 To Say)
                    liste(Y, Say) = veri(X, Y)
                Next
            End If
        Next
        If Say > 0 Then
            ListBox1.ColumnCount = 12
            ListBox1.ColumnWidths = 30 & ";" & 60 & ";" & 80 & ";" & 60 & ";" & 190 & ";" & 35 & ";" & 35 & ";" & 35 _
                & ";" & 130 & ";" & 50 & ";" & 50 & ";" & 50
            ListBox1.ColumnHeads = False
            ListBox1.Column = liste
        End If
    
    Else
        Call UserForm_Initialize
    End If

End Sub
 
Üst