Filtre uygulunan sütunlar bulma?

Katılım
2 Mart 2005
Mesajlar
2,960
Excel Vers. ve Dili
ev: Ofis 2007- Win Xp
iş: Ofis 2010- Win Vista
şöyleki
sayfada a5:f5 sütun aralığında, filtre uygula aktif c ve d sütunlarında veri süzme işlemi onaylanmış

filte uygulanan hücreleri diziye nasıl alırız. örneğimize gör sonuc c5,d5 olacak
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,058
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
Aşağıdaki kodları deneyin.

Kod:
Dim suz
 
Sub suzmelistesi()
ReDim suz(ActiveSheet.AutoFilter.Filters.Count)
For a = 1 To ActiveSheet.AutoFilter.Filters.Count
If ActiveSheet.AutoFilter.Filters.Item(a).On Then
c = c + 1
suz(c) = ActiveSheet.AutoFilter.Range.Cells(a).Address(0, 0)
MsgBox suz(c)
End If
Next
End Sub
 
Katılım
2 Mart 2005
Mesajlar
2,960
Excel Vers. ve Dili
ev: Ofis 2007- Win Xp
iş: Ofis 2010- Win Vista
teşekkür ederim hocam bununla istediğim gibi filtre uygulanan adresler a1, c1 gibi dönüyor .

peki şöyle bir şey yapılabilirmi:
filte uygulanan adresler a1, c1 vs.

baslık = [a2].value & " & " [c2].value & [.....].value gibi bir değişkene
alınabilirmi.

baslik = baslik & Kriterler(Cells(filtre uygulanan sütun, filtre uygulanan satır + 1)) gibi birşey


Function Kriterler(BaslikAlti As Range) As String
Dim Filter As String
Filter = ""
On Error GoTo son
With BaslikAlti.Parent.AutoFilter
If Intersect(BaslikAlti, .Range) Is Nothing Then GoTo son
With .Filters(BaslikAlti.Column - .Range.Column + 1)
If Not .On Then GoTo son
Filter = Replace(.Criteria1, "=", """", 2)
Filter2 = Replace(.Criteria2, "=", """", 2)

Select Case .Operator
Case xlAnd
Filter = Filter & " ve " & Filter2
Case xlOr
Filter = Filter & " veya " & Filter2
End Select

End With
End With
son:
Kriterler = Filter
End Function
 
Katılım
5 Ocak 2007
Mesajlar
138
Excel Vers. ve Dili
2007 English
E1 Yerine E1 Hücresinde yazılı değeri yazdırabilir miyiz.
teşekkürler.
 
Katılım
2 Mart 2005
Mesajlar
2,960
Excel Vers. ve Dili
ev: Ofis 2007- Win Xp
iş: Ofis 2010- Win Vista
Kod:
Dim suz
 
Sub suzmelistesi()
ReDim suz(ActiveSheet.AutoFilter.Filters.Count)
For a = 1 To ActiveSheet.AutoFilter.Filters.Count
If ActiveSheet.AutoFilter.Filters.Item(a).On Then
c = c + 1
suz(c) = ActiveSheet.AutoFilter.Range.Cells(a).Value
MsgBox suz(c)
End If
Next
End Sub
yazıca filtre uygulanan başlığı bulmak mümkün.....


Yalnız benim istediğim kriterler(filtre edilen sütun, filtre edilen satır + 1 ) şeklinde kullanmak
 
Son düzenleme:

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,058
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
.....yazıca filtre uygulanan başlığı bulmak mümkün.....

Yalnız benim istediğim kriterler(filtre edilen sütun, filtre edilen satır + 1 ) şeklinde kullanmak
Bu istediğiniz verileri kolayca bulabileceğinizi düşünüyorum. Döngüdeki "a" değişkeni zaten sütun nosunu veriyor. Filtre edilmiş satır sayısını bulmak içinde en pratik yok Excelin kendi fonksiyonlarının VBA daki karşılığını kullanmaktır. Bu fonksiyonda ALTTOPLAM yani SUBTOTAL fonksiyonudur.

Kod:
WorksheetFunction.Subtotal(102, [a:a])
 
Katılım
2 Mart 2005
Mesajlar
2,960
Excel Vers. ve Dili
ev: Ofis 2007- Win Xp
iş: Ofis 2010- Win Vista
hocam yanlış anlattım şöyle bir örenk le açıklayayım

dönen adres a1 ise ben a2 yani (sütun, satır+1) değerini başka bir fonksiyonda kullanmak istiyorum.
 
Katılım
2 Mart 2005
Mesajlar
2,960
Excel Vers. ve Dili
ev: Ofis 2007- Win Xp
iş: Ofis 2010- Win Vista
Kod:
Dim suz
 
Sub suzmelistesi_adr()
'Süzülen adresleri verir a1, a2 ,a3 gibi
ReDim suz(ActiveSheet.AutoFilter.Filters.Count)
For a = 1 To ActiveSheet.AutoFilter.Filters.Count
If ActiveSheet.AutoFilter.Filters.Item(a).On Then
c = c + 1
suz(c) = ActiveSheet.AutoFilter.Range.Cells(a).Address(0, 0)
MsgBox suz(c)
End If
Next
End Sub
Kod:
Sub suzmelistesi_SuzBas()
'Süzülen adreslerin başlıklarını verir adı, soyadı gibi

ReDim suz(ActiveSheet.AutoFilter.Filters.Count)
For a = 1 To ActiveSheet.AutoFilter.Filters.Count
If ActiveSheet.AutoFilter.Filters.Item(a).On Then
c = c + 1
suz(c) = ActiveSheet.AutoFilter.Range.Cells(a).Value
MsgBox suz(c)
End If
Next
End Sub
Kod:
Sub suzmelistesi_SuzDeg()
'Süzülen adreslerin kritelerini verir ahmet, şenocak gb
ReDim suz(ActiveSheet.AutoFilter.Filters.Count)

For a = ActiveSheet.AutoFilter.Filters.Count To 1 Step -1
    If ActiveSheet.AutoFilter.Filters.Item(a).On Then
        c = c + 1
        stnno = ActiveSheet.AutoFilter.Range.Cells(a).Column
        strno = ActiveSheet.AutoFilter.Range.Cells(a).Row
        suz(c) = Kriterler(Cells(strno + 1, stnno))
        snc = suz(c) & ", " & snc
    End If
Next
MsgBox snc
End Sub


Function Kriterler(BaslikAlti As Range) As String
Dim Filter As String
Filter = ""
On Error GoTo son
With BaslikAlti.Parent.AutoFilter
If Intersect(BaslikAlti, .Range) Is Nothing Then GoTo son
With .Filters(BaslikAlti.Column - .Range.Column + 1)
If Not .On Then GoTo son
Filter = Replace(.Criteria1, "=", """", 2)
Filter2 = Replace(.Criteria2, "=", """", 2)

Select Case .Operator
Case xlAnd
Filter = Filter & " ve " & Filter2
Case xlOr
Filter = Filter & " veya " & Filter2
End Select

End With
End With
son:
Kriterler = Filter
End Function
evet hallettim gibi
 
Son düzenleme:
Katılım
2 Mart 2005
Mesajlar
2,960
Excel Vers. ve Dili
ev: Ofis 2007- Win Xp
iş: Ofis 2010- Win Vista
Tam olarak istediğimde buydu Şükürler oslun hallettim
Dim Suz 'varsa kullanmayın
Kod:
Sub suzmelistesi_SuzKrm()
'Süzülen adreslerin kritelerini verir ahmet, şenocak gb
ReDim suz(ActiveSheet.AutoFilter.Filters.Count)

For a = ActiveSheet.AutoFilter.Filters.Count To 1 Step -1
    If ActiveSheet.AutoFilter.Filters.Item(a).On Then
        c = c + 1
        stnno = ActiveSheet.AutoFilter.Range.Cells(a).Column
        strno = ActiveSheet.AutoFilter.Range.Cells(a).Row
        SuzBas = ActiveSheet.AutoFilter.Range.Cells(a).Value
        SuzKrt = Kriterler(Cells(strno + 1, stnno))
        suz(c) = SuzBas & ": " & SuzKrt
        snc = suz(c) & ", " & snc
    End If
Next
MsgBox snc
End Sub
 
Katılım
2 Mart 2005
Mesajlar
2,960
Excel Vers. ve Dili
ev: Ofis 2007- Win Xp
iş: Ofis 2010- Win Vista
yanlış başlığa yazmışım.
 
Üst