• DİKKAT

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

Dizi kullanarak hücre içeriği arama

Muhammet Okumuş

Destek Ekibi
Destek Ekibi
Katılım
28 Eylül 2007
Mesajlar
4,042
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

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
 
Ömer Bey, çok teşekkür ederim. Sayenizde kendimi geliştirme adına çok önemli bir bilgi daha öğrendim.
 
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?
 
ı-I-i-İ haricinde çalışır. Malum ingilizce-türkçe uyumsuzluğu ( i => I ) ( İ , ı => ... )
Kod:
tablo = Filter(liste, deg, , vbTextCompare)
 
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.
 
Küçük/büyük harf duyarlılığı kalktı. Tek sorun ı ile İ harfi kaldı.
 
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
 
[TR][TD]

[/TD]
[TD]

[/TD]
[TD]

[/TD][/TR]
[TR][TD]
221802
Bu verilerle bir dener misiniz?
[/TD][TD]

[/TD]
[TD]

[/TD][/TR]
 
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.
 
Filtreleme yöntemini biliyorum. Diziler daha hızlı çalıştığı için dizilerle çözüme gitmek istiyorum.
 
Ömer Bey, son paylaştığınız kod çözüme ulaştırdı. Bir kez daha çok teşekkür ederim.
 
Rica ederim Hocam, yardımcı olabildiysem ne mutlu.
İyi çalışmalar...
 
Geri
Üst