Makro ile sıralamada türkçe karakter (ı,ş,ü,ğ,ç,ö) problemi.

Katılım
8 Ocak 2007
Mesajlar
147
Excel Vers. ve Dili
2003
Xp
Türkçe
İngilizce
makro ile sıralamam gereken bir listem var. Excel in sırala fonksiyonunu kullanmadan sıralamam gerekiyor.
Kullandığım yöntem aşağıda ama türkçe karakterler (ı,ş,ü,ğ,ç ve ö) hep son sıralara gidiyor...

Kod:
Sub sırala()
son = [a65536].End(3).Row
ReDim lst(son)
For k = 1 To son
lst(k) = Cells(k, 1)
Next
For k = 1 To son - 1
For l = k + 1 To son
If LCase(lst(k)) > LCase(lst(l)) Then _
gec = lst(k): lst(k) = lst(l): lst(l) = gec
Next: Next
For k = 1 To son
Cells(k, 2) = lst(k)
Next
End Sub

Bunu çözebileceğim bir komut veya yöntem varmı acaba?
(tabi 29 harfin hepsini tanımlayıp sıralamayı bu tanımlamaya göre yaptırmak dışında :) )
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,058
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
Aşağıdaki gibi deneyin.

Kod:
[LEFT]Sub sırala()
son = [a65536].End(3).Row
ReDim lst(son)
For k = 1 To son
lst(k) = Cells(k, 1)
Next
For k = 1 To son - 1
For l = k + 1 To son
If Evaluate("=UPPER(""" & lst(k) & """)")>Evaluate("=UPPER(""" & lst(l) & """)")
gec = lst(k): lst(k) = lst(l): lst(l) = gec
Next: Next
For k = 1 To son
Cells(k, 2) = lst(k)
Next
End Sub[/LEFT]
 

veyselemre

Özel Üye
Katılım
9 Mart 2005
Mesajlar
3,650
Excel Vers. ve Dili
Pro Plus 2021
Kodunuzu aşağıdaki şekilde değiştirebilirsiniz.
Kod:
Sub sirala()
son = [a65536].End(3).Row
ReDim lst(son)
For k = 1 To son
    lst(k) = Cells(k, 1)
Next
For k = 1 To son - 1
    For l = k + 1 To son
        If StrComp(lst(k), lst(l), vbTextCompare) = 1 Then
            gec = lst(k): lst(k) = lst(l): lst(l) = gec
        endif
    Next
Next
For k = 1 To son
    Cells(k, 2) = lst(k)
Next
End Sub
veya
Kod:
Sub sirala()
son = [a65536].End(3).Row

lst = Range("a1:a" & son)

For k = 1 To son - 1
    For l = k + 1 To son
        If StrComp(lst(k, 1), lst(l, 1), vbTextCompare) = 1 Then
            gec = lst(k, 1): lst(k, 1) = lst(l, 1): lst(l, 1) = gec
        End If
    Next
Next

Range("b1:b" & son).Value = lst
End Sub
Kendi kullandığım çalışmadan bir örnek.
 
Son düzenleme:
Katılım
8 Ocak 2007
Mesajlar
147
Excel Vers. ve Dili
2003
Xp
Türkçe
İngilizce
çok çok çok teşekkür...

Sayın Leventm ve Sayın Veyselemre çok teşekkür ederim.
Verdiğiniz cevaplarda aradığım cevabın yanında bir sürü extra sorum olabilecek konunun açıklamasını buldum :)
Çok teşekkürler.

Hep Böyle kalın... :) :icelim:
 
Üst