Excel'de Sayısal Sıralama Nasıl Yapılır?

Katılım
10 Şubat 2023
Mesajlar
3
Excel Vers. ve Dili
2019
Arkadaşlar Merhaba, benim elimde a sütununda alt alta 7000'in üzerinde veri var. Bu veriyi sayısal olarak sıralamaya çalışıyorum a'dan z'ye sıralaya bastığım zaman hücrelerde anladığım kadarıyla özel karakter(/) olması nedeniyle hatalı sıralamalar yapıyor örnek üzerinden anlatırsam sanırım daha iyi açıklamış olacağım, örneğin alt alta yazılı olan 2009/1, 2009/2, 2009/10 olan veriyi sıralamak istediğimde 2009/1 2009/10, 2009/2 şeklinde yanlış bir sıralama yapıyor. Elimdeki verilerde 5 rakamlı veriler de var yani 2009/12345 gibi bunu kolay ve doğru bir şekilde sıralamam için nasıl bir yöntem izlemem lazım internet üzerinden bir takım araştırmalar yaptım fakat doğru bilgiyi bulamadım nasıl yapabilirim yardımcı olabilir misiniz? Cevaplarınız için şimdiden teşekkür ederim.
 

hasankardas

Altın Üye
Katılım
14 Ağustos 2006
Mesajlar
331
Excel Vers. ve Dili
Ofis 2021ProPlus TR 64 Bit
Altın Üyelik Bitiş Tarihi
18-01-2027
Merhaba Ali Bey,
Örnek dosya paylaşmadığınız için yazdığınız örneklere göre bir kaç yöntem yazabilirim.
*veri-metni sütunlara dönüştürden özel karakterinize göre parçalama yapabilirsiniz.
*Soldan sağdan veya parçaal formülüyle parçalara ayırıp sıralama yapabilirsiniz
* en karaışık satırınıza göre diğer hücrelerinizi ayarlama yapabilirsiniz.
*/ işaretlerini kaldırıp büyükten küçüğe veya tersini yapabilirsiniz. daha sonra 2.ci maddede yazdığıma göre parçalara bölebilirsiniz
 

uzmanamele

Uzman
Uzman
Katılım
26 Eylül 2007
Mesajlar
9,417
Excel Vers. ve Dili
excel 2010
Merhaba

Bu gibi durumlarda verileri düzenlemek en doğrusu olur.
2009/1 yerine 2009/01 kullanırsanız sıralamanız doğru olacaktır.

Bu tür veriler az ise manuel değiştirmeyi deneyin.
Verileriniz çok ise Yerinekoy gibi fonksiyonlar ile değiştirebilirsiniz.
Makro ile değiştirmek de çözüm olacaktır.

Örnek dosya eklerseniz uygun çözüm yoluna daha çabuk ulaşırsınız.
 

Haluk

𐱅𐰇𐰼𐰚
Katılım
7 Temmuz 2004
Mesajlar
12,310
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Veriler A sütununda A2 hücresinden başlayarak yer alıyorsa, aşağıdaki kod, bu verileri C sütununda C2 hücresinden başlayarak sıralar.

C#:
Sub Test()
'   Haluk - 13/02/2023

    Dim objRS As Object
    Dim myTable() As Variant
    Dim i As Integer
    Dim xRng As Range
  
    Const adDouble = 5
  
    Set objRS = CreateObject("ADODB.Recordset")
    objRS.Fields.Append "Field1", adDouble
    objRS.Fields.Append "Field2", adDouble
    objRS.Open
  
    For Each xRng In Range("A2:A" & Range("A" & Rows.Count).End(xlUp).Row)
        objRS.AddNew
        objRS.Fields("Field1").Value = CDbl(Split(xRng, "/")(0))
        objRS.Fields("Field2").Value = CDbl(Split(xRng, "/")(1))
        objRS.Update
    Next
  
    objRS.Sort = "Field1, Field2"
  
    myTable() = objRS.GetRows()
  
    ReDim sortedList(UBound(myTable, 2))
  
    For i = 0 To UBound(sortedList)
        sortedList(i) = myTable(0, i) & "/" & myTable(1, i)
        Range("C" & i + 2) = sortedList(i)
    Next
  
    objRS.Close
  
    Erase myTable()
    Set objRS = Nothing
End Sub

Örnek dosya aşağıdaki linktedir;



.
 
Son düzenleme:

uzmanamele

Uzman
Uzman
Katılım
26 Eylül 2007
Mesajlar
9,417
Excel Vers. ve Dili
excel 2010
Merhaba

Haluk üstadın kodlarına alternatif formül önerisi de benden oldun.
A sütunununda verileriniz varsa ve xxxx/x şeklinde ise bunları xxxx/xx (/'den sonra 2 basamak) şekline dönüştürerek A-Z sıralaması yapabilirsiniz.

C++:
=SOLDAN(A1;MBUL("/";A1;1)-1)&"/"&METNEÇEVİR(SAĞDAN(A1;UZUNLUK(A1)-MBUL("/";A1;1));"00")
 
Katılım
10 Şubat 2023
Mesajlar
3
Excel Vers. ve Dili
2019
Veriler A sütununda A2 hücresinden başlayarak yer alıyorsa, aşağıdaki kod, bu verileri C sütununda C2 hücresinden başlayarak sıralar.

C#:
Sub Test()
'   Haluk - 13/02/2023

    Dim objRS As Object
    Dim myTable() As Variant
    Dim i As Integer
    Dim xRng As Range
 
    Const adDouble = 5
 
    Set objRS = CreateObject("ADODB.Recordset")
    objRS.Fields.Append "Field1", adDouble
    objRS.Fields.Append "Field2", adDouble
    objRS.Open
 
    For Each xRng In Range("A2:A" & Range("A" & Rows.Count).End(xlUp).Row)
        objRS.AddNew
        objRS.Fields("Field1").Value = CDbl(Split(xRng, "/")(0))
        objRS.Fields("Field2").Value = CDbl(Split(xRng, "/")(1))
        objRS.Update
    Next
 
    objRS.Sort = "Field1, Field2"
 
    myTable() = objRS.GetRows()
 
    ReDim sortedList(UBound(myTable, 2))
 
    For i = 0 To UBound(sortedList)
        sortedList(i) = myTable(0, i) & "/" & myTable(1, i)
        Range("C" & i + 2) = sortedList(i)
    Next
 
    objRS.Close
 
    Erase myTable()
    Set objRS = Nothing
End Sub

Örnek dosya aşağıdaki linktedir;



.
Hocam harikasınız, cevap ekine eklediğiniz dosya üzerinden yapmak daha iyi oldu. Zaman ayırdığınız için teşekkür ederim emeğinize sağlık.
 
Katılım
10 Şubat 2023
Mesajlar
3
Excel Vers. ve Dili
2019
Cevap veren arkadaşlara zaman ayırıp yardımcı oldukları için teşekkür ederim.
 

veyselemre

Özel Üye
Katılım
9 Mart 2005
Mesajlar
3,593
Excel Vers. ve Dili
Pro Plus 2021
Örnek olarak kalsın.
Kod:
Sub testAdoSirala()
    Dim rs As Object
    Set rs = CreateObject("ADODB.Recordset")
    [C:C].ClearContents
    With rs
        .Open "SELECT A1 & '/' & A2 FROM " & _
              " ( SELECT VAL(LEFT(F1,S-1))AS A1, VAL(MID(F1,S+1))AS A2 FROM " & _
              "   (SELECT F1,INSTR(F1,'/') AS S FROM [Sheet1$A2:A])) ORDER BY A1,A2", _
              "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties='Excel 12.0 Xml;HDR=NO';" & _
              "Data Source=" & ActiveWorkbook.FullName
        Range("C2").CopyFromRecordset rs
    End With
End Sub
 
Üst