• DİKKAT

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

Filtreleme değerlerinin hücreden alınması

Katılım
6 Temmuz 2008
Mesajlar
1,875
Excel Vers. ve Dili
OFFİCE 2010- TÜRKÇE
Kod:
ActiveSheet.Range("$A$1:$AI$186").AutoFilter Field:=1, Criteria1:=Array( _
        "71", "72", "73", "74", "75", "76"), Operator:=xlFilterValues

Bu kodlamayı sütundan veri alacak şekilde düzenleyebilirmiyiz?

"71", "72", "73", "74", "75", "76"
verilerinin A sütunundan alınmasını sağlamak için ne yapmalıyım?

Gelişmiş filtre olmadan...
 
Basit örnek bir dosya ekleyiniz.
 
Merhaba.

Anladığım kadarıyla belli sayı aralığını filtrelemek istiyorsunuz.

Aşağıdaki kod sanırım işinizi görecektir.
Filtrelemek istediğiniz;
--alt sınır (bu sayı dahil olacak) sayısını AJ1 hücresine,
--üst sınır (bu sayı dahil olacak) sayısını AK1 hücresine
yazıp kod'u çalıştırın.
.
Kod:
[FONT="Arial Narrow"]Sub FİLTRE()
[B][COLOR="blue"]altsınır[/COLOR][/B] = ActiveSheet.[COLOR="blue"][B]Cells(1, "AJ")[/B][/COLOR]: [B][COLOR="red"]üstsınır[/COLOR][/B] = ActiveSheet.[COLOR="Red"][B]Cells(1, "AK")[/B][/COLOR]
ActiveSheet.Range("$A$1:$AI$186").AutoFilter Field:=1, Criteria1:=">=" & [COLOR="Blue"][B]altsınır[/B][/COLOR], Operator:=xlAnd, Criteria2:="<=" & [B][COLOR="Red"]üstsınır[/COLOR][/B]
End Sub[/FONT]
 
Necdet hocam sizi gördüğüme sevindim :)
Ekli dosya ekte.

Ömer bey cevabınız için teşekkürler. Fakat filtre sadece sayı olmayabiliyor.
Yani A sütunu da olabilir B sütunuda ....
Bir nebze gelişmiş filtre yapmaya calışıyorum fakat bu şekilde daha sağlıklı olacak gibi.

Eğer oradaki array aralığını sayfa2deki ilgili sütundan çekebilirsem istediğime ulaşacağımı sanıyorum :)
 

Ekli dosyalar

Tekrar merhaba.

Ben olsam Sayfa2'deki değerlere atıf yapmak üzere,
Sayfa1'de en sağdaki uygun boş sütuna (mevcut örneğe göre I2 hücresine) aşağıdaki formülü uygulayıp liste boyunca kopyalar ve
bu sütundaki kritere göre de İNDİS formülünü kullanarak verileri listelerdim.

Filtre tek sütunda değil de bir'den fazla sütunda uygulanacaksa da,
aşağıdaki formülde EĞERSAY yerine TOPLA.ÇARPIM işlevini kullanılabilir.
.
Kod:
=EĞER(EĞERSAY(Sayfa2!$A$1:$A$7;$A2)>0;MAK($I$1:I1)+1;"")
 
Son düzenleme:
Örnek biraz küçültülmüş dosya.
Normalde 30 sütun ve 1000lerce sütun var.

Ve ben kodile misal 3. sütunu sectim oradaki verilerden birkaç tane secip sayfa2nin ilgili sütununa attım. sonrasında sayfa1 o sütundaki değerlere göre yeniden filtrelenmesi gerek.

İşlem bitene kadar bu şekilde filtrelenip duracak.
Eğer array dizisini dediğim gibi sayfa2den alabilir ve filtre uygulatabilirsem.
Sanırım isrtediğim olacak.
 
Kod:
Sub Dizim()
Dim Tablo, Satir, Sutun As Integer
Dim Dizi(3, 30, 10)
For Tablo = 1 To 3
    For Satir = 1 To 30
        For Sutun = 1 To 10
            Dizi(Tablo, Satir, Sutun) = Worksheets(Tablo).Cells(Satir, Sutun).Value
        Next Sutun
    Next Satir
Next Tablo
MsgBox Dizi(2, 2, 2)
End Sub

Bu kodu
Kod:
Sub Dizim()
Dizi = Array("70", "71")

ActiveSheet.Range("$A$1:$AI$186").AutoFilter Field:=1, Criteria1:=Dizi, Operator:=xlFilterValues

End Sub
Buna uyarlayabilirsem olur gibi :)
 
Merhaba.

Birazdan bilgisayar başında kalkmam gerek.
Aşağıdaki kod'u dener misiniz?

Koşul:
-- Filtrelenecek veriler Sayfa1'dedir,
-- Kriterlerin yazıldığı Sayfa2'deki listeler 1'inci satırdan başlayarak boşluksuk yazılmıştır.
.
Kod:
[FONT="Arial Narrow"]Sub FİLTRE()
Set S1 = Sheets("Sayfa1"): Set S2 = Sheets("Sayfa2")
S1.Rows.EntireRow.Hidden = False
For sütun = 1 To 30
        If S2.Cells(1, sütun) = "" Then GoTo 20
    For satır = 2 To S1.Cells(65536, sütun).End(3).Row
        If S1.Rows(satır & ":" & satır).EntireRow.Hidden = True Then GoTo 20
        If WorksheetFunction.CountIf(S2.Range(S2.Cells(1, sütun), S2.Cells(65536, sütun)), S1.Cells(satır, sütun)) = 0 Then _
        S1.Rows(satır & ":" & satır).EntireRow.Hidden = True
20:    Next
10: Next
MsgBox "FİLTRE TAMAM"
End Sub[/FONT]
 
Sanırım oldu denemeye devam edeceğim.
Fakat döngüsel kod satır sayısı cok olduğunda kasmalara sebep olabilir mi?
 
Teşekkürler.
Peki neden satırları diziye alamıyoruz.
 
Kod:
Option Base 1
Sub Filtre2()
  Dim son As String
son = Sayfa2.Cells(Rows.Count, 1).End(3).Row

    Dim dizi(1 To [COLOR="Red"]50[/COLOR]) As String
For sat = 1 To son
    dizi(sat) = Sayfa2.Cells(sat, 1)
    Next
   
ActiveSheet.Range("$A$1:$AI$65536").AutoFilter Field:=1, Criteria1:=(dizi), Operator:=xlFilterValues
    

End Sub

Biraz uğraştan sonra sanırım dizi ile yapmayı da başardım.
Bu şekilde dizi ile filtreleme yapabiliyorum.

Fakat kodlardaki dizi üst sınırı bir değişkeen atayamadım " 50 ".
Misal bunu sayfa2.son satırı yapmayı denedim .
Hata verdi.
Kod:
son = Sayfa2.Cells(Rows.Count, 1).End(3).Row
 
Merhaba,

Kodlarınızı düzenledim, deneyiniz.

Kod:
Option Base 1

Sub Filtre2()

    Dim son As Integer
    Dim Sat As Long
    
    son = Sayfa2.Cells(Rows.Count, 1).End(3).Row

    ReDim dizi(son) As String
    For Sat = 1 To son
        dizi(Sat) = Sayfa2.Cells(Sat, 1)
    Next
   
    ActiveSheet.Range("$A$1:$AI$65536").AutoFilter Field:=1, Criteria1:=dizi, Operator:=xlFilterValues
    
End Sub
 
Merhaba,

Kodlarınızı düzenledim, deneyiniz.

Kod:
Option Base 1

Sub Filtre2()

    Dim son As Integer
    Dim Sat As Long
    
    son = Sayfa2.Cells(Rows.Count, 1).End(3).Row

    ReDim dizi(son) As String
    For Sat = 1 To son
        dizi(Sat) = Sayfa2.Cells(Sat, 1)
    Next
   
    ActiveSheet.Range("$A$1:$AI$65536").AutoFilter Field:=1, Criteria1:=dizi, Operator:=xlFilterValues
    
End Sub


Teşekkürler Necdet bey ,
İyi oldu bu bilgi...
 
Geri
Üst