[Yardım]  Combobox'da bulunan verileri sıralama

Kulanıcı arayüz formu

Combobox'da bulunan verileri sıralama

İleti#1)  ebruyildiz » 10 Nis 2019 18:42

Merhaba combobox'da bulunan verileri küçükten büyüğe sıralamak istiyorum.
Örneğin
10
2
5
25
60
olarak gözüküyor. Nasıl yapabilirim?
Kullanıcı avatarı
ebruyildiz
Yeni Başlamış
 
Kayıt: 31 Mar 2019 13:27
Meslek: Öğrenci
Yaş: 23
İleti: 30
 
Cinsiyet: Bayan
Bulunduğunuz İl / Semt: İstanbul

Cevap: Combobox'da bulunan verileri sıralama

İleti#2)  OrkmesB » 10 Nis 2019 19:44


Ben burada biraz zor gibi görünen ama hem daha hızlı hem da rahat ayarlanabilmesi sebebiyle ADO kullanmanızı önereceğim.
Bir Excel sayfasında;

ID NAME SURNAME
1 BAHADIR ÖRKMES
2 HASAN KALDIRIM

şeklinde 3 sütunda verileriniz olduğunu düşünün.
Siz hemen oluşturun.
Daha sonra herhang bir sayfaya bir ComboBox ekleyin ve alttaki kodu dosyanın Workbook_Open kısmına ekleyin.
Eğer makrolara hakimseniz, kolayca mantığını anlayacaksınız.
Takılırsanız üzerinden geçeriz.

Kod: Tümünü seç
Private Sub Workbook_Open()
Set Baglan = CreateObject("adodb.connection")
If Application.Version = "14.0" Then
    Baglan.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=" & ThisWorkbook.Path & "\" & ThisWorkbook.Name & ";" & "Extended Properties=""Excel 12.0;HDR=Yes"""
ElseIf Application.Version = "12.0" Then
    Baglan.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=" & ThisWorkbook.Path & "\" & ThisWorkbook.Name & ";" & "Extended Properties=""Excel 12.0;HDR=Yes"""
Else
    Baglan.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & ThisWorkbook.Path & "\" & ThisWorkbook.Name & ";" & "Extended Properties=""Excel 8.0;HDR=Yes"""
End If

Set Kayit = CreateObject("ADODB.Recordset")
sorgu = "SELECT  NAME + ' ' + SURNAME, ID  FROM [DATA$] Order By NAME, SURNAME"
Kayit.Open sorgu, Baglan, 1, 3

Kayit.MoveLast
Satir = Kayit.RecordCount
Kayit.MoveFirst
With Sheet1
    .ComboBox1.ColumnCount = 1
    .ComboBox1.ColumnWidths = "220;0;0;0;0;0"
    .ComboBox1.Column = Kayit.GetRows(Satir)
End With
Set Kayit = Nothing
Set Baglan = Nothing
End Sub

“Benim yaradılışımda fevkâlade olan bir şey varsa, Türk olarak dünyaya gelmemdir"
Kullanıcı avatarı
OrkmesB
Yönetim Kurulu
 


 
Adı Soyadı:Bahadır Örkmes
Kayıt: 14 Haz 2008 18:26
Konum: Gökçeali
Meslek: Personel Müdürü
Yaş: 40
İleti: 5028
 

Cevap: Cevap: Combobox'da bulunan verileri sıralama

İleti#3)  ebruyildiz » 10 Nis 2019 19:52

OrkmesB yazdı:Ben burada biraz zor gibi görünen ama hem daha hızlı hem da rahat ayarlanabilmesi sebebiyle ADO kullanmanızı önereceğim.
Bir Excel sayfasında;

ID NAME SURNAME
1 BAHADIR ÖRKMES
2 HASAN KALDIRIM

şeklinde 3 sütunda verileriniz olduğunu düşünün.
Siz hemen oluşturun.
Daha sonra herhang bir sayfaya bir ComboBox ekleyin ve alttaki kodu dosyanın Workbook_Open kısmına ekleyin.
Eğer makrolara hakimseniz, kolayca mantığını anlayacaksınız.
Takılırsanız üzerinden geçeriz.

Kod: Tümünü seç
Private Sub Workbook_Open()
Set Baglan = CreateObject("adodb.connection")
If Application.Version = "14.0" Then
    Baglan.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=" & ThisWorkbook.Path & "\" & ThisWorkbook.Name & ";" & "Extended Properties=""Excel 12.0;HDR=Yes"""
ElseIf Application.Version = "12.0" Then
    Baglan.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=" & ThisWorkbook.Path & "\" & ThisWorkbook.Name & ";" & "Extended Properties=""Excel 12.0;HDR=Yes"""
Else
    Baglan.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & ThisWorkbook.Path & "\" & ThisWorkbook.Name & ";" & "Extended Properties=""Excel 8.0;HDR=Yes"""
End If

Set Kayit = CreateObject("ADODB.Recordset")
sorgu = "SELECT  NAME + ' ' + SURNAME, ID  FROM [DATA$] Order By NAME, SURNAME"
Kayit.Open sorgu, Baglan, 1, 3

Kayit.MoveLast
Satir = Kayit.RecordCount
Kayit.MoveFirst
With Sheet1
    .ComboBox1.ColumnCount = 1
    .ComboBox1.ColumnWidths = "220;0;0;0;0;0"
    .ComboBox1.Column = Kayit.GetRows(Satir)
End With
Set Kayit = Nothing
Set Baglan = Nothing
End Sub

İlginiz için çok teşekkür ederim fakat daha kolay bir vba kodu var mı acaba uygulayabileceğim?




Private Sub UserForm_Initialize()
ComboBox1.RowSource = "Sheet2! A1:A" & Range("a65536").End(xlUp).Row

End Sub

Private Sub ComboBox1_Change()

Sheets("sheet2").Columns("A2:A").Sort key1:=Range("A1:A"), order1:=xlDescending

End Sub

böyle bir kod denedim, hata vermiyor fakat küçükten büyüğe sıralama da yapmıyor.
Kullanıcı avatarı
ebruyildiz
Yeni Başlamış
 
Kayıt: 31 Mar 2019 13:27
Meslek: Öğrenci
Yaş: 23
İleti: 30
 
Cinsiyet: Bayan
Bulunduğunuz İl / Semt: İstanbul

Cevap: Combobox'da bulunan verileri sıralama

İleti#4)  OrkmesB » 10 Nis 2019 20:10


Kod: Tümünü seç
Dim z As Object, i As Long, liste(), sonsat As Long
Sayfa1.ComboBox1.Clear
sonsat = Cells(Rows.Count, "A").End(xlUp).Row
Sayfa1.Range("A1:A" & sonsat).Sort Sayfa1.Range("A1")
liste = Range("A1:A" & sonsat).Value
Set z = CreateObject("scripting.dictionary")
For i = 1 To UBound(liste)
    If Not z.exists(liste(i, 1)) Then
        z.Add liste(i, 1), Nothing
    End If
Next i
Erase liste
Sayfa1.ComboBox1.List = Application.Transpose(z.keys)
Set z = Nothing


Sıralama yapıp almanızı öneririm.
Dİğer türlü kodlarda Türkçe karakter sorunları yaşayabilirsiniz.
İlk verdiğim yöntemi denemenizi şiddetle tavsiye ederim.
Üstteki kodlarda Sayfa1 ve A sütununda olan veriler baz alınmıştır.
Değişkliklerinizi bu bakış açısıyla yapabilirsiniz.
“Benim yaradılışımda fevkâlade olan bir şey varsa, Türk olarak dünyaya gelmemdir"
Kullanıcı avatarı
OrkmesB
Yönetim Kurulu
 


 
Adı Soyadı:Bahadır Örkmes
Kayıt: 14 Haz 2008 18:26
Konum: Gökçeali
Meslek: Personel Müdürü
Yaş: 40
İleti: 5028
 

REKLAM
Excel Logo XML Oluşturucu
Logo Object Designer ile Uyarlama

Cevap: Cevap: Combobox'da bulunan verileri sıralama

İleti#5)  ebruyildiz » 11 Nis 2019 13:41

OrkmesB yazdı:
Kod: Tümünü seç
Dim z As Object, i As Long, liste(), sonsat As Long
Sayfa1.ComboBox1.Clear
sonsat = Cells(Rows.Count, "A").End(xlUp).Row
Sayfa1.Range("A1:A" & sonsat).Sort Sayfa1.Range("A1")
liste = Range("A1:A" & sonsat).Value
Set z = CreateObject("scripting.dictionary")
For i = 1 To UBound(liste)
    If Not z.exists(liste(i, 1)) Then
        z.Add liste(i, 1), Nothing
    End If
Next i
Erase liste
Sayfa1.ComboBox1.List = Application.Transpose(z.keys)
Set z = Nothing


Sıralama yapıp almanızı öneririm.
Dİğer türlü kodlarda Türkçe karakter sorunları yaşayabilirsiniz.
İlk verdiğim yöntemi denemenizi şiddetle tavsiye ederim.
Üstteki kodlarda Sayfa1 ve A sütununda olan veriler baz alınmıştır.
Değişkliklerinizi bu bakış açısıyla yapabilirsiniz.



Merhaba, söylemiş olduğunuz kodu denedim fakat çalışmadı hata vermiyor, sıralama da yapmıyor.
Kodun son hali aşağıdaki gibidir:

Private Sub UserForm_Initialize()
ComboBox1.RowSource = "Sheet1! A1:A" & Range("a65536").End(xlUp).Row
End Sub

Private Sub ComboBox1_change()
Dim z As Object, i As Long, liste(), sonsat As Long

Sheet1.ComboBox1.Clear
sonsat = Cells(Rows.Count, "A").End(xlUp).Row
Sheet1.Range("A1:A" & sonsat).Sort Sheet1.Range("A1")
liste = Range("A1:A" & sonsat).Value
Set z = CreateObject("scripting.dictionary")
For i = 1 To UBound(liste)
If Not z.exists(liste(i, 1)) Then
z.Add liste(i, 1), Nothing
End If
Next i
Erase liste
Sayfa1.ComboBox1.List = Application.Transpose(z.keys)
Set z = Nothing
End Sub

Hatayı nerde yapıyorum bulamıyorum, yardımcı olabilirseniz çok sevinirim. İyi günler dilerim.
Kullanıcı avatarı
ebruyildiz
Yeni Başlamış
 
Kayıt: 31 Mar 2019 13:27
Meslek: Öğrenci
Yaş: 23
İleti: 30
 
Cinsiyet: Bayan
Bulunduğunuz İl / Semt: İstanbul

Cevap: Combobox'da bulunan verileri sıralama

İleti#6)  tasad » 11 Nis 2019 14:20

Kodları deneyin.
Kod: Tümünü seç
Private Sub UserForm_Initialize()
Dim Rng As Range
With Sayfa1
.Range("a2:z" & Cells(Rows.Count, "a").End(3).Row).Sort Key1:=Range("a2"), Order1:=xlAscending, Header:=xlNo
ComboBox1.RowSource = "sayfa1!a2:a" & Range("a65000").End(3).Row
Set Rng = .Range("a2:a" & ComboBox1.ListCount + 1)
Rng = ComboBox1.List
ComboBox1.RowSource = Rng.Address
End With
End Sub
Kullanıcı avatarı
tasad
Site Dostu
 
Kayıt: 04 Şub 2018 09:46
Meslek: muhasebeci
Yaş: 27
İleti: 598
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: ısparta

REKLAM
ETA - Excel Konsolide Raporlama
ETA Excel Personel Entegre Raporu

Cevap: Cevap: Combobox'da bulunan verileri sıralama

İleti#7)  ebruyildiz » 11 Nis 2019 15:08

tasad yazdı:Kodları deneyin.
Kod: Tümünü seç
Private Sub UserForm_Initialize()
Dim Rng As Range
With Sayfa1
.Range("a2:z" & Cells(Rows.Count, "a").End(3).Row).Sort Key1:=Range("a2"), Order1:=xlAscending, Header:=xlNo
ComboBox1.RowSource = "sayfa1!a2:a" & Range("a65000").End(3).Row
Set Rng = .Range("a2:a" & ComboBox1.ListCount + 1)
Rng = ComboBox1.List
ComboBox1.RowSource = Rng.Address
End With
End Sub

Öncelikle uğraşlarınız için çok teşekkür ederim. Kod deneme excel dosyamdayken hatasız çalıştı fakat bu kodu asıl kendi koduma uyarladığımda 'object required' hatasıyla karşılaştım. Bir userform_initialize() zaten kodda mevcuttu ikincisi için hata verdi. Bu problemi nasıl çözebilirim?
Kullanıcı avatarı
ebruyildiz
Yeni Başlamış
 
Kayıt: 31 Mar 2019 13:27
Meslek: Öğrenci
Yaş: 23
İleti: 30
 
Cinsiyet: Bayan
Bulunduğunuz İl / Semt: İstanbul

Cevap: Combobox'da bulunan verileri sıralama

İleti#8)  tasad » 11 Nis 2019 15:19

2 tane userform_initialize() olmaz.Doğal olarak hata verir.Mevcut orjinal dosyadaki userform_initialize() içine kodları kaydedin.
Kod: Tümünü seç
Dim Rng As Range
With Sayfa1
.Range("a2:z" & Cells(Rows.Count, "a").End(3).Row).Sort Key1:=Range("a2"), Order1:=xlAscending, Header:=xlNo
ComboBox1.RowSource = "sayfa1!a2:a" & Range("a65000").End(3).Row
Set Rng = .Range("a2:a" & ComboBox1.ListCount + 1)
Rng = ComboBox1.List
ComboBox1.RowSource = Rng.Address
End With
Kullanıcı avatarı
tasad
Site Dostu
 
Kayıt: 04 Şub 2018 09:46
Meslek: muhasebeci
Yaş: 27
İleti: 598
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: ısparta

Cevap: Cevap: Combobox'da bulunan verileri sıralama

İleti#9)  ebruyildiz » 12 Nis 2019 12:08

tasad yazdı:2 tane userform_initialize() olmaz.Doğal olarak hata verir.Mevcut orjinal dosyadaki userform_initialize() içine kodları kaydedin.
Kod: Tümünü seç
Dim Rng As Range
With Sayfa1
.Range("a2:z" & Cells(Rows.Count, "a").End(3).Row).Sort Key1:=Range("a2"), Order1:=xlAscending, Header:=xlNo
ComboBox1.RowSource = "sayfa1!a2:a" & Range("a65000").End(3).Row
Set Rng = .Range("a2:a" & ComboBox1.ListCount + 1)
Rng = ComboBox1.List
ComboBox1.RowSource = Rng.Address
End With





Private Sub UserForm_Initialize()

Dim Rng As Range
With sayfa1
.Range("A2:Z" & Cells(Rows.Count, "A").End(3).Row).Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlNo
ComboBox1.RowSource = "sayfa1!A2:A" & Range("a65000").End(3).Row
Set Rng = .Range("A2:A" & ComboBox1.ListCount + 1)
Rng = ComboBox1.List
ComboBox1.RowSource = Rng.Address
End With

End Sub

Dediğinizi yapıyorum ama 'object required' hatası veriyor.
Kullanıcı avatarı
ebruyildiz
Yeni Başlamış
 
Kayıt: 31 Mar 2019 13:27
Meslek: Öğrenci
Yaş: 23
İleti: 30
 
Cinsiyet: Bayan
Bulunduğunuz İl / Semt: İstanbul

Cevap: Combobox'da bulunan verileri sıralama

İleti#10)  tasad » 12 Nis 2019 13:16

Kodları biraz gereksiz uzatmışım.Aşağıdaki kodları deneyin.
Kod: Tümünü seç
Sayfa1.Range("a2:z" & Cells(Rows.Count, "a").End(3).Row).Sort Key1:=Sayfa1.Range("a2"), Order1:=xlAscending, Header:=xlNo
ComboBox1.RowSource = "sayfa1!a2:a" & Range("a65000").End(3).Row
Kullanıcı avatarı
tasad
Site Dostu
 
Kayıt: 04 Şub 2018 09:46
Meslek: muhasebeci
Yaş: 27
İleti: 598
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: ısparta

Cevap: Cevap: Combobox'da bulunan verileri sıralama

İleti#11)  ebruyildiz » 12 Nis 2019 13:28

tasad yazdı:Kodları biraz gereksiz uzatmışım.Aşağıdaki kodları deneyin.
Kod: Tümünü seç
Sayfa1.Range("a2:z" & Cells(Rows.Count, "a").End(3).Row).Sort Key1:=Sayfa1.Range("a2"), Order1:=xlAscending, Header:=xlNo
ComboBox1.RowSource = "sayfa1!a2:a" & Range("a65000").End(3).Row


Merhaba, Bu ComboBox da hem dublicate hem de sıralama yapmaya çalışıyorum,dediğiniz gibi altına yapıştırdım ama yine aynı ''424'' hatasını veriyor.
Private Sub UserForm_Initialize()
Set s = Sheets("ReworkData")
For i = 2 To s.Range("k65536").End(3).Row
If WorksheetFunction.CountIf(s.Range("K2:K" & i), s.Cells(i, "K")) = 1 Then
ComboBox_SebepOlanIstasyon.AddItem s.Cells(i, "K").Value
End If
ReworkData.Range("K2:K" & Cells(Rows.Count, "K").End(3).Row).Sort Key1:=ReworkData.Range("k2"), Order1:=xlAscending, Header:=xlNo
ComboBox_SebepOlanIstasyon.RowSource = "ReworkData!k2:k" & Range("k65536").End(3).Row
Next
End Sub
Kullanıcı avatarı
ebruyildiz
Yeni Başlamış
 
Kayıt: 31 Mar 2019 13:27
Meslek: Öğrenci
Yaş: 23
İleti: 30
 
Cinsiyet: Bayan
Bulunduğunuz İl / Semt: İstanbul

Cevap: Combobox'da bulunan verileri sıralama

İleti#12)  tasad » 12 Nis 2019 13:33

Orjinal dosyanın küçük bir kısmını örnek olarak ekleyebilir misin?
Kullanıcı avatarı
tasad
Site Dostu
 
Kayıt: 04 Şub 2018 09:46
Meslek: muhasebeci
Yaş: 27
İleti: 598
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: ısparta

Cevap: Combobox'da bulunan verileri sıralama

İleti#13)  tasad » 12 Nis 2019 14:05

Kodları aşağıdakilerle değiştirin.
Kod: Tümünü seç
Set s = Sheets("ReworkData")
s.Range("a2:m" & Cells(Rows.Count, "K").End(3).Row).Sort Key1:=s.Range("k2"), Order1:=xlAscending, Header:=xlNo
For i = 2 To s.Range("k65536").End(3).Row
If WorksheetFunction.CountIf(s.Range("K2:K" & i), s.Cells(i, "K")) = 1 Then
ComboBox_SebepOlanIstasyon.AddItem s.Cells(i, "K").Value
End If
Next
Kullanıcı avatarı
tasad
Site Dostu
 
Kayıt: 04 Şub 2018 09:46
Meslek: muhasebeci
Yaş: 27
İleti: 598
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: ısparta

Cevap: Cevap: Combobox'da bulunan verileri sıralama

İleti#14)  ebruyildiz » 12 Nis 2019 14:15

tasad yazdı:Kodları aşağıdakilerle değiştirin.
Kod: Tümünü seç
Set s = Sheets("ReworkData")
s.Range("a2:m" & Cells(Rows.Count, "K").End(3).Row).Sort Key1:=s.Range("k2"), Order1:=xlAscending, Header:=xlNo
For i = 2 To s.Range("k65536").End(3).Row
If WorksheetFunction.CountIf(s.Range("K2:K" & i), s.Cells(i, "K")) = 1 Then
ComboBox_SebepOlanIstasyon.AddItem s.Cells(i, "K").Value
End If
Next


Çok teşekkür ederim.Ben de örnek dosyayı hazırlıyordum,çok yardımcı oldunuz tekrardan sağolun.
İyi günler dilerim.
Kullanıcı avatarı
ebruyildiz
Yeni Başlamış
 
Kayıt: 31 Mar 2019 13:27
Meslek: Öğrenci
Yaş: 23
İleti: 30
 
Cinsiyet: Bayan
Bulunduğunuz İl / Semt: İstanbul


Forum UserForm

Online Kullanıcılar

Bu forumu görüntüleyenler: Kayıtlı kullanıcı yok ve 1 misafir

Bumerang - Yazarkafe