negatif pozitif değere göre Sıralama Makrosu

Katılım
17 Mayıs 2012
Mesajlar
102
Excel Vers. ve Dili
Office 2019, Türkçe
Merhaba şölye bir sorum var. İllerin oranları ile ilgili bir tablom var. Bu tabloda sıralama yaparken negatif olanları kendi içinde küçükten büyüğe, pozitif olanları da sıfır olan değerler de dahil kendi içinde büyükten küçüğe sıralaması istiyorum. Bunu nasıl yapabilirim.
Yeni Microsoft Excel Çalışma Sayfası (2).xlsx - 8 KB

 

Muzaffer Ali

Destek Ekibi
Destek Ekibi
Katılım
5 Haziran 2006
Mesajlar
6,167
Excel Vers. ve Dili
2019 Türkçe
Merhaba.
Görmek istediğiniz sonucu da ekleyerek örnek dosyanızı yeniden paylaşın.
 

Necdet

Moderatör
Yönetici
Katılım
4 Haziran 2005
Mesajlar
15,371
Excel Vers. ve Dili
Ofis 365 Türkçe
Merhaba,
Yeni bir sütuna , örneğin C sütununa
Kod:
=EĞER(B2< 0;0;EĞER(B2=0;1;2))
formül yazıp bu sütuna göre sıralamada bu sütun ikinci sıralamayı da B sütuna göre yaptırabilirsiniz.

232978
 

Muzaffer Ali

Destek Ekibi
Destek Ekibi
Katılım
5 Haziran 2006
Mesajlar
6,167
Excel Vers. ve Dili
2019 Türkçe
Aşağıdaki kodu deneyin.
Kod:
Sub Test()
    Dim SonSatir As Long, Bak As Long
    With ThisWorkbook.Worksheets("Sayfa1")
        .Sort.SortFields.Clear
        .Sort.SortFields.Add2 Key:=Range("B:B"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        
        .Sort.SetRange Range("A:B")
        .Sort.Header = xlYes
        .Sort.MatchCase = False
        .Sort.Orientation = xlTopToBottom
        .Sort.SortMethod = xlPinYin
        .Sort.Apply

        SonSatir = .Cells(.Rows.Count, "A").End(xlUp).Row
        For Bak = 2 To SonSatir
            If .Cells(Bak, "B") >= 0 Then Exit For
        Next

        .Sort.SortFields.Clear
        .Sort.SortFields.Add2 Key:=Range("B" & Bak & ":B" & SonSatir), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
        .Sort.SetRange Range("A" & Bak & ":B" & SonSatir)
        .Sort.Header = xlGuess
        .Sort.MatchCase = False
        .Sort.Orientation = xlTopToBottom
        .Sort.SortMethod = xlPinYin
        .Sort.Apply
    End With
End Sub
 
Katılım
17 Mayıs 2012
Mesajlar
102
Excel Vers. ve Dili
Office 2019, Türkçe
Aşağıdaki kodu deneyin.
Kod:
Sub Test()
    Dim SonSatir As Long, Bak As Long
    With ThisWorkbook.Worksheets("Sayfa1")
        .Sort.SortFields.Clear
        .Sort.SortFields.Add2 Key:=Range("B:B"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
       
        .Sort.SetRange Range("A:B")
        .Sort.Header = xlYes
        .Sort.MatchCase = False
        .Sort.Orientation = xlTopToBottom
        .Sort.SortMethod = xlPinYin
        .Sort.Apply

        SonSatir = .Cells(.Rows.Count, "A").End(xlUp).Row
        For Bak = 2 To SonSatir
            If .Cells(Bak, "B") >= 0 Then Exit For
        Next

        .Sort.SortFields.Clear
        .Sort.SortFields.Add2 Key:=Range("B" & Bak & ":B" & SonSatir), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
        .Sort.SetRange Range("A" & Bak & ":B" & SonSatir)
        .Sort.Header = xlGuess
        .Sort.MatchCase = False
        .Sort.Orientation = xlTopToBottom
        .Sort.SortMethod = xlPinYin
        .Sort.Apply
    End With
End Sub
Office 2019 kullanıyorum, kodu yazdım ama hareketlilik yok
 

Muzaffer Ali

Destek Ekibi
Destek Ekibi
Katılım
5 Haziran 2006
Mesajlar
6,167
Excel Vers. ve Dili
2019 Türkçe
Kodu bir modüle kopyalayın. Mouse imlecini kodun herhangi bir yerine getirin yada seçin F5 tuşuna basarak kodu çalıştırın.
 

Necdet

Moderatör
Yönetici
Katılım
4 Haziran 2005
Mesajlar
15,371
Excel Vers. ve Dili
Ofis 365 Türkçe
Alternatif olsun

Kod:
Sub Makro1()

    Dim i   As Long
    
    Application.ScreenUpdating = False
    
    i = Cells(Rows.Count, "A").End(3).Row
    Range("C1") = Application.WorksheetFunction.Max(Range("B2:B" & i))
    
    Range("C2").FormulaR1C1 = _
        "=IF(RC[-1]<0,""A"",IF(RC[-1]>0,""B ""&R1C3-RC[-1],""C""))"
    Range("C2:C" & i).FillDown
    
    Range("A2:C" & i).Sort Key1:=[C2], order1:=xlAscending, Key2:=[B1], order2:=xlAscending
    Range("C1:C" & i).Clear
    Application.ScreenUpdating = True
    
End Sub
 

Muzaffer Ali

Destek Ekibi
Destek Ekibi
Katılım
5 Haziran 2006
Mesajlar
6,167
Excel Vers. ve Dili
2019 Türkçe
Kodları inceleseniz aslında rahatlıkla çözebilirsiniz.
Değişken adları anlaşılabilecek şekilde tanımlanmıştır.

Kod:
SonSatir = .Cells(.Rows.Count, "A").End(xlUp).Row
Yerine
Kod:
SonSatir =12
yazın.
 
Üst