Dizi kullanarak hücre içeriği arama

Muhammet Okumuş

Destek Ekibi
Destek Ekibi
Katılım
28 Eylül 2007
Mesajlar
4,025
Excel Vers. ve Dili
2013 Türkçe
Arkadaşlar merhaba;
Dizi yöntemi kullanarak hücre içeriği aramak istiyorum.

Sub Dizi_İle_Ara()
deg = Range("C1").Value
liste = Range("A1:A7").Value
ReDim tablo(1 To 7, 1 To 1)
For i = 1 To UBound(liste)
If WorksheetFunction.CountIf(liste(i, 1), "*" & deg & "*") > 0 Then
n = n + 1
tablo(n, 1) = liste(i, 1)
End If
Next
Range("D1").Resize(n, 1) = tablo


End Sub
Bu kod çalışmıyor.

Ama hücre değerlerini kullanarak verileri alabiliyorum.

Sub Dizisiz__Ara()
deg = Range("C1").Value

For i = 1 To 7
If WorksheetFunction.CountIf(Cells(i, 1), "*" & deg & "*") > 0 Then
n = n + 1
Cells(n, 2) = Cells(i, 1)
End If
Next

End Sub
İlk yazdığım kod gibi arama yapmak mümkün mü?
 

Ekli dosyalar

ÖmerBey

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2012
Mesajlar
4,405
Excel Vers. ve Dili
2007 Türkçe
Merhaba,
CountIf parametrelerine bakarsanız ilk alanın range olduğunu görürsünüz. Dizinin bir üyesi range olmadığı için hata oluşur. Countif yerine If liste(i, 1) Like "*" & deg & "*" Then kullanırsanız sonuç alabilirsiniz.
Alternatif olarak tek boyutlu dizilerde çalışan filter fonksiyonu da kulllanılabilir.
Rich (BB code):
Sub Dizi_İle_Ara()
deg = Range("C1").Value
ReDim liste(1 To 7)
For i = 1 To UBound(liste)
    liste(i) = Cells(i, 1)
Next
tablo = Filter(liste, deg)
Range("D1").Resize(UBound(tablo) + 1, 1) = Application.Transpose(tablo)
End Sub
 

Muhammet Okumuş

Destek Ekibi
Destek Ekibi
Katılım
28 Eylül 2007
Mesajlar
4,025
Excel Vers. ve Dili
2013 Türkçe
Ömer Bey, çok teşekkür ederim. Sayenizde kendimi geliştirme adına çok önemli bir bilgi daha öğrendim.
 

Muhammet Okumuş

Destek Ekibi
Destek Ekibi
Katılım
28 Eylül 2007
Mesajlar
4,025
Excel Vers. ve Dili
2013 Türkçe
Bu yöntemde büyük/küçük harf duyarlılığı var. Peki erik yazdığımızda hem erik hem de ERİK içeren değerleri nasıl alabiliriz?
 

veyselemre

Özel Üye
Katılım
9 Mart 2005
Mesajlar
3,653
Excel Vers. ve Dili
Pro Plus 2021
ı-I-i-İ haricinde çalışır. Malum ingilizce-türkçe uyumsuzluğu ( i => I ) ( İ , ı => ... )
Kod:
tablo = Filter(liste, deg, , vbTextCompare)
 

Muzaffer Ali

Destek Ekibi
Destek Ekibi
Katılım
5 Haziran 2006
Mesajlar
6,359
Excel Vers. ve Dili
2019 Türkçe
Bu yöntemde büyük/küçük harf duyarlılığı var. Peki erik yazdığımızda hem erik hem de ERİK içeren değerleri nasıl alabiliriz?
Kod sayfasının en üst satırına Option Compare Text yazarsanız büyük küçük harf duyarlılığı o kod sayfasının tamamında kaldırılmış olur.
 

Muhammet Okumuş

Destek Ekibi
Destek Ekibi
Katılım
28 Eylül 2007
Mesajlar
4,025
Excel Vers. ve Dili
2013 Türkçe
Küçük/büyük harf duyarlılığı kalktı. Tek sorun ı ile İ harfi kaldı.
 

Muzaffer Ali

Destek Ekibi
Destek Ekibi
Katılım
5 Haziran 2006
Mesajlar
6,359
Excel Vers. ve Dili
2019 Türkçe
Aşağıdaki kod ile büyük küçük i harfi sorunu da aşılmış olur.

Kod:
Sub Dizi_İle_Ara()
    deg = Range("C1").Value
    ReDim liste(1 To Cells(Rows.Count, "A").End(xlUp).Row)
    For i = 1 To UBound(liste)
        liste(i) = UCase(Replace(Replace(Cells(i, 1), "ı", "I"), "i", "İ"))
    Next
    tablo = Filter(liste, Replace(Replace(deg, "ı", "I"), "i", "İ"))
    Range("D1").Resize(UBound(tablo) + 1, 1) = Application.Transpose(tablo)
End Sub
 

veyselemre

Özel Üye
Katılım
9 Mart 2005
Mesajlar
3,653
Excel Vers. ve Dili
Pro Plus 2021
   

221802
Bu verilerle bir dener misiniz?

  
 

ÖmerBey

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2012
Mesajlar
4,405
Excel Vers. ve Dili
2007 Türkçe
Bu şekilde çalışacaksanız şahsi kanaatimce dizinin her elemanını kontrol ettirmek daha doğru olacaktır.
İlk kodlarınızı aşağıdaki şekilde güncelledim.
Rich (BB code):
Sub Dizi_İle_Ara()
deg = Range("C1").Value
liste = Range("A1:A7").Value
ReDim tablo(1 To 7, 1 To 1)
For i = 1 To UBound(liste)
If UCase(Replace(Replace(liste(i, 1), "ı", "I"), "i", "İ")) Like "*" & UCase(Replace(Replace(deg, "ı", "I"), "i", "İ")) & "*" Then
n = n + 1
tablo(n, 1) = liste(i, 1)
End If
Next
Range("D1").Resize(n, 1) = tablo
End Sub
Buna ilaveten filtre uygulayarak çözmek istiyorsanız excel sayfasında filtre uygulayıp (Çünkü sayfadaki filtre dilimize uygun şekilde çalışıyor) gözüken değerler diziye aldırılabilir.
 

Muhammet Okumuş

Destek Ekibi
Destek Ekibi
Katılım
28 Eylül 2007
Mesajlar
4,025
Excel Vers. ve Dili
2013 Türkçe
Filtreleme yöntemini biliyorum. Diziler daha hızlı çalıştığı için dizilerle çözüme gitmek istiyorum.
 

Muhammet Okumuş

Destek Ekibi
Destek Ekibi
Katılım
28 Eylül 2007
Mesajlar
4,025
Excel Vers. ve Dili
2013 Türkçe
Ömer Bey, son paylaştığınız kod çözüme ulaştırdı. Bir kez daha çok teşekkür ederim.
 

ÖmerBey

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2012
Mesajlar
4,405
Excel Vers. ve Dili
2007 Türkçe
Rica ederim Hocam, yardımcı olabildiysem ne mutlu.
İyi çalışmalar...
 
Üst