• DİKKAT

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

3'ten fazla sutuna göre sıralama işlemi

  • Konbuyu başlatan Konbuyu başlatan Zahir
  • Başlangıç tarihi Başlangıç tarihi
Katılım
21 Mart 2006
Mesajlar
234
Excel Vers. ve Dili
Excel 2003 - İngilizce
Merhabalar;

Sizinde bildiğiniz gibi excelde sırlama işlemi 3 farklı sutuna göre yapılıyor. 3'ten fazla sutuna göre sırlama nasıl yapılır.

Ben 3 sutuna göre sırlama işleminin kodlarına 4.cüsünü ilave ettim ama hata aldım. Yardımlarınızı bekliyorum. Teşekkürler. Not: site içi arama yaptım ancak bulamadım.

Örnek uygulama : A, B, C, D, E sutunlarını 1.satırda başlık olduğunu varsayarak A2 den itibaren sıralayan macroyu nasıl yapabiliriz.
 
Önce CDE 'yi sırala.Sonra AB'yi sırala.:cool:
 
Evren Bey teşekkürler ama ben bu işlemi bir butona atayacağım.
 
İki farklı sırlama işleminin kodlarını butona eklerseniz çakışma olur.

Örnek (benim dosyamdaki şekliyle) :
' 1.Sıralama
Range("B6:U376").Select
Selection.Sort Key1:=Range("I6"), Order1:=xlAscending, Key2:=Range("D6") _
, Order2:=xlAscending, Key3:=Range("E6"), Order3:=xlAscending, Key4:=Range("B6"), Order4:=xlAscending, Header:= _
xlNo, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal, DataOption2:=xlSortNormal, DataOption3:= _
xlSortNormal
' 2.Sıralama
Range("B6:U376").Select
Selection.Sort Key1:=Range("B6"), Order1:=xlAscending, Header:=xlNo, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal


Gördüğünüz gibi burda Key1:=Range("I6") ile Key1:=Range("B6") çakıştı. Ben bunlardan 2.cisini Key4 yaptım ama bu seferde hata verdi. Zaten sorunumun çözümü için bu dakikadan sonra buraya yazdım.
 
:cool:

Kod:
Range("B6:U376").Select
Selection.Sort Key1:=Range("I6"), Order1:=xlAscending, Key2:=Range("D6") _
, Order2:=xlAscending, Key3:=Range("E6"), Order3:=xlAscending, 
' 2.Sıralama
Range("B6:U376").Select
Selection.Sort Key1:=Range("B6"), Order1:=xlAscending
 
Sorduğum sorunun cevabını aldığımı düşünürken bir yerde hata yaptığımızı farkettim. Buna göre 2.sıralamayı 1.sıralamanın devamı şeklinde yapmamız gerekiyor. Aksi takidirde 2.sıralamada diğer sıralama şekli tamamen bozuluyor.
 
Son düzenleme:
Sorduğum sorunun cevabını aldığımı düşünürken bir yerde hata yaptığımızı farkettim. Buna göre 2.sıralamayı 1.sıralamanın devamı şeklinde yapmamız gerekiyor. Aksi takidirde 2.sıralamada diğer sıralama şekli tamamen bozuluyor.
Siz sıralamayı nasıl yapacaksınız.3-4 falan demeden sütun sırasını sırasını söyleyin.
Ben ona göre bölüp yapıcam.:cool:
 
Buyrun size ekli dosya. Buton koymayıda ihmal etmedim :)
 

Ekli dosyalar

Selamlar,

E2 hücresine aşağıdaki formülü uygulayın. Aşağıya doğru sürükleyin. Daha sonra sıralamayı E sütununa göre yapın. İşiniz bittikten sonra bu sütunu silin.

Kod:
=A2&B2&C2&D2


Ayrıca aşağıdaki koduda kullanabilirsiniz.

Kod:
Option Explicit
 
Sub SIRALA()
    Application.ScreenUpdating = False
    Range("E1") = "SIRALAMA"
    Range("E2:E" & Range("A65536").End(3).Row).Formula = "=A2&B2&C2&D2"
    Range("A:E").Sort Key1:=Range("E2"), Order1:=xlAscending, Header:=xlGuess, _
    OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal
    Range("E:E").ClearContents
    Application.ScreenUpdating = True
    MsgBox "Sıralama işlemi tamamlanmıştır.", vbInformation
End Sub
 
bir örnekde ben vereyim

Sub AZBUYUK()
a = InputBox("sıralama yapacağınız sütun numarasını yazınız. örnek olarak A sütunu için 1 yazınız H sutunu için 8 yazınız.", "SIRALAMA PENCERESİ", "1")
Rows("2:65536").Sort Key1:=Cells(a), Order1:=xlAscending
MsgBox ("Sıralama yapıldı...")
End Sub
Sub ZABUYUK()
a = InputBox("sıralama yapacağınız sütun numarasını yazınız. örnek olarak A sütunu için 1 yazınız H sutunu için 8 yazınız.", "SIRALAMA PENCERESİ", "1")
Rows("2:65536").Sort Key1:=Cells(a), Order1:=xlDescending
MsgBox ("Sıralama yapıldı...")
End Sub
 
Dosyanız ektedir.:cool:
 

Ekli dosyalar

Sayın Korhan AYHAN sizin çözümünüzde aklımızda olsun makro yazmadan çözümü gayet güzel olmuş.
Sayın Halit3 sizin çözümünüz tek sutuna göre sanırım.

Sayın Evren GİZLEN sizide uğraştırdık ama çözümünüz gerçekten mükemmel olmuş ellerinize sağlık teşekkür ederim.
A sutununa tarih dşında veri girdiğimde sıralamaya tabi tutmaması ise çok şaşırtıcı bunun sebebi nedir?
Birde hazır sizi yakalamışken "sat = Cells(65536, "A").End(xlUp).Row" kodunun ne yaptığını açıklayabilirmisiniz.

Hepinize yardımlarınızdan dolayı çok teşekkür ederim.
 
A sütununda son dolu hücrenin Satır numarasını verir.:cool:
Kod:
sat = Cells(65536, "A").End(xlUp).Row
 
Peki ben A sutunununa tarih yerine karakter giriyorum ve diğer sutunlarıda normal dolduruyorum ama sıralamada dikkate almıyor. Bu neden oluyor acaba?
 
Peki ben A sutunununa tarih yerine karakter giriyorum ve diğer sutunlarıda normal dolduruyorum ama sıralamada dikkate almıyor. Bu neden oluyor acaba?
Tarihi tarihe göre sıralar,Stringide stringe göre sıralar.Bir kaçtanede string girin(Metin) onlarında kendi içlerinde sıralanacağını görürüsünüz.:cool:
 
Evet bunu düşünememiştim :)

Yardımlarınız için çok teşekkür ederim.
 
Sayın Korhan AYHAN sizin çözümünüzde aklımızda olsun makro yazmadan çözümü gayet güzel olmuş.
Sayın Halit3 sizin çözümünüz tek sutuna göre sanırım.

Sayın Evren GİZLEN sizide uğraştırdık ama çözümünüz gerçekten mükemmel olmuş ellerinize sağlık teşekkür ederim.
A sutununa tarih dşında veri girdiğimde sıralamaya tabi tutmaması ise çok şaşırtıcı bunun sebebi nedir?
Birde hazır sizi yakalamışken "sat = Cells(65536, "A").End(xlUp).Row" kodunun ne yaptığını açıklayabilirmisiniz.

Hepinize yardımlarınızdan dolayı çok teşekkür ederim.

çözüm bütün sutunları kapsıyor yanlız hangi sutuna göre sıralanacağını mesaj kutusuna yazmanız gerekiyor
 
Sayın Halit3 buna itirazım yok. Ancak hangi sutuna göre değil hangi sutunlara göre sıralanacağı önemli bizim için zira amacımız 4 ölçütlü yani 4 sutuna göre sıralama yapmaya çalışmaktı.
 
Geri
Üst