SAYFALARI SIRALAMA

Katılım
8 Haziran 2005
Mesajlar
114
Soru cevaplanmış, ancak birde ben göndersem zararı olmaz herhalde.
Kod:
Sub Bicim_SayfaDiz()
  Dim Sht1 As Worksheet, Sht2 As Worksheet
  For Each Sht1 In Worksheets
    For Each Sht2 In Worksheets
      If Sht1.Name > Sht2.Name Then Sht1.Move After:=Sht2
    Next Sht2
  Next Sht1
End Sub
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Bu arada, ben de konuya biraz daha devam etmek istedim ....

Excel VBA'de bu tip kodlamalarla yapılan sıralamalarda; sıralanacak veriler arasında Türkçe karakterler içerenler maalesef yanlış sıralanır.

Yukarıdaki mesajımda yer alan link ve VisualBasic tarafından önerilen kodlarda bu sorun vardır.

Böyle bir durumda, ben aşağıdaki metodu geliştirdim. Sıralanacak veriler "küçük harf" normunda artan sıraya göre dizilmektedir.

Her türlü olasılığı denemedim ama, doğru çalışıyor gibi geldi bana ...

[vb:1:601fee9502]Sub Test()
Dim ShArr() As String
Dim i As Integer
Dim MyWd As Object
ReDim ShArr(1 To Sheets.Count)
For i = 1 To Sheets.Count
ShArr(i) = LCase(Sheets(i).Name)
Next
Set MyWd = CreateObject("Word.Application")
MyWd.WordBasic.SortArray ShArr()
For i = UBound(ShArr) - 1 To 1 Step -1
Sheets(ShArr(i)).Move Before:=Sheets(ShArr(i + 1))
Next i
MyWd.Quit
Set MyWd = Nothing
Erase ShArr
End Sub
[/vb:1:601fee9502]
 
Katılım
8 Haziran 2005
Mesajlar
114
Dilerim bu fikir ayrılığı forumdaki diğer arkadaşlarımıza fayda sağlar.

Çözüm1 ve Çözüm2:

Kod:
Sub Bicim_SayfaDizKucuk()
  Dim Sht1 As Worksheet, Sht2 As Worksheet
  For Each Sht1 In Worksheets
    For Each Sht2 In Worksheets
      If KH(Sht1.Name) > KH(Sht2.Name) Then Sht1.Move After:=Sht2
    Next Sht2
  Next Sht1
End Sub

Sub Bicim_SayfaDizBuyuk()
  Dim Sht1 As Worksheet, Sht2 As Worksheet
  For Each Sht1 In Worksheets
    For Each Sht2 In Worksheets
      If BH(Sht1.Name) > BH(Sht2.Name) Then Sht1.Move After:=Sht2
    Next Sht2
  Next Sht1
End Sub

Function KH(veri)
  KH = Replace(veri, "İ", "i")
  KH = Replace(KH, "I", "i")
  KH = LCase(KH)
End Function

Function BH(cevir)
    BH = Replace(cevir, "i", "I")
    BH = Replace(BH, "ı", "I")
    BH = UCase(BH)
End Function
Çözüm3 ve Çözüm 4:

Kod:
Sub Bicim_SayfaDizB()
  Dim Sht1 As Worksheet, Sht2 As Worksheet
  For Each Sht1 In Worksheets
    For Each Sht2 In Worksheets
      Sht1.Name = BH(Sht1.Name)
      If Sht1.Name > Sht2.Name Then Sht1.Move After:=Sht2
    Next Sht2
  Next Sht1
End Sub

Function BH(cevir)
    BH = Replace(cevir, "i", "I")
    BH = Replace(BH, "ı", "I")
    BH = UCase(BH)
End Function

Sub Bicim_SayfaDizK()
  Dim Sht1 As Worksheet, Sht2 As Worksheet
  For Each Sht1 In Worksheets
    For Each Sht2 In Worksheets
      Sht1.Name = KH(Sht1.Name)
      If Sht1.Name > Sht2.Name Then Sht1.Move After:=Sht2
    Next Sht2
  Next Sht1
End Sub

Function KH(veri)
  KH = Replace(veri, "İ", "i")
  KH = Replace(KH, "I", "i")
  KH = LCase(KH)
End Function
Bu konuda yazılmış olan kodlarda bazı eksiklikler olduğu herkes tarafından uzun zamandan beri bilinen bir olaydır. Sorun Büyük İ harfi ile Küçük i harfinde yaşanmaktadır.
Sunulan çözümler genele hitap ettiğinden özel ihtiyaçlar karşısında eksikliklerinin olması normaldir.Yukarıda belirtilen hataların çözümü hiç de zor olmamasına rağmen aşağıda ki kodda "I,i" sorunu yaşandığı aşikardır.

Sn. Raider Demişki;

Her türlü olasılığı denemedim

Sub Test()
Dim ShArr() As String
Dim i As Integer
Dim MyWd As Object
ReDim ShArr(1 To Sheets.Count)
For i = 1 To Sheets.Count
ShArr(i) = LCase(Sheets(i).Name)
Next
Set MyWd = CreateObject("Word.Basic")
MyWd.SortArray ShArr()
For i = LBound(ShArr) - 1 To 1 Step -1
Sheets(ShArr(i)).Move Before:=Sheets(ShArr(i + 1))
Next i
Set MyWd = Nothing
End Sub
Yani Büyük Harf ile ISTANBUL, IÐDIR, INEGÃ?L, ISPARTA yazdığınızda sıralaması yanlış olacaktır.


Bu konuda onlarca çözüm sunmak mümkündür, cevap verilen arkadaşın sorununu belirtmesi yeterlidir. Ã?nemli olan soru soran arkadaşlarımızın, vermiş olduğum cevaplarla kendilerine bir çözüm veya çıkış yolu üretebilmeleridir.
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
VisualBasic' Alıntı:
Yani Büyük Harf ile ISTANBUL, IÐDIR, INEGÃ?L, ISPARTA yazdığınızda sıralaması yanlış olacaktır.

Merhaba;

Bahsettiğiniz sayfa adlarından oluşan bir dosya yaptım ve yukarıda önerdiğim kendi kodumla sıralama şöyle çıktı.

IÐDIR - INEGOL - ISPARTA - ISTANBUL

Daha sonra, sayfa isimlerinde INEGOL yerine İNEGÃ?L kullandım. Bu kez çıkan sıralama da şöyle oldu;

IÐDIR - ISPARTA - ISTANBUL - İNEGÃ?L

Þimdi bu noktada, Türkçe bilgimin iyi olmadığını da malesef belirterek, diyorum ki;

Çıkan bu sonuçlar, bana göre doğrudur. Sizce yanlış olan nedir acaba ?
 
Katılım
8 Haziran 2005
Mesajlar
114
Raider' Alıntı:
Excel VBA'de bu tip kodlamalarla yapılan sıralamalarda; sıralanacak veriler arasında Türkçe karakterler içerenler maalesef yanlış sıralanır.
Yukarıdaki mesajımda yer alan link ve VisualBasictarafından önerilen kodlarda bu sorun vardır
Sizin yada Visual Basic'in yazdığı kodlardan hangisinin doğru olduğunun bu denli önem taşımaması gerekir diye düşünüyorum.

Ã?nemli olan soru soran arkadaşımızın çözüme ulaşmasıdır.

Ancak ekte sunulan dosyaları incelemenizi öneririm.

Sanki olayda polemik var gibi geldi bana. :?

Kodlarınız 9 nolu hatayı verdi, bu siz hata yapıyorsunuz manasında değil, ancak hatayı bulduğunuzda, düzeltmenin hata içermemesi gerekir
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Tekrar merhaba;

Sanıyorum gözden kaçırdığınız bir konu var o da şu;

Ben kendi kodumda, sayfa isimlerini küçükten büyüğe veya büyükten küçüğe çevirmiyorum. Ama sizin kodlamanızda, böyle bir durum söz konusu. Belki bu nedenle kodlarımız arasında fark olabilir.

Konunun dışında ama ikinci bir husus ise (lütfen bunu polemil gibi algılamayın, sadece merak ettiğim için...); mesajlarınızda Sn. VisualBasic' den bahsederken sanki o, siz değilmişiniz gibi bahsediyorsunuz. Daha önceki bir mesajınızda da dikkatimi çekti bu konu. Belki sizin yazım tarzınız böyledir, bilemiyorum.

Son olarak da;

VisualBasic' Alıntı:
Sanki olayda polemik var gibi geldi bana. :?
Kesinlikle polemik yapmak gibi bir niyetim yoktu, buna emin olabilirsiniz.

Sadece daha önceki mesajınızda, kodumu alıntı yaptıktan sonra altına yazdığınız :

VisualBasic' Alıntı:
Yani Büyük Harf ile ISTANBUL, IÐDIR, INEGÃ?L, ISPARTA yazdığınızda sıralaması yanlış olacaktır.
ifadesi, benim kodumun yanlış sonuç verdiği imajını uyandırdığı için ben de durumun böyle olmadığını, verdiğiniz örnek sayfa isimleriyle kodun doğru çalıştığını anlatmak istedim.

Olay bundan ibarettir ve tekrar ediyorum ki polemik yapmak gibi bir niyetim olmamıştır.

İyi akşamlar.

İlave:
Ben mesajımı yazdıktan sonra gördüm ki, mesajınızdaki alıntıda bir bölümü büyük puntolarla, kırmızı renkte biçimlendirmişiniz. Bunda bir ima varsa, peşinen belirteyim ki; mesajımda adınızdan (nick'inizden) bahsederek herhangibir şekilde sizi karalamak amacını gütmedim. Bunu bilmenizi isterim.
 
Katılım
8 Haziran 2005
Mesajlar
114
Sayın Raider demiş ki; Tekrar merhaba
-Merhaba Sayın Raider.

Sayın Raider demiş ki: Sanıyorum gözden kaçırdığınız bir konu var o da şu;

Ben kendi kodumda, sayfa isimlerini küçükten büyüğe veya büyükten küçüğe çevirmiyorum. Ama sizin kodlamanızda, böyle bir durum söz konusu. Belki bu nedenle kodlarımız arasında fark olabilir.

- Evet fark bu, ancak çözümler o kadar çok ki, yalnız bazı çözümler bir şeylerden feadakarlık gerektiriyor. Harflerin küçük ise büyük olması gibi. Biraz daha düşünülse aynen istenilen çözüm de sunulabilir.

Sayın Raider demiş ki: Konunun dışında ama ikinci bir husus ise (lütfen bunu polemik gibi algılamayın, sadece merak ettiğim için...); mesajlarınızda Sn. VisualBasic' den bahsederken sanki o, siz değilmişiniz gibi bahsediyorsunuz. Daha önceki bir mesajınızda da dikkatimi çekti bu konu. Belki sizin yazım tarzınız böyledir, bilemiyorum.

- Kendimi ifade ederken kibirli bir tavır takınmaktan çekiniyorum, (Tümü şahsım adınadır, konu dışına tşarsam affola) bizlere kibir yakışmaz, Exceli yada kodları biz yaratmadık, bu yüzden böbürlenmek yakışık almaz. Kibir sadece Rabbimize mahsus olabilir. O yüzden böyle bir yol izlemenin uygun olacağı kanaatine vardım.

Sayın Raider demiş ki:
Son olarak da;
VisualBasic' Alıntı:
Sanki olayda polemik var gibi geldi bana. :?
Kesinlikle polemik yapmak gibi bir niyetim yoktu, buna emin olabilirsiniz.

Sadece daha önceki mesajınızda, kodumu alıntı yaptıktan sonra altına yazdığınız :

VisualBasic' Alıntı:
Yani Büyük Harf ile ISTANBUL, IÐDIR, INEGÃ?L, ISPARTA yazdığınızda sıralaması yanlış olacaktır.
ifadesi, benim kodumun yanlış sonuç verdiği imajını uyandırdığı için ben de durumun böyle olmadığını, verdiğiniz örnek sayfa isimleriyle kodun doğru çalıştığını anlatmak istedim.

Olay bundan ibarettir ve tekrar ediyorum ki polemik yapmak gibi bir niyetim olmamıştır.

- Bende aynı fikirdeydim ancak, birkaç cümle bir acaba uyandırdı bende, bazen bazı konnularda tartışabiliriz, bu forumdakiler ve kend adımıza yeni bir şeyler öğrendiğimizin habercisi olmalıdır. Kimseyle şahsi bir sorunum yoktur. En doğrusunun bulunması hedefindeyim. Herkes hata yapabilir, bu hatayı kimin yaptığının bir önemi yoktur. Sonuç doğru ise, doğru yola ulaşıldı ise bu herkes için fayda sağlayacaktır.

İyi akşamlar, diliyorum
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
VisualBasic' Alıntı:
- Bende aynı fikirdeydim ancak, birkaç cümle bir acaba uyandırdı bende ...
Kesinlikle içinizde "acaba ??" diye bir düşünce olmasın, çünkü yukarıda yazdığım mesajlarımın içeriği tümüyle Excel ile ilgilidir ve ne kişiliğinize, ne de bilginize karşı herhangibir olumsuz düşünce gözetilmeden yazmışımdır.

Bana göre, bu kodlardan bir sürü insan faydalanacaktır ..... iyi bir şey yapıldığına inanıyorum.

Tekrar, iyi akşamlar.
 
Üst