• DİKKAT

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

Ardışık En Fazla Tekrarlanan Harf Grubu

  • Konbuyu başlatan Konbuyu başlatan bzace
  • Başlangıç tarihi Başlangıç tarihi
Katılım
23 Eylül 2013
Mesajlar
1,348
Excel Vers. ve Dili
Excel 2007 İngilizce -
Excel 2010 Türkçe -
Excel 2013 Türkçe -
Merhabalar,
Zaman zaman kendimi geliştirmek için farklı yollar arayışı içinde oluyorum.
http://www.excel.web.tr/f14/excel-ardy-yk-t156361.html bu konuda soru soran Sn. zdckl'ın sorusunu biraz daha ileri götürerek söyle bir soru yöneltmek istiyorum.
Ben zaman zaman düşündüm ama şimdilik cevap bulamadım.

Soru : İstediğimiz harf grubunun en fazla tekrar sayısını bulmak.
Harf grubu : A B C D E (hepsi ayrı ayrı düşününülmesi gerekir)
Hücre içerisindeki karışık harf grupları;
  • ABTUCDE - sonuç : 3
  • ZZZIHABCDKGF - sonuç : 4
  • ABCDEKKKKKLLLLLABCDEEEE - sonuç : 8
Anlaşılmayan bir yer olursa biraz daha örnek yada açıklama yazabilirim.

Not: Önceliğimiz formüller ile yapmaktır.
Saygılar,
 
Harfleri arasında Türkçe karakter olacak mı? Ü, İ, Ğ gibi
 
Tabi klavyede gördüğünüz her harf olabilir.
 
Sayın bzace
Formülle biraz zor görünüyor bana. Harfler sadece İngilizce ve büyük harflerden oluşuyorsa aşağıdaki fonksiyon sonuç verir. Eğer Türkçe karakter, küçük harf, sayı ve başka karakterlerde olacaksa başka çareler düşünmek lazım (Asc numaraları yerine her karakter için ardışık yeni numaralar tanımlamak gibi)
Kod:
Function ardışık(harfler)
say = 1
For i = 2 To Len(harfler)
If Asc(Mid(harfler, i, 1)) = Asc(Mid(harfler, i - 1, 1)) Or Asc(Mid(harfler, i, 1)) = Asc(Mid(harfler, i - 1, 1)) + 1 Then
say = say + 1
X = X & "#" & say
Else
say = 1
X = X & "#" & say
End If
Next
qq = Mid(X, 2)
Q = Split(qq, "#")
ardı = 0
For e = 0 To UBound(Q)
If ardı < Q(e) * 1 Then
ardı = Q(e) * 1
Else
ardı = ardı
End If
Next
ardışık = ardı
End Function
 
Son düzenleme:
Ali Bey, teşekkürler.
Şimdilik amacımız ilk olarak sadece büyük harf olsun. Bu sorunu aşarsak sayı , karakter yada küçük harf olayını eminimki hallederiz.

İşlerden dolayı pek zamanım yok, zaman ayırabildiğim zaman üzerine biraz daha düşeceğim.

Saygılar,
 
Yukardaki kodları düzelttim.
Kurduğunuz mantığa göre 3. Örnekteki sonuç 10 olması gerekiyor.
ABCDEKKKKKLLLLLABCDEEEE
 
Sonucun on çıkmaması lazım. Siz K ve L harflerini sayıyorsunuz değil mi ?
Bizim istediğimiz;
Harf grubu : A B C D E (hepsi ayrı ayrı düşününülmesi gerekir)
metin içerisinde bu harflerden herhangi biride olabilir hepside olabilir.

Farklı bir örnek vereyim.
AGGHJUBBBORUEDDDDDC - sonuç : 7
 
Son düzenleme:
Sayın bzace
Herhalde aşağıdaki kodlar istediğiniz sonucu verir
Kod:
Function ardışık(harfler)
say = 0
For i = 1 To Len(harfler)
If Asc(Mid(harfler, i, 1)) > 64 And 70 > Asc(Mid(harfler, i, 1)) Then
say = say + 1

X = X & "#" & say
Else
say = 0
X = X & "#" & say
End If
Next
qq = Mid(X, 2)
Q = Split(qq, "#")
ardı = 0
For e = 0 To UBound(Q)
If ardı < Q(e) * 1 Then
ardı = Q(e) * 1
Else
ardı = ardı
End If
Next
ardışık = ardı
End Function
 
Ali Bey,
Öncelikle teşekkürler.Bu kalıp uygun sonuçları döndürüyor.
Bu sadece bir örnekti verdiğiniz örneği biraz daha esnek hale getirmek gerekir.

Harf grubunu A G Z R L olduğunu düşünürsek (yada farklı harfler) sürekli oynama yapmak gerekebilir.
Son olarak verdiğiniz KTF'nin kullanımını yazarsanız merak eden kişiler denemiş olur.
 
Sayın bzace
:) Baştan soruyu öyle sorsaydın keşke.
Dediğiniz de elbette yapıla bilinir ama siz en iyisi konuyu kafanızda sonuçlandırın. Bir defada çözelim.
 
Soruyu anlaşılması kolay olsun diye öyle sormuştum. Sadece iki yada üç harf olacak ve bunlar sabit ise sorun daha kolay olacaktır.

Bu gibi durumlar için her zaman olasılıklar vardır. ;) Bu soru dediğim gibi kendimi geliştirmek için aklıma gelen bir düşüncedir. Sn. zdckl'nın sorusuna tekrar baktığımda aklıma gelmişti.

Bu iş formüller ile oldukça basit olduğunu düşünüyorum ama mantığı kuramadım.
Bu arada affınıza sığınarak KTF'nin kullanılışı;
Kod:
=ardışık(A1)

İyi geceler;)
 
Sayın bzace
Harf grubunu da değişkene atadım.
Kod:
Function ardışık(harfler, aranacak)
say = 0
For i = 1 To Len(harfler)
If InStr(aranacak, Mid(harfler, i, 1)) > 0 Then
say = say + 1
X = X & "#" & say
Else
say = 0
X = X & "#" & say
End If
Next
qq = Mid(X, 2)
Q = Split(qq, "#")
ardı = 0
For e = 0 To UBound(Q)
If ardı < Q(e) * 1 Then
ardı = Q(e) * 1
Else
ardı = ardı
End If
Next
ardışık = ardı
End Function
 
Ali Bey,
E2 hücresine yazmış olduğunu ABCDEKKKKKLLLLLABCDEEEE verisini değiştirerek dener misiniz?
ABCDEKKKKKLLLLLABBCDEEEE yada ABCDEKKKKKLLLLLABYCDEEEE ilave yerler kırmızı alanlardır.
 
Sayın bzace
ABCDEKKKKKLLLLLABYCDEEEE için 6 diğer örnek ise 9 değerini veriyor.
Not; A2deki formülü boş hücre çıkana kadar aşağı doğru kopyalayın. diğer sütunlara da aynısını uygulayın Eğer kısa bir harf dizisi girerseniz A sütununda formüllü ama boş satırları silin.
Yada
C3 hücresindeki formülü aşağıdaki gibi değiştirin.
Kod:
=EĞER(A3="";"";EĞER(B2=1;C2+B3;0))
 
Son düzenleme:
Dikkatsizliğim için kusura bakmayın.
İstediğimizi tam yapacak formülü oluşturduk. (tüm kontrolleri yapamadım)
Küçük büyük harfe karşı duyarlıdır.
Kod:
=MAK(SIKLIK(SATIR(1:38);
  EHATA(MBUL(PARÇAAL(A1&YİNELE(1;38);
    SATIR(1:38);1);"ABCDE"))*SATIR(1:38))-1)
[COLOR="Blue"]Formül dizi formülüdür.CTRL+SHIFT+ENTER ile tamamlayınız.[/COLOR]

Not: Metin uzunluğuna göre 38 sayısını çoğaltınız.
 
Son düzenleme:
Sayın bzace
Harika olmuş bende bir şeyler öğrenmiş oldum. 38 sayısı Metin Uzunluğundan büyük herhangi bir sayı oluyor herhalde.
 
Ali Bey,
Benim için 38 sayısı Kayseri'yi temsil ediyor. Excel için hücre içerisindeki karakter sayısını temsil ediyor.
 
Karakter sayısı ile eşit olursa 1 eksik sonuç veriyor, en az 1 fazla olunca doğru sonuç veriyor.
 
Geri
Üst