• DİKKAT

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

Combobox Veri sıralama

  • Konbuyu başlatan Konbuyu başlatan asdsxx
  • Başlangıç tarihi Başlangıç tarihi

asdsxx

Altın Üye
Katılım
22 Mayıs 2012
Mesajlar
510
Excel Vers. ve Dili
Excel 2016 Türkçe
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.
 
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
 
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
 
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.
 
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
 
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
 
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.
 
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
 
#5 nolu mesajıma bir yöntem daha ekledim.

Dilediğinizi kullanabilirsiniz.
 
Geri
Üst