Wenns per Formel sein soll, würde ich anders machen:
Option Explicit
Sub Test()
Dim rng As Excel.Range
Dim vntResult As Variant
Dim vntVal As Variant
With Worksheets("Tabelle1")
'Zellen mit Suchkriterien benennen
Range("F2").Name = "_search_cat"
Range("G2").Name = "_search_sect"
'Spalten A-C benennen
For Each vntVal In Array(Array("A2", "_section"), Array("B2", "_category"), Array("C2", "_notes"))
'Daten-Bereich ermitteln
With .Range(vntVal(0), .Cells(.Rows.Count, .Range(vntVal(0)).Column).End(xlUp))
If .Row < .Worksheet.Range(vntVal(0)).Row Then
'wir sind bei der Suche außerhalb der oberen Grenze gelandet
Call MsgBox("Keine Daten in Spalte " & .Range(vntVal(0)).EntireColumn.Address, vbExclamation)
Exit Sub
End If
'Bereich benennen
.Name = vntVal(1)
End With
Next
'Filtern nach 2 Kriterien - einfach gemacht :)
vntResult = "=FILTER( _notes, " & _
"ISNUMBER( MATCH( _search_cat, _category, 0) ) " & _
"* ISNUMBER( MATCH( _search_sect, _section, 0) ) " & _
")"
'~uuuund filtern!
vntResult = .Evaluate(vntResult)
If IsError(vntResult) Then
Call MsgBox("Wooops. :(", vbCritical)
Else
'Ausgabe im Direktbereich/-fenster (ggf. einblenden mit STRG+G)
Debug.Print "[FILTER_ERGEBNIS]"
Debug.Print "FILTER: {Bereich: '" & CStr(.Range("_search_sect")) & "'} {Kategorie: '" & CStr(.Range("_search_cat")) & "'}"
Debug.Print String(15, "-")
For Each vntVal In vntResult
Debug.Print vntVal
Next
' Dim i As Long
' For i = LBound(vntResult) To UBound(vntResult)
' Debug.Print vntResult(i, 1)
' Next
Debug.Print String(15, "-")
End If
End With
End Sub
|