Hallo Robert,
ich habe den Fehler gefunden, war ein Denkfehler in meinem ursprünglichen Makro.
Bei der Ermittlung, ob die Anzahl der Treffer mit den Anzahl der Suchkriterien übereinstimmt, war ein Fehler.
UBound(arrSuch) ergibt z.B. bei 2 Suchbegriffen 1, da der erste Suchbegriff bei 0 und der zweite bei 1 steht. Daher muss die Zeile richtig heißen:
If lngAnzahl < UBound(arrSuch) + 1 Then Rows(lngZeile).EntireRow.Hidden = True
Der Fehler ist mir beim Testen nicht aufgefallen, da ich nur wenige Datensätze hatte und wohl immer mit mehr als zwei Suchbegriffen getestet hatte.
Hier das verbesserte Makro:
Sub aufgaben()
Dim arrSuch As Variant
Dim a As Long
Dim lngAnzahl As Long
Dim lngLetzte As Long
Dim lngSpalte As Long
Dim lngZeile As Long
'Bildschirmaktualisierung ausschalten:
Application.ScreenUpdating = False
'letzte Zeile in Spalte B ermitteln
lngLetzte = ActiveSheet.Cells(Rows.Count, 4).End(xlUp).Row
'Anzahl der Suchbegriffe ermitteln
For lngSpalte = 15 To 18
If Cells(4, lngSpalte) <> "" Then lngAnzahl = lngAnzahl + 1
Next lngSpalte
'Array für Suchbegriffe redimensionieren; -1 da Array bei 0 anfängt
ReDim arrSuch(lngAnzahl - 1)
'Variable für lngAnzahl zurücksetzen
lngAnzahl = 0
'Suchbegriffe in Array einlesen
For lngSpalte = 15 To 18
If Cells(4, lngSpalte) <> "" Then
arrSuch(lngAnzahl) = Cells(4, lngSpalte).Value
lngAnzahl = lngAnzahl + 1
End If
Next lngSpalte
'Zeilen (ab Zeile 5) mit Aufgaben durchlaufen und Suchbegriffe überprüfen
For lngZeile = 5 To lngLetzte
'Prüfen, ob in Spalte Aufg_ steht
If Left(Cells(lngZeile, 4), 5) = "Aufg_" Then
'lngAnzahl wieder zurücksetzen
lngAnzahl = 0
'Suchbegriffe überprüfen
For lngSpalte = 15 To 18
For a = LBound(arrSuch) To UBound(arrSuch)
If Cells(lngZeile, lngSpalte) = arrSuch(a) Then lngAnzahl = lngAnzahl + 1
Next a
Next lngSpalte
'Zeile ausblenden, wenn nicht alle Suchbegriffe gefunden wurden
If lngAnzahl < UBound(arrSuch) + 1 Then Rows(lngZeile).EntireRow.Hidden = True
End If
Next lngZeile
'Bildschirmaktualisierung einschalten:
Application.ScreenUpdating = True
End Sub
Da du ja viele Datensätze zu prüfen hast, habe ich noch die Bildschirmaktualisierung bei der Ausführung des Makros ausgeschaltet.
Gruß
M.O.