Butonla Sıralama

hakki83

Altın Üye
Katılım
30 Eylül 2021
Mesajlar
533
Excel Vers. ve Dili
Excel 2016 Türkçe 32 Bit
Altın Üyelik Bitiş Tarihi
30-09-2026
Merhaba saygılar hocalarımız

Örnek dosyada, tablomun her sütunun üstüne (başlık kısmına) birer buton koyup normal, küçükten büyüğe sıralama yaptırmak istiyorum. Yanlış anlaşılma olmasın, sütunun kendisini değil, veri içeren tüm sütunlarla birlikte, bildiğimiz komple basit sıralama yani.

Sütun sayısı ve satır sayısı değişkendir. En üst satır başlıktır.

Bir tane kodum olsun istiyorum, bunu her dosyamda, her butonda kullanayım istiyorum.

Ben kodun içine sadece bulunduğu sütun adını yazayım;
son sütunu, son satırı kod kendisi bulsun. Yani başlangıç sütununu, veya bitiş sütununu kodun içine yazmayayım, kod otomatik bulsun, dolayısıyla işim kolaylaşmış olsun.

Böyle bir kod oluşturabilir miyiz?

Yalnız lütfen sıralamadan başka herhangi bir biçimlendirme vs içermesin. mümkün olduğu kadar sade bir kod olsun.

Teşekkürler hocalarımız.

Her türlü alternatifi de denemek isterim.
 

Ekli dosyalar

Necdet

Moderatör
Yönetici
Katılım
4 Haziran 2005
Mesajlar
15,353
Excel Vers. ve Dili
Ofis 365 Türkçe
Merhaba,
İsteğinizi karşılar mı, deneyiniz.
hangi sütunda sıralama yapmak istiyorsanız tablonun bir bölümünde o sütünda olmalısınız, böylelikle bir sürü buton koymaya gerek kalmaz. Sonra kodu çalıştırın.
Tabloda Başlık olduğu varsayılmıştır. O yüzden Offset komutu kullanıldı.

Kod:
Sub Makro1()

Dim rng As Range

Set rng = ActiveCell.CurrentRegion
rng.Offset(1).Sort Key1:=ActiveCell

End Sub
 

hakki83

Altın Üye
Katılım
30 Eylül 2021
Mesajlar
533
Excel Vers. ve Dili
Excel 2016 Türkçe 32 Bit
Altın Üyelik Bitiş Tarihi
30-09-2026
Merhaba,
İsteğinizi karşılar mı, deneyiniz.
hangi sütunda sıralama yapmak istiyorsanız tablonun bir bölümünde o sütünda olmalısınız, böylelikle bir sürü buton koymaya gerek kalmaz. Sonra kodu çalıştırın.
Tabloda Başlık olduğu varsayılmıştır. O yüzden Offset komutu kullanıldı.

Kod:
Sub Makro1()

Dim rng As Range

Set rng = ActiveCell.CurrentRegion
rng.Offset(1).Sort Key1:=ActiveCell

End Sub
Necdet hocam emeğinize sağlık. Bu da güzel kod.

Evet üst satır başlık. Ama istediğim seçili hücre gibi bir şart kesinlikle olmayacak.
Sadece butonla sıralayacağım.

Örnek
Buton 3’de kullanacaksam, buton3’ün kodundaki harfi C yapacağım,

Buton 5’de kullanacaksam, buton5’in kodundaki harfi E yapacağım,

Bu şekilde olacak değerli hocam.

Eklemeliyim; oluşturduğum dosayaları, farklı kişilere gönderiyorum. Bundan dolayı insiyatif bırakmamalıyım.
 

Necdet

Moderatör
Yönetici
Katılım
4 Haziran 2005
Mesajlar
15,353
Excel Vers. ve Dili
Ofis 365 Türkçe
Tamam anladım da, neden bir sürü butonla uğraşısanız ki?
Ben size pratik kod önerdim, Tek buton yaparsınız ve sadece activecell'e göre kod sıralama yapar.
Yoksa aynı veride çalışacak ve aynı işi yapacak bir sürü kodunuz olur,
Ha ben illa bu şekilde kullanmak istiyorum derseniz kodu kendinize göre zaten uyarlayabiliriniz. kod içindeki activecell olayını [A1], [C1] gibi değiştirebilirsiniz.
 

hakki83

Altın Üye
Katılım
30 Eylül 2021
Mesajlar
533
Excel Vers. ve Dili
Excel 2016 Türkçe 32 Bit
Altın Üyelik Bitiş Tarihi
30-09-2026
Ha ben illa bu şekilde kullanmak istiyorum derseniz kodu kendinize göre zaten uyarlayabiliriniz. kod içindeki activecell olayını [A1], [C1] gibi değiştirebilirsiniz.
Evet hocam, o şekilde kullanmam lazım.
Dediğiniz gibi A1 , C1 yazınca oluyorsa, olmuş demektir hocam.

Bilgisayara geçince hemen deneyeceğim.
Teşekkürler.
 

hakki83

Altın Üye
Katılım
30 Eylül 2021
Mesajlar
533
Excel Vers. ve Dili
Excel 2016 Türkçe 32 Bit
Altın Üyelik Bitiş Tarihi
30-09-2026
Necdet hocam merhaba, denemeler yaptım.

Şu soruyu yöneltmeye hazırlanıyordum;

"Kodda iki tane ActiveCell var, ikisini de [C1] yapıyor muyuz, yoksa sadece birisini yapsak yeterli oluyor mu"

diye soracaktım ki hocam. Fakat başka bir sorunla karşılaştım.

Sütunların alt tarafına veri ilave edince o satırı görmüyor hatta kod çalışmıyor ve hata veriyor hocam.

Galiba son hücreyi / satırı bulmuyor kod.
 

Ekli dosyalar

Necdet

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

Kodlardaki tüm activecell'leri Range("A1") olarak değiştirebilirsiniz. Gerekçesi boş bir hücrede kodları çalıştırırsanız
Set rng = ActiveCell.CurrentRegion ile tüm veri seçilmeyebilir.
 

hakki83

Altın Üye
Katılım
30 Eylül 2021
Mesajlar
533
Excel Vers. ve Dili
Excel 2016 Türkçe 32 Bit
Altın Üyelik Bitiş Tarihi
30-09-2026
Hocam dediğiniz gibi iki ActiveCell’i hücre ismiyle değiştirdim, fakat düzgün sıralama yapmıyor.

Hatam nerededir acaba?
 

Ekli dosyalar

Necdet

Moderatör
Yönetici
Katılım
4 Haziran 2005
Mesajlar
15,353
Excel Vers. ve Dili
Ofis 365 Türkçe
Hatanız yok, ta neden hatalı sıralama yapmadığını düşündünüz?

CurrentRegion ı kullanmak için her sütun için ayrı ayrı yazmanıza gerek yok.
hepsinde Range("A1") demeniz yeterli. (yani o bölge içinde herhangi bir hücre adresi yeterli) satır sayısı farklı olabileceği için başlığın ilk hücresini kullanmak avantajlı.

Kod:
Private Sub CommandButton1_Click()
Dim rng As Range
Set rng = [A1].CurrentRegion
rng.Offset(1).Sort Key1:=[A1]
End Sub

Private Sub CommandButton2_Click()
Dim rng As Range
Set rng = [A1].CurrentRegion
rng.Offset(1).Sort Key1:=[B1]
End Sub

Private Sub CommandButton3_Click()
Dim rng As Range
Set rng = [A1].CurrentRegion
rng.Offset(1).Sort Key1:=[C1]
End Sub
gibi.
 

hakki83

Altın Üye
Katılım
30 Eylül 2021
Mesajlar
533
Excel Vers. ve Dili
Excel 2016 Türkçe 32 Bit
Altın Üyelik Bitiş Tarihi
30-09-2026
Hocam örnek dosya3’de alttaki verileri sıralamaya dahil etmiyor.

A20
B21
C22 gibi
 

Necdet

Moderatör
Yönetici
Katılım
4 Haziran 2005
Mesajlar
15,353
Excel Vers. ve Dili
Ofis 365 Türkçe
onları sıralamaya almaması doğal, çünkü alanın dışında kalıyorlar.
Böyle bir veri nasıl olur anlamıyorum.

O zaman sayfada ne var ne yok herşeyi seçmek gerek. Bu durumda sıralamaya girmemesi gereken veriler de sıralamay girecektir.
Bu da sakat bir durum olur. Eğer örnek dosyanızda verilerin altında tek tük bilgi var ve başka da bilgi yoksa başka sütunlarda o zaman
aşağıdaki kodu kullanın.
CurrentRegion yerine Activesheet.UsedRange i deneyin

Kod:
Private Sub CommandButton1_Click()
Dim rng As Range
Set rng = ActiveSheet.UsedRange
rng.Offset(1).Sort Key1:=[A1]
End Sub
 
Son düzenleme:

hakki83

Altın Üye
Katılım
30 Eylül 2021
Mesajlar
533
Excel Vers. ve Dili
Excel 2016 Türkçe 32 Bit
Altın Üyelik Bitiş Tarihi
30-09-2026
Şimdi olmuştur Necdet hocam teşekkürler.

Öğrenmek için sormam gerekiyor
Dim rng As Range
satırının vazifesi nedir hocam?
 

Necdet

Moderatör
Yönetici
Katılım
4 Haziran 2005
Mesajlar
15,353
Excel Vers. ve Dili
Ofis 365 Türkçe
Bir grup hücre/hücreler demek
demek

Şimdi oldu diyorsunuz da, sıralamaya sokmak istemediğinz veriler olduğunda örneğin AB sütunundan başlayan ve sıralanması hiç gerekmeyen verilerde bu yöntemle sıralanır.

Böyle bir durumda kodların doğru çalışması için son çare sıralanacak veriyi önce seçip (ki bu durumda Set Rng = Selection) olmalıdır. Aklınızda bulunsun.
 
Son düzenleme:
Üst