Combobox Veri sıralama

asdsxx

Altın Üye
Katılım
22 Mayıs 2012
Mesajlar
491
Excel Vers. ve Dili
Excel 2016 Türkçe
Altın Üyelik Bitiş Tarihi
20-02-2025
Arkadaşlar Userformda bulunan bir ComboBox ilgili veri sayfasından verileri alınca, Combobox bize verileri alfebetik harf sırasında nasıl sıralayabilir. Bunun için Combobox özelliklerinden bir ayar mı yapmak gerekir yoksa combobox için kod mu yazmak gerekir.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,332
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
ComboBox nesnesinin Sort özelliği yoktur.

İki alternatif;

Verilerinizi sayfada sıralayıp öyle yüklemek
Kod ile arka planda verileri sıralama işlemi yapıp öyle yüklemek
 

asdsxx

Altın Üye
Katılım
22 Mayıs 2012
Mesajlar
491
Excel Vers. ve Dili
Excel 2016 Türkçe
Altın Üyelik Bitiş Tarihi
20-02-2025
Korhan Bey ilginize teşekkürler. konuyu yazmadan formdan arama yaptım ama bulamamıştım. Google dan arama yaptım sizin sizin formu adres gösterdi ve buldum. hatta çalışıyor. Bu form iyi ki var. Herkesin ellerine sağlık.
Ömer Bey yıllar önce kod yazmış: 2 nolu mesaj

Kod:
Private Sub ComboBox1_DropButtonClick()
For a = LBound(ComboBox1.List) To UBound(ComboBox1.List) - 1
    For b = a + 1 To UBound(ComboBox1.List)
        If ComboBox1.List(b) < ComboBox1.List(a) Then
            x = ComboBox1.List(a)
            ComboBox1.List(a) = ComboBox1.List(b)
            ComboBox1.List(b) = x
        End If
    Next
Next
End Sub
 

asdsxx

Altın Üye
Katılım
22 Mayıs 2012
Mesajlar
491
Excel Vers. ve Dili
Excel 2016 Türkçe
Altın Üyelik Bitiş Tarihi
20-02-2025
Kullanım esnasında bir sıkıntıya rastladım sıralama yaparken Türkçe karakterleri "Ç", "Ğ", "İ", "Ö", "Ş", "Ü" harfleri sıralanın en altına atıyor. yukarıdaki kod'a bu eklenebilirse sorun düzelcecek.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,332
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
ADO örneği;

Veri sayfasındaki A sütunundaki verileri benzersiz-alfabetik olarak ComboBox1 nesnesine yükler.

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=No"""
     
    ComboBox1.Column = Baglanti.Execute("Select Distinct F1 From [Veri$A:A] Order By F1 Asc").GetRows

    Baglanti.Close
    Set Baglanti = Nothing
End Sub

System.Collections.ArrayList Örneği;

C++:
Option Explicit

Private Sub UserForm_Initialize()
    Dim Dizi As Object, Veri As Range
 
    Set Dizi = CreateObject("System.Collections.ArrayList")
 
    For Each Veri In Sheets("Veri").Range("A:A").SpecialCells(Type:=xlCellTypeConstants)
        If Not Dizi.Contains(Veri.Value) Then Dizi.Add Veri.Value
    Next
 
    Dizi.Sort
 
    ComboBox1.List = Dizi.ToArray

    Set Dizi = Nothing
End Sub

Excelin yerleşik işlevleri (Kopyala-Yinelenenleri Kaldır-Sırala)

Bu teknikte bir yardımcı sütun kullanılmıştır. (AA sütunu)

C++:
Option Explicit

Private Sub UserForm_Initialize()
    Dim Son As Long
    With Sheets("Veri")
         Son = .Cells(.Rows.Count, "A").End(3).Row
        .Columns("AA:AA").Clear
        .Range("AA1:AA" & Son).Value = .Range("A1:A" & Son).Value
        .Range("AA1:AA" & Son).RemoveDuplicates Columns:=1, Header:=xlNo
        .Range("AA1:AA" & Son).Sort Key1:=.Range("AA1"), Order1:=xlAscending, Header:=xlNo
         ComboBox1.List = .Range("AA1:AA" & .Cells(.Rows.Count, "AA").End(3).Row).Value
        .Columns("AA:AA").Clear
    End With
End Sub
 

Ömer

Moderatör
Yönetici
Katılım
18 Ağustos 2007
Mesajlar
22,184
Excel Vers. ve Dili
Microsoft 365 Tr
Ofis 2016 Tr
Merhaba,

Alternatif:
Verilen örnekteki;

If ComboBox1.List(b) < ComboBox1.List(a) Then

yukarıdaki satırın yerine aşağıdaki satırı yazarak deneyiniz.

If StrComp(ComboBox1.List(b), ComboBox1.List(a), vbTextCompare) < 0 Then
 

asdsxx

Altın Üye
Katılım
22 Mayıs 2012
Mesajlar
491
Excel Vers. ve Dili
Excel 2016 Türkçe
Altın Üyelik Bitiş Tarihi
20-02-2025
Merhaba,

Alternatif:
Verilen örnekteki;

If ComboBox1.List(b) < ComboBox1.List(a) Then

yukarıdaki satırın yerine aşağıdaki satırı yazarak deneyiniz.

If StrComp(ComboBox1.List(b), ComboBox1.List(a), vbTextCompare) < 0 Then

Ömer Bey Teşekkürler şimdi tam istediğim şekilde çalışıyor.
 

asdsxx

Altın Üye
Katılım
22 Mayıs 2012
Mesajlar
491
Excel Vers. ve Dili
Excel 2016 Türkçe
Altın Üyelik Bitiş Tarihi
20-02-2025
ADO örneği;

Veri sayfasındaki A sütunundaki verileri benzersiz-alfabetik olarak ComboBox1 nesnesine yükler.

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=No"""
      
    ComboBox1.Column = Baglanti.Execute("Select Distinct F1 From [Veri$A:A] Order By F1 Asc").GetRows

    Baglanti.Close
    Set Baglanti = Nothing
End Sub

System.Collections.ArrayList Örneği;

C++:
Option Explicit

Private Sub UserForm_Initialize()
    Dim Dizi As Object, Veri As Range
  
    Set Dizi = CreateObject("System.Collections.ArrayList")
  
    For Each Veri In Sheets("Veri").Range("A:A").SpecialCells(Type:=xlCellTypeConstants)
        If Not Dizi.Contains(Veri.Value) Then Dizi.Add Veri.Value
    Next
  
    Dizi.Sort
  
    ComboBox1.List = Dizi.ToArray

    Set Dizi = Nothing
End Sub
Korhan Bey size de ilginiz ve alakanızdan dolayı teşekkürler
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,332
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
#5 nolu mesajıma bir yöntem daha ekledim.

Dilediğinizi kullanabilirsiniz.
 
Üst