Kapat

Excel Sayfada Textbox İle AutoFilter Kullanımı

excel autofilter with textbox

Özellikle büyük hacimli veri tabanlarında,Excel sayfalarında textbox kontrol kullanarak sayfa içinde arama yapılarak(Excel VBA AutoFilter ve Find metodu) hızlı sonuçlar alınabilir. Örnek olarak Excel’de posta kodlarını içeren sayfayı seçtik. Sayfada 56766 satır bulunmaktadır .

Sayfada F,I ve J sütunlarının başına birer textbox ekledik. Bunun için Excel sayfasının üst kısımda bulunan menülerden ;Geliştirici menüsü Ekle ,ActiveX denetimleri Metin Kutusu’nu seçerek sayfaya ekledik.

Daha sonra bu VBA textbox(metin kutusu) öğelerine çift tıklayarak açılan VBA penceresinde textbox kontrolllerinin TextBox1_Change() prosedürlerine kodlarımızı ekledik : excel autofilter with textbox

Dim textb_deger As String,bul As Range

Private Sub TextBox1_Change()
Dim aralik As Long
On Error Resume Next
textb_deger = TextBox1.Value
aralik = Sheets("PostaKoduSorgu").Cells(Rows.Count, 10).End(xlUp).Row
Set bul = Range("J4:J" & aralik).Find(What:=textb_deger)
Application.Goto Reference:=Range(bul.Address), Scroll:=False
Selection.AutoFilter field:=10, Criteria1:=textb_deger & "*"
If textb_deger = "" Then
Selection.AutoFilter
ActiveWindow.ScrollRow = 1
End If
Set bul = Nothing
End Sub

Private Sub TextBox2_Change()
Dim aralik2 As Long
On Error Resume Next
textb_deger = TextBox2.Value
aralik2 = Sheets("PostaKoduSorgu").Cells(Rows.Count, 9).End(xlUp).Row
Set bul = Range("I4:I" & aralik).Find(What:=textb_deger)
Application.Goto Reference:=Range(bul.Address), Scroll:=False
Selection.AutoFilter field:=9, Criteria1:=textb_deger & "*"
If textb_deger = "" Then
Selection.AutoFilter
ActiveWindow.ScrollRow = 1
End If
Set bul = Nothing
End Sub

Private Sub TextBox3_Change()
Dim aralik3 As Long
On Error Resume Next
textb_deger = TextBox3.Value
aralik3 = Sheets("PostaKoduSorgu").Cells(Rows.Count, 6).End(xlUp).Row
Set bul = Range("F4:F" & aralik3).Find(What:=textb_deger)
Application.Goto Reference:=Range(bul.Address), Scroll:=False
Selection.AutoFilter field:=6, Criteria1:=textb_deger & "*"
If textb_deger = "" Then
Selection.AutoFilter
ActiveWindow.ScrollRow = 1
End If
Set bul = Nothing
End Sub

Yukarıdaki VBA kodlar incelendiğinde ;
bul değişkenine VBA Find metodu ile aradığımız TextBox1 in bulunan değerlerini atadık :
Set bul = Range("J4:J" & aralik).Find(What:=textb_deger)
Ayrıca excel vba find autofilter Selection.AutoFilter field:=10, Criteria1:=textb_deger & "*"
bölümünü görürüz. field:=10 10.sütunu belirtir o da J sütunudur, hangi sütunda autofilter ile filtreleme yapmak istiyorsak onun numarasını yazarız. Criteria1:=textb_deger & “*” ifadesi hücrenin ilk karakterine (ilk harf yada sayı olabilir) göre TextBox1 deki değeri arama,filtreleme yaptığımızı gösterir -textb_deger = TextBox1.Value kodu ile TextBox1 in içindeki değeri textb_deger değişkenine atamıştık- .İlk karakter değil de hücrenin bütününde arama yapmak için VBA kodu şu şekilde değiştirebiliriz : Criteria1:=”*” & textb_deger & “*”

Posta kodu sorgu sayfamıza bir de VBA autofilter metodunu iptal etmek (Excel VBA autofilter false) ve textbox ların içini temizlemek için “Clear” butonu ekledik. Onun kodları ise şöyle : excel autofilter false

Private Sub CommandButton1_Click()
TextBox1.Text = Empty
TextBox2.Text = Empty
TextBox3.Text = Empty
If ActiveSheet.AutoFilterMode Then
  ActiveSheet.AutoFilterMode = False
End If
End Sub

İhtiyaca göre textboxlar ile birbirine bağımlı arama da yapılabilir. Örneğin ; bulunduğunuz mahallenin posta kodunu öğrenmek için ,mahalle adı ve ilçe sütununda aynı anda arama yapılması gerekir.

Görüldüğü gibi bu kadar büyük ve çok satırlı çalışma sayfasına göre oldukça hızlı ve sorunsuz filtreleme yapılabilmektedir.

📥 Örnek çalışma kitabını buradan indirebilirsiniz.