listbox her veriyi bir kez alsın

GursoyC

Altın Üye
Katılım
7 Ocak 2015
Mesajlar
553
Excel Vers. ve Dili
Office 2024 Türkçe
Altın Üyelik Bitiş Tarihi
17-05-2028
Merhaba,
Bir userformumdaki listbox'a veri almak için şu şekilde bir kodum var.
Kod:
Dim Sons As Long
ListBox1.ColumnHeads = False
Sons = Sayfa2.Range("A65536").End(xlUp).Row
ListBox1.RowSource = "formüller!A2:A" & Sons
Haliyle A2 ile mesela A25 satır aynı ise, listbox'a aynı veri 2. kez geliyor.

Listbox'taki verileri her birinden sadece birer tane ve harfe göre sıralı şekilde getirmemi sağlayacak kod hakkında yardımcı olur musunuz?
Teşekkür ederim.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,329
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Eski bir üyemizsiniz. Forumda arama yapmayı denediniz mi?

Aşağıdaki ifadeleri kullanarak sanırım sonuca gidebilirsiniz.

ListBox+Benzersiz
ListBox+Dictionary
ListBox+Connection
 

GursoyC

Altın Üye
Katılım
7 Ocak 2015
Mesajlar
553
Excel Vers. ve Dili
Office 2024 Türkçe
Altın Üyelik Bitiş Tarihi
17-05-2028
Evet oldukça eski bir üyeyim. Sormadan önce muhakkak araştırma yapıyorum. Forumda (ve sonrasında internette) listbox tek sefer, listbox 1 kez, listbox unique, listbox sort şeklinde arama yapmıştım, işe yarar bir sonuç çıkmamıştı. Dediğiniz şekilde araştırma yapayım.
Teşekkürler.
 

GursoyC

Altın Üye
Katılım
7 Ocak 2015
Mesajlar
553
Excel Vers. ve Dili
Office 2024 Türkçe
Altın Üyelik Bitiş Tarihi
17-05-2028
ListBox+Benzersiz
Bu şekilde arama sonucunda Yusuf beyin bir örneği işime yaradı. Birden fazla kez yazılmış değerleri tek olarak getirme kısmını hallettim.
Harf sırası ile ilgili biraz daha araştırma yapayım.
Teşekkür ederim.
Saygılar,
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,329
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Sıralı liste için Distinct ifadesi ile arama yapınız. ADO örneklerine ulaşacaksınız.
 

GursoyC

Altın Üye
Katılım
7 Ocak 2015
Mesajlar
553
Excel Vers. ve Dili
Office 2024 Türkçe
Altın Üyelik Bitiş Tarihi
17-05-2028
Teşekkür ederim Korhan bey, saygılar.

Yabancı forumlardan birisinde baloncuk yöntemi ile sıralatma kodu buldum ve benim işimi gördü. Belki birisinin işine yarar diye paylaşayım.

Kod:
            Dim j As Long
            Dim k As Long
            Dim temp As Variant
            With firma.ListBox1
                For j = 0 To .ListCount - 2
                    For k = 0 To .ListCount - 2
                        If LCase(.List(k)) > LCase(.List(k + 1)) Then
                            temp = .List(k)
                            .List(k) = .List(k + 1)
                            .List(k + 1) = temp
                        End If
                    Next k
                Next j
            End With
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,329
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
ADO ile daha pratik şekilde sonuca gidebilirsiniz.
 

GursoyC

Altın Üye
Katılım
7 Ocak 2015
Mesajlar
553
Excel Vers. ve Dili
Office 2024 Türkçe
Altın Üyelik Bitiş Tarihi
17-05-2028
Haklısınız, ADO da bir çözüm yöntemi. Benim ADO konusunda biraz çekimser kalma sebebim, hakim olmayışımdan.
Makrolarda (sanırım herkes gibi) iki şekilde ilerliyorum. 1.si buradan örnekleri inceleyip komutları anlayarak, 2.si ise taklit ederek.
ADO benim taklit ederek ilerlediğim komut gruplarından birisi. Bir türlü tam öğrenemedim. Bu yüzden karşılaştığım örneklerdeki öğeleri kendime uyarlayarak ilerliyorum.
Ama tabii ki herkes gibi tercihim öğrenmek ve bağımsız şekilde uygulayabilmek yönünde.
İlginize çok teşekkür ederim.
Saygılar.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,329
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Bende ADO konusunu tam olarak bilmiyorum. Ama bu kolaylıklarından ve avantajlarından faydalanmamak anlamına gelmemeli bence. Yeri geldiğinde kullanmak gerekir.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,329
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
ADO örneğini paylaşıyorum. Forumun arşivinde bulunsun.

İşlemin yapıldığı sayfa adı Sheet1 ve A1 hücresinde Firma ifadesi yazıyor. Bu koşullarda aşağıdaki kod sonuç veriyor.

C++:
Option Explicit

Private Sub UserForm_Initialize()
    Dim Baglanti As Object
    
    Set Baglanti = CreateObject("AdoDb.Connection")
    
    Baglanti.Open "Provider=Microsoft.Ace.OleDb.12.0;Data Source=" & _
    ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0;Hdr=Yes"""
    
    On Error Resume Next
    ListBox1.Column = Baglanti.Execute("Select Distinct Firma From [Sheet1$]").GetRows
    On Error GoTo 0
    
    If Baglanti.State <> 0 Then Baglanti.Close
    
    Set Baglanti = Nothing
End Sub
 

GursoyC

Altın Üye
Katılım
7 Ocak 2015
Mesajlar
553
Excel Vers. ve Dili
Office 2024 Türkçe
Altın Üyelik Bitiş Tarihi
17-05-2028
Çok teşekkürler Korhan bey.
Saygılar.
 
Üst