• DİKKAT

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

Soru Ilişkili combobox'da Sıralama

Katılım
24 Kasım 2007
Mesajlar
769
Excel Vers. ve Dili
Office 365 - Türkçe
Merhaba

Ekteki dosyada combobox1'de seçilen veriye göre combobox2 listesi değişiyor. Benim istediğim combobox2'nin alfabetik sıralama değilde değerleri aldığı sutundaki sıralamaya göre listesini sıralaması. Dosyam ektedir

Combobox1 : A1'i seciniz
Combobox2 'nin listesindeki sıralama şu şekilde oluşuyor
10
100
20
200
30
40

Benim isteğim ise
10
20
30
40
100
200
 

Ekli dosyalar

Merhaba.

ComboBox2.Column = con.Execute("select distinct HAT from [Ayarlar$] where ATÖLYE ='" & ComboBox1.Value & "'").getrows

satırını silin aşağıdakini kopyalayın.

ComboBox2.Column = con.Execute("select HAT from [Ayarlar$] where ATÖLYE ='" & ComboBox1.Value & "'").getrows
 
sayın dalgalıkur
"distinct" silersek excel sütunlarındaki veriler birden fazla olduğu zaman, combobox listesinde veriler mükerrer olarak görünmüyor.

Excel shettindeki verileri aşağıdaki gibi olduğunu düşünelim
A1 10
A1 20
A1 30
A1 40
A1 100
A1 200
A1 200
A1 200
A2 AD
A2 AC
A2 AB

Combobox listesi şu şekilde görünüyor
10
20
30
40
100
200
200
200
 
Evet "distinct" benzersiz kayıtları getirmek için kullanılıyor.
Satırda herhangi bir sıralama terimi de mevcut değil.
Ben sorunu çözemedim.
 
userformdaki kodları silin bunları oraya yapıştırın

Kod:
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, _
                                              ByVal bScan As Byte, _
                                              ByVal dwFlags As Long, _
                                              ByVal dwExtraInfo As Long)
Private Type evn
    X As Long
    Y As Long
End Type

Private evnMenum As Long
Const evnSol = &H0&
Const evnGeri = &H100&
Const evnSag = &H2&

Private Const VK_LMENU = &HA4
Private Const VK_SNAPSHOT = &H2C
Private Const VK_CONTROL = &H11
Private Const VK_V = &H56
Private Const VK_0x79 = &H79
Private Const KEYEVENTF_EXTENDEDKEY = &H1
Private Const KEYEVENTF_KEYUP = &H2
Private a As Long
Dim i As Long
Dim con As Object
Private Sub ComboBox1_Change()
On Error Resume Next
Label4.ForeColor = vbRed 'label kırmızı olur
If ComboBox1.Value = "" Then
Label4.ForeColor = &H808080    'label gri olur
Exit Sub
End If
ComboBox2.Clear
Set s1 = Sheets(ActiveSheet.Name)
For j = 2 To s1.Cells(Rows.Count, "f").End(3).Row
If ComboBox1.Text = s1.Cells(j, "f") Then
ComboBox2.AddItem s1.Cells(j, "g")
End If
Next j
End Sub

Private Sub UserForm_Initialize()

ComboBox1.Clear
Set s1 = Sheets(ActiveSheet.Name)
son1 = s1.Cells(Rows.Count, "f").End(3).Row
ReDim ara1(son1): ReDim ara2(son1)

For j = 2 To s1.Cells(Rows.Count, "f").End(3).Row
If s1.Cells(j, "f") <> "" Then
Say = Say + 1
ara1(Say) = WorksheetFunction.Trim(s1.Cells(j, "f"))
ara2(Say) = 1
End If
Next j
sat1 = 2

For r = 2 To Say
aranan1 = ara1(r)
If ara2(r) = 1 Then
For i = 2 To Say
If ara1(i) = aranan1 Then
ara2(i) = 0
End If
Next i
ComboBox1.AddItem aranan1
End If

Next r
End Sub
 
.....
Benim istediğim combobox2'nin alfabetik sıralama değilde değerleri aldığı sutundaki sıralamaya göre listesini sıralaması. Dosyam ektedir

Gerçi Halit Bey bir öneride bulunmuş ancak, bence esas sorun; eğer bu tabloyu bir veri tabanı olarak kabul edersek, "HAT" alanındaki verilerin hem nümerik (A1 verileri) hem de metin (A2 verileri) olarak karışık bir şekilde aynı alanda olmalarından kaynaklanıyor. Öncelikle bu durumun düzeltilmesi gerekir, sonrası daha basit olacaktır.

.
 
Sayın Halit3
Kodları yeni deneme fırsatım oldu. Listede mükerrer kayıtlar görünmekte

Combobox listesi şu şekilde görünüyor
10
20
30
40
100
200
200
200
 
Eklediğiniz örnekte A1 sayıdan A2 ise sadece metinsel ifadelerden oluşuyor.
Bunun değişme ihtimali var mıdır? A1 için hem sayı hemde metin olabilir mi?
 

İstediğiniz veritabanı mantığı ile örtüşen bir durum değil. Değişkenleri değiştirirseniz kodlaması ve raporlaması daha rahat olur.
Atölyeye karşılık gelen veri sadece sayı yada metinden oluşursa aşağıdaki kod işinizi görebilir.

Kod:
sorgu = "select f1,f2 from(select iif(isnumeric(left(yeni,1)),1*yeni) as f1,iif(not isnumeric(left(yeni,1)),yeni) as f2 from(select distinct hat as yeni from [Ayarlar$] where ATÖLYE ='" & ComboBox1.Value & "')) order by f1 , f2"
Set rs = con.Execute(sorgu)
veri = rs.getrows

For Each deg In veri
If deg <> "Null" Then ComboBox2.AddItem deg
Next deg
 
Teşekkür ederim.
Kod çalışıyor, Atölyeye karşılık gelen verileri, metin yada sayı yaparsam
Yapabilirmiyim bi bakalım, yendien teşekkürler bütün emeği geçenelere
 
Sayın Halit3
Kodları yeni deneme fırsatım oldu. Listede mükerrer kayıtlar görünmekte

Combobox listesi şu şekilde görünüyor
10
20
30
40
100
200
200
200

birde bu kodları dene

Kod:
Private Sub ComboBox1_Click()

ComboBox2.Clear
Set s1 = Sheets(ActiveSheet.Name)
son1 = s1.Cells(Rows.Count, "g").End(3).Row
ReDim ara1(son1): ReDim ara2(son1)
say = 1
For j = 2 To s1.Cells(Rows.Count, "g").End(3).Row


If s1.Cells(j, "g") <> "" Then
say = say + 1
ara1(say) = WorksheetFunction.Trim(s1.Cells(j, "g"))
ara2(say) = 1
End If
Next j
sat1 = 2

For r = 2 To say

If ComboBox1.Text = s1.Cells(r, "f") Then
aranan1 = ara1(r)
If ara2(r) = 1 Then
For i = 2 To say
If ara1(i) = aranan1 And ComboBox1.Text = s1.Cells(i, "f") Then
ara2(i) = 0

End If
Next i

ComboBox2.AddItem aranan1
End If
Else
ara2(r) = 0
End If
Next r
End Sub



Private Sub UserForm_Initialize()

ComboBox1.Clear
Set s1 = Sheets(ActiveSheet.Name)
son1 = s1.Cells(Rows.Count, "f").End(3).Row
ReDim ara1(son1): ReDim ara2(son1)
say = 1
For j = 2 To s1.Cells(Rows.Count, "f").End(3).Row
If s1.Cells(j, "f") <> "" Then
say = say + 1
ara1(say) = WorksheetFunction.Trim(s1.Cells(j, "f"))
ara2(say) = 1
End If
Next j
sat1 = 2

For r = 2 To say
aranan1 = ara1(r)
If ara2(r) = 1 Then
For i = 2 To say
If ara1(i) = aranan1 Then
ara2(i) = 0
End If
Next i
ComboBox1.AddItem aranan1
End If

Next r
End Sub
 

Ekli dosyalar

Teşekkürler iyi çalışmalar
 
Geri
Üst