unter https://www.herber.de/bbs/user/110833.xlsm findet ihr zum folgenden die passende Testdatei, falls dies weiterhilft.
Vorab: Meine Kenntnisse sind begrenzt, ich versuche aber aktuell diese learning-by-doing auszubauen. Habe auch versucht diverse Ansätze zu kombinieren, bin aber leider nicht zum Ziel gekommen und wende mich nun an euch.
Was ich vorhabe:
Ich habe eine Liste mit beispielhaft 3 Spalten.
Nun blende ich in einer anderen Funktion alle Zeilen in diesem Array (hier: testarea) aus, die in Spalte A P2 oder P3 stehen haben, sodass nur noch jene mit P1 übrig bleiben.
Jetzt suche ich eine Funktion, mit der ich in dem verbliebenen Bereich der testarea nochmal selbiges machen kann.
Ich habe hier noch 3 Zeilen mit P1 in Spalte A. Diese tragen die Werte A,B,C.
Ich möchte nun mit der Funktion im noch sichtbaren Bereich der testareajene Zeilen ausblenden, in denen in Spalte B B oder C steht wenn in Zelle A12 A (quasi die "Filterzelle")steht.
Das habe ich mit diesem Code versucht:
Sub test_range()
Dim i As Integer
Dim lrow As Integer
Dim A As String
Dim B As String
Dim C As String
Dim test_area As Range
A = "A"
B = "B"
C = "C"
lrow = Sheets("testsheet").Range("testarea").SpecialCells(xlCellTypeVisible).Cells(Rows. _
Count, 2).End(xlUp).Row
If Sheets("testsheet").Range("A12") = "A" Then
For i = lrow To 1 Step -1
If Sheets("testsheet").Cells(i, 2) = A Then
Sheets("testsheet").Rows(i).Hidden = False
ElseIf Sheets("testsheet").Cells(i, 2) = B Then
Sheets("testsheet").Rows(i).Hidden = True
ElseIf Sheets("testsheet").Cells(i, 2) = C Then
Sheets("testsheet").Cells(i).Hidden = True
End If
Next i
ElseIf Sheets("testsheet").Range("A12") = "B" Then
For i = lrow To 1 Step -1
If Sheets("testsheet").Cells(i, 2) = B Then
Sheets("testsheet").Rows(i).Hidden = False
ElseIf Sheets("testsheet").Cells(i, 2) = A Then
Sheets("testsheet").Rows(i).Hidden = True
ElseIf Sheets("testsheet").Cells(i, 2) = C Then
Sheets("testsheet").Cells(i).Hidden = True
End If
Next i
ElseIf Sheets("testsheet").Range("A12") = "C" Then
For i = lrow To 1 Step -1
If Sheets("testsheet").Cells(i, 2) = C Then
Sheets("testsheet").Rows(i).Hidden = False
ElseIf Sheets("testsheet").Cells(i, 2) = A Then
Sheets("testsheet").Rows(i).Hidden = True
ElseIf Sheets("testsheet").Cells(i, 2) = B Then
Sheets("testsheet").Cells(i).Hidden = True
End If
Next i
End If
End Sub
Ich vermute den Fehler (Laufzeitfehler 1004 im letzten ElseIf Schritt der ersten For Schleife) in der Definition von lrow, denn ich bin mir bei der Syntax nicht sicher, ob ich das alles so hintereinander schreiben kann.Sollte das zu lösen sein, könntet ihr mir als Anfänger noch einen Tipp geben (quasi das Sahnehäubchen). Gibt es eine elegantere Alternative? Mit einer with Funktion? Oder ich habe auch etwas von CaseSelect gelesen. Was würdet ihr hier verwenden? Könntet ihr mir einen beispielhaften Ansatz zeigen, da ich diese Funktionen noch nie wirklich genutzt habe? Wäre diese Variante nur 'Kosmetik' oder bringt diese auch Performancevorteile?
Ich danke euch vielmals im Voraus und freue mich über Rückmeldungen!
Marsch