Aynı hücredeki tekrarlı kelimeleri boyama

Katılım
2 Mayıs 2021
Mesajlar
56
Excel Vers. ve Dili
Excel 2016 - TR
Altın Üyelik Bitiş Tarihi
06-07-2023
Arkadaşlar merhaba, elimde 1 yıldan fazla bir süredir kullandığım bir makro var. Ama çok ağır çalışıyor. A sütununda binlerce satır veri var ve makro her bir hücrede aynı kelime iki veya daha fazla geçiyorsa ilgili satırı sarı renge boyuyor.

Örneğin;

ABC Döner Kartal, Kartal, İstanbul
Ali Motor Defne, Hatay
Akyüz Deneme, DENEME
...

1. ve 3. satırda aynı kelimeden geçtiği için 1. ve 3. satırı sarı renge boyuyor.

Şu an kullandığım dosya ektedir. En az 10 binlerce satır veri ile uğraşıyorum. Eğer çok daha hızlısı yapılabilirse çok memnun olacağım. Ayrıca işlem devam ederken ProgressBar ile işlemin % kaçının yapıldığını da görebilirsem mükemmel olacaktır. Teşekkür ederim.
 

Ekli dosyalar

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
C#:
Sub Test()
    Dim i As Integer, NoA As Integer, myArr() As String, iCount As Integer
    
    NoA = Range("A" & Rows.Count).End(xlUp).Row
    Range("A1:A" & NoA).Interior.ColorIndex = 0
    
    For i = 1 To NoA
        myStr = LCase(Replace(Replace(Range("A" & i), ",", ""), ".", ""))
        myArr = Split(myStr)
        sCount = 0
        
        For x = LBound(myArr) To UBound(myArr)
            iCount = UBound(Split(myStr, myArr(x))) + 1
            If iCount > 2 Then
                Range("A" & i).Interior.ColorIndex = 6
                Exit For
            End If
        Next
    Next
End Sub
.
 
Katılım
2 Mayıs 2021
Mesajlar
56
Excel Vers. ve Dili
Excel 2016 - TR
Altın Üyelik Bitiş Tarihi
06-07-2023
C#:
Sub Test()
    Dim i As Integer, NoA As Integer, myArr() As String, iCount As Integer
   
    NoA = Range("A" & Rows.Count).End(xlUp).Row
    Range("A1:A" & NoA).Interior.ColorIndex = 0
   
    For i = 1 To NoA
        myStr = LCase(Replace(Replace(Range("A" & i), ",", ""), ".", ""))
        myArr = Split(myStr)
        sCount = 0
       
        For x = LBound(myArr) To UBound(myArr)
            iCount = UBound(Split(myStr, myArr(x))) + 1
            If iCount > 2 Then
                Range("A" & i).Interior.ColorIndex = 6
                Exit For
            End If
        Next
    Next
End Sub
.

Hocam kodu ekledim bazı satırları sarıya boyadı ama boyadığı satırlarda tekrarlı kelimeler maalesef yok. Ama çok hızlı çalıştı. Ben test datasını içeren dosyayı ekledim. Bakma şansınız var mıdır?
 

Ekli dosyalar

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
C#:
Sub Test()
    Dim i As Long, NoA As Long, myArr() As String, x As Integer, iCount As Long, xWord As Variant
    
    NoA = Range("A" & Rows.Count).End(xlUp).Row
    Range("A1:A" & NoA).Interior.ColorIndex = 0
    
    For i = 1 To NoA
        myStr = LCase(Replace(Replace(Range("A" & i), ",", ""), ".", ""))
        myArr = Split(myStr)
        
        For x = LBound(myArr) To UBound(myArr)
            iCount = 0
            For Each xWord In myArr
                If xWord = myArr(x) Then
                    iCount = iCount + 1
                    If iCount >= 2 Then
                        Range("A" & i).Interior.ColorIndex = 6
                        Exit For
                    End If
                End If
            Next
        Next
    Next
End Sub
.
 
Katılım
2 Mayıs 2021
Mesajlar
56
Excel Vers. ve Dili
Excel 2016 - TR
Altın Üyelik Bitiş Tarihi
06-07-2023
C#:
Sub Test()
    Dim i As Long, NoA As Long, myArr() As String, x As Integer, iCount As Long, xWord As Variant
   
    NoA = Range("A" & Rows.Count).End(xlUp).Row
    Range("A1:A" & NoA).Interior.ColorIndex = 0
   
    For i = 1 To NoA
        myStr = LCase(Replace(Replace(Range("A" & i), ",", ""), ".", ""))
        myArr = Split(myStr)
       
        For x = LBound(myArr) To UBound(myArr)
            iCount = 0
            For Each xWord In myArr
                If xWord = myArr(x) Then
                    iCount = iCount + 1
                    If iCount >= 2 Then
                        Range("A" & i).Interior.ColorIndex = 6
                        Exit For
                    End If
                End If
            Next
        Next
    Next
End Sub
.

Haluk Bey çok teşekkürler kod çalışıyor ve inanılmaz hızlı. 10 bin veriyi 2 saniye de analiz etti :) Bu kadarını da beklemiyordum açıkçası. Hocam testimi yaptım. Türkçe büyük karakterlerde tekrarlı kelimeleri bulamadı.

Örneğin;

ABC Döner Şanlıurfa, ŞANLIURFA
Deneme Firması pendik, PENDİK

Galiba küçük ı ile büyük I aynı satırda olunca bulamıyor. Ayrıca şanlıurfa şeklinde yazarsam buluyor.
Deneme Firması pendik, PENDİK ise bu şekilde sarıya boyamadı. İ den dolayı olsa gerek. Kontrol edebilmeniz mümkün müdür acaba? Teşekkürler
 

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
Yarin bir ara bakarim...

.
 

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
Aşağıdaki satırı;
C#:
        myStr = LCase(Replace(Replace(Range("A" & i), ",", ""), ".", ""))


bununla değiştirin;
C#:
        myStr = LCase(Replace(Replace(Replace(Replace(Range("A" & i), "ı", "I"), "İ", "i"), ",", ""), ".", ""))
.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,253
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Merhaba,

Benzer bir soruyu cevapladığımı hatırlıyordum. Aradım buldum. Yine siz sormuşsunuz.

 
Katılım
2 Mayıs 2021
Mesajlar
56
Excel Vers. ve Dili
Excel 2016 - TR
Altın Üyelik Bitiş Tarihi
06-07-2023
Aşağıdaki satırı;
C#:
        myStr = LCase(Replace(Replace(Range("A" & i), ",", ""), ".", ""))


bununla değiştirin;
C#:
        myStr = LCase(Replace(Replace(Replace(Replace(Range("A" & i), "ı", "I"), "İ", "i"), ",", ""), ".", ""))
.

Haluk Bey çok teşekkür ederim. Sorun düzeldi. Hocam son olarak bayağı bir veride denedim. Satırda iki adet & veya / gibi özel karakterler geçiyorsa o satırı da boyuyor. Bu tarz özel karakterleri devre dışı bırakmak için hangi kodu eklemeliyim.
 
Katılım
2 Mayıs 2021
Mesajlar
56
Excel Vers. ve Dili
Excel 2016 - TR
Altın Üyelik Bitiş Tarihi
06-07-2023
Merhaba,

Benzer bir soruyu cevapladığımı hatırlıyordum. Aradım buldum. Yine siz sormuşsunuz.

Merhaba Korhan Bey, evet geçen sene böyle bir soru sordum ama sizin mesajınızı görmemiştim. Sizden önce yazan arkadaşın kodunu kullanıyordum yaklaşık 60k veriyi kontrol etmesi 10 saatten fazla sürüyordu. Sizin kodunuzu görmediğim için deneme imkanım olmadı. Çok teşekkür ederim.
 

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
Hücrede 2 aynı tek karakter varsa, eşleştirme olmadığını Excel'e tarif etmek için, aşağıdaki satırı;
C#:
                If xWord = myArr(x) Then

bununla değiştirin;
Kod:
                If xWord = myArr(x) And Len(xWord) > 1 Then
.
 
Katılım
27 Haziran 2010
Mesajlar
394
Excel Vers. ve Dili
Türkçe 2010 Ofis
Korhan abinin verdiği linkte verdiği çözüme aynı anda teşekkür etmişsiniz, cevabı görmemiş olmanız olanaklı değil, sanırım gözden kaçtı.
 
Katılım
2 Mayıs 2021
Mesajlar
56
Excel Vers. ve Dili
Excel 2016 - TR
Altın Üyelik Bitiş Tarihi
06-07-2023
Hücrede 2 aynı tek karakter varsa, eşleştirme olmadığını Excel'e tarif etmek için, aşağıdaki satırı;
C#:
                If xWord = myArr(x) Then

bununla değiştirin;
Kod:
                If xWord = myArr(x) And Len(xWord) > 1 Then
.
Hocam çok teşekkürler. Elinize sağlık deneyip haber vereceğim.
 
Üst