• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

ListBox ile arama yaptırma

  • Konbuyu başlatan Konbuyu başlatan Qene
  • Başlangıç tarihi Başlangıç tarihi
Katılım
17 Haziran 2006
Mesajlar
245
Excel Vers. ve Dili
Office 2010
English
Selam arkadaşlar..
Takıldığım bir hususta yardımlarınızı rica edeceğim.
Userform üzerinde 2 Adet ListBox var.
ListBox1 e A Sütundaki kayıtlı verileri alıyorum.
ListBox1 e tıkladığımda, ListBox2 de ListBox1 deki değerin yan sütunndaki değerler listeleniyor. Örn:

A Sütunu B Sütunu
Ahmet 2000/01
Ahmet 2000/02
Ahmet 2000/03
Mehmet 2000/01
Ahmet 2000/04
Mehmet 2000/02

ListBox1 de;
Ahmet
Mehmet

listelendi.

ListBox1 e Mehmet seçilince,
LİstBox2 de;
2000/01
2000/02

Listelendi.

ListBox2 deki 2000/01 değerini tıkladığımda Mehmet in karşısında olan 2000/01'in olduğu hücrenin seçilmesini istiyorum.
Yardımlar için teşekkürler...
 
Bu tip durumlarda işlemi kolaylaştırmak için kendi uyguladığım yöntemi size önereyim.

Listbox2 ye bir kolon daha ilave edin ve bu kolonun görünmeyip gizli kalması için genişliğini sıfır yapın. Bu kolonada aldığınız verinin satır nosunu kaydedin. Veriyi sayfa üzerinde seçerkende gizli kolondan okuyacağınız satır nosunu kullanırsınız. Aksi takdirde döngü kurmanız gerekirki buda veri sayısı çok fazla olduğunda ciddi yavaşlama demektir.
 
Levent Bey, fikriniz için teşekkürler...
Fakat dediğinizi pek anlayamadım. :(
ListBox1 in click olayında aşağıdaki kodlar mevcuttur..
İlgilenirseniz sevinirim.

Kod:
Sayfa4.Range("A:A").Find(ListBox2.Text).Select
ListBox2.ColumnCount = 6
ListBox2.ColumnWidths = "50;30;50;20"
ListBox2.Clear
say = Sayfa4.Range("B65536").End(xlUp).Row
i = 0
For Each rng In Sayfa4.Range("B2:B" & say)
If rng.Offset(0, -1) = ListBox1.Value Then
    ListBox2.AddItem
    With ListBox2
      .List(i, 0) = rng
      .List(i, 1) = Format(rng.Offset(0, 1), "#,##0")
      .List(i, 2) = Format(rng.Offset(0, 2), "#,##0.00")
      .List(i, 3) = rng.Offset(0, 3)
      .List(i, 4) = rng.Offset(0, 4)
    End With
    i = i + 1
End If
Next rng
 
Bahadır bey, siz en iyisi verilerin olduğu örnek bir dosya ekleyin.

Levent bey daha rahat yardımcı olur size ...
 
Aşağıdaki mavi renkli satırlar ilave edilmiştir.

Kod:
[LEFT]Sayfa4.Range("A:A").Find(ListBox2.Text).Select
ListBox2.ColumnCount = 6
[B][COLOR=blue]ListBox2.ColumnWidths = "50;30;50;20;0;0"[/COLOR][/B]
ListBox2.Clear
say = Sayfa4.Range("B65536").End(xlUp).Row
i = 0
For Each rng In Sayfa4.Range("B2:B" & say)
If rng.Offset(0, -1) = ListBox1.Value Then
  ListBox2.AddItem
  With ListBox2
    .List(i, 0) = rng
    .List(i, 1) = Format(rng.Offset(0, 1), "#,##0")
    .List(i, 2) = Format(rng.Offset(0, 2), "#,##0.00")
    .List(i, 3) = rng.Offset(0, 3)
    .List(i, 4) = rng.Offset(0, 4)
    [COLOR=blue][B].list(i,5)=rng.row[/B][/COLOR]
  End With
  i = i + 1
End If
Next rng[/LEFT]

Daha sonrada listbox2 ye tıklayınca ilgili satırın seçilmesi içinde aşağıdaki kodu listbox2 ye kopyalayın.

Kod:
Private Sub ListBox2_Click()
sayfa4.rows(listbox2.column(5)).select
End Sub

Not:Bu arada verdiğiniz kodda çelişkiler var, listbox2 nin kolon sayısı altı, fakat genişlik sadece dördü için belirlenmiş, buna karşın veride beş kolona yüklenmiş.
 
Teşekkürler Levent Bey..
6 yanlışlıkla kalmış bir sayı..
Asıl alması gereken 5 kolon.. Son kolon için de genişlik belirtmeye gerek duymadım.
Size de teşekkürler Haluk Bey.. Sorun çözüldü..
Muhabbetle...
 
Selamlar,

Sn. levent bey kodlarınız üzerinde gerekli düzenlemeyi yapmış. Bende örnek bir dosya hazırlamıştım. Belki fikir vermek açısından faydası olabilir. İncelermisiniz.
 
Geri
Üst