• DİKKAT

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

listbox her veriyi bir kez alsın

GursoyC

Altın Üye
Katılım
7 Ocak 2015
Mesajlar
558
Excel Vers. ve Dili
Office 2024 Türkçe
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.
 
Eski bir üyemizsiniz. Forumda arama yapmayı denediniz mi?

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

ListBox+Benzersiz
ListBox+Dictionary
ListBox+Connection
 
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.
 
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,
 
Sıralı liste için Distinct ifadesi ile arama yapınız. ADO örneklerine ulaşacaksınız.
 
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
 
ADO ile daha pratik şekilde sonuca gidebilirsiniz.
 
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.
 
Bende ADO konusunu tam olarak bilmiyorum. Ama bu kolaylıklarından ve avantajlarından faydalanmamak anlamına gelmemeli bence. Yeri geldiğinde kullanmak gerekir.
 
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
 
Çok teşekkürler Korhan bey.
Saygılar.
 
Geri
Üst