• DİKKAT

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

Makro ile Filtreleme de Bazı Değerlerin Hariç Tutulması

Katılım
18 Ekim 2011
Mesajlar
32
Excel Vers. ve Dili
2013 Türkçe
Selamlar,

Makro ile filtreleme yaparken aşağıdaki kodu kullanıyorum, ancak 0 ile başlayan veya 0 olan değerler sıralamanın en üstüne geliyor, "0" ları hariç tutacak bir yol var mıdır acaba?

ActiveSheet.Range("A4:FF603").Sort [C4], Order1:=xlAscending

Saygılarımla.
 
Yaptığım denemede, aşağıdaki kodlar sayıları ve metin görünümlü sayıları ayrı ayrı sıralıyor:

Kod:
    ActiveWorkbook.Worksheets("Sayfa2").Sort.SortFields.Add Key:=Range("A2:A6"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=[COLOR="Red"][B]xlSortNormal[/B][/COLOR]

Aşağıdaki kodlar ise sayı gibi görünen her şeyi sayı olarak sıralıyor:

Kod:
    ActiveWorkbook.Worksheets("Sayfa2").Sort.SortFields.Add Key:=Range("A2:A6"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, [COLOR="red"][B]DataOption:=xlSortTextAsNumbers[/B][/COLOR]
 
Sayın Yusuf44,

Geri dönüşünüz için çok teşekkür ederim, problemimi daha iyi anlatabilmek için bir dosya ekledim, mümkünse inceleyebilir misiniz? Yazmış olduğunuz kodu bendeki dosyaya uyarlayamadım.
 

Ekli dosyalar

List2 sayfasında A3 hücresinde aşağıdaki formülü kullanıp aşağı doğru kopyalarsanız sayfada 0 oluşmaz, dolayısıyla da sıralamada dikkate alınmaz:

Kod:
=EĞER(List1!A3="";"";List1!A3)
 
Haklısınız, ID kısmına ilgili formülü uygulayınca sıkıntı giderildi, ancak isme göre sıralamada işe yaramadı maalesef, düzenlenmiş dosyayı tekrar ekledim..
 

Ekli dosyalar

O sorunu çözemedim. Ancak aşağıdaki makroları hazırladım. Makrolar önce List2'deki verileri siliyor, sonra List1'deki verileri aktarıp ID makrosu ID'e göre, ad makrosu da Ad'a göre sıralama yapıyor:
ID makrosu:
Kod:
Sub ID()
Set s1 = Sheets("List1")
Set s2 = Sheets("List2")

eski = WorksheetFunction.Max(s2.Cells(Rows.Count, "A").End(3).Row, 3)
s2.Range("A3:F" & eski).ClearContents

son = WorksheetFunction.Max(s1.Cells(Rows.Count, "A").End(3).Row, 3)
s1.Range("A3:F" & son).Copy: s2.[A3].PasteSpecial Paste:=xlValues
    
Application.CutCopyMode = False
    
s2.Sort.SortFields.Clear
s2.Sort.SortFields.Add Key:=Range("A4"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With s2.Sort
        .SetRange Range("A3:F" & son)
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub

ad makrosu:

Kod:
Sub ad()
Set s1 = Sheets("List1")
Set s2 = Sheets("List2")

eski = WorksheetFunction.Max(s2.Cells(Rows.Count, "A").End(3).Row, 3)
s2.Range("A3:F" & eski).ClearContents

son = WorksheetFunction.Max(s1.Cells(Rows.Count, "A").End(3).Row, 3)
s1.Range("A3:F" & son).Copy: s2.[A3].PasteSpecial Paste:=xlValues
    
Application.CutCopyMode = False
    
s2.Sort.SortFields.Clear
s2.Sort.SortFields.Add Key:=Range("B3"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal

    With ActiveWorkbook.Worksheets("List2").Sort
        .SetRange Range("A3:F" & son)
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub
 
Son düzenleme:
Çok teşekkür ederim, uyguladım, gayet başarılı oldu, emeğinize sağlık.

Çok selamlar.
 
Ad makrosunu değiştirdim, F5'e kadar sıralıyordu, son dolu satıra kadar sıralama kodunu ekledim. Önceki mesajımda son halini görebilirsiniz.
 
Sonradan aklıma bir şey geldi,

Yeni bir dosya oluşturdum ve sıralama makrosunu List1 içine koydum, List 1'de sıralamaları yapınca List2 ye aktarım doğru oluyor, ancak yine bir sıkıntı var, List2 içine koyduğum buton ile List1 içindeki makroyu çalıştıramıyorum? Rica etsem son kez yeni düzenlediğim eki inceleyebilir misiniz?
 

Ekli dosyalar

Sub Staff_Id_Sort()

ActiveWorkbook.Worksheets("List1").Range("A3:F999").Sort [A3], Order1:=xlAscending

End Sub

Sub Staff_Name_Sort()

ActiveWorkbook.Worksheets("List1").Range("A3:F999").Sort [B3], Order1:=xlAscending

End Sub

Kodlarda göreceğiniz gibi sıralamayı List1 sayfasında yapıyor. Bunu List2 yaparsanız list2 sayfasıdna sıralama yapar.

Ancak bu kodların benim son verdiklerimle alakası yok.
 
Evet farklı bir deneme yapmak istemiştim,

İlk versiyonda List1 'e girilen verileri List2'ye formülle aktarıp makro ile verileri süzmek istemiştim, ama bildiğiniz gibi "isim" başlığı altında aktarılan verileri "0" gördüğü için sıralamayı yanlış yapıyordu. (Sizin yazmış olduğunuz kod ile sıkıntıyı çözdük)

İkinci denemek istediğim versiyonda (Son dosya) List1'e girilen verileri bu kez List1 sayfasına koyduğum buton ile aynı sayfada süzdüm (eski kod ile), List2 sayfasına da veriler sıralanmış şekilde geldi ancak List2'ye aynı butonu eklemek istediğim zaman "Run Time Error '1004" uyarısını aldım. (Sıralama Başvurusu geçerli değil mesajı)
Kod içerisindeki List1'i List2 yaptığımda yine List2 içerisinde sıralama yaparak en başta yaşadığımız sıkıntı baş gösteriyor("0" gözükenleri başa alıyor)
Kısacası List1de ki makro'yu List2'ye koyacağım buton ile nasıl çalıştırabilirim? (Çok mu karıştırdım):)
 
Aşağıdaki gibi deneyin:
Kod:
Sub Staff_Id_Sort()

    ActiveWorkbook.Worksheets("List1").Range("A3:F999").Sort Sheets("List1").[A3], Order1:=xlAscending
        
End Sub

Sub Staff_Name_Sort()

     ActiveWorkbook.Worksheets("List1").Range("A3:F999").Sort Sheets("List1").[B3], Order1:=xlAscending
        
End Sub
 
Oldu, sayenizde yeni birşey daha öğrendim, çok teşekkür ederim.

Saygılar ve selamlar diliyorum.
 
Geri
Üst