Temat: automatyczne ukrywanie wierszy (lub kolumn)
Jakub K.:
Witam,
mam problem z pewnym Makro i chciałbym zapytać czy ktoś mógłby mi pomóc, mianowicie:
jak napisać makro, które w przypadku gdy w dowolnym wierszu, w kolumnie H znajduje się tekst “TAK”, to zostaną odkryte wszystkie bezpośrednio poniższe wiersze, które w kolumnie B zawierają tekst “podpowiedź”. I tak do wiersza, w którym ponownie w kolumnie H znajduje się wartość “TAK”. Wtedy ponownie powinno nastąpić odsłonięcie wierszy według powyższego schematu.
Z góry dziękuję za pomoc.
pozdrawiam!
Przyjąłem założenie, że wielkość liter nie ma znaczenia. Jeżeli ma mieć znaczenie, należy usunąć funkcje UCase oraz zapisać oba teksty w pożądany sposób.
Wariant I
Wszystkie podpowiedzi dla danego pytania powinny być jedna pod drugą, rozpoczynając od wiersza następującego po wierszu "TAK".
Sub OdkryjPodpowiedz()
Dim columnH As Range
Dim rowNumber As Long
Dim cell As Range
Application.ScreenUpdating = False
With ActiveSheet
Set columnH = Intersect(.UsedRange, Columns("H"))
For Each cell In columnH
If UCase(cell.Value) = "TAK" Then
rowNumber = cell.Row + 1
Do While (UCase(.Cells(rowNumber, 2)) = "PODPOWIEDŹ")
.Rows(rowNumber).Hidden = False
rowNumber = rowNumber + 1
Loop
End If
Next cell
End With
Application.ScreenUpdating = True
End Sub
Wariant II
Sprawdzane są wszystkie wiersze od następującego po "TAK" do poprzedzającego kolejne "TAK". Podpowiedzi dla danego pytania nie muszą być zatem jedna pod drugą, mogą dzielić je wiersze bez podpowiedzi.
Zakładam, że wiersze z podpowiedziami są ukryte, a nie odfiltrowane.
Sub OdkryjPodpowiedzV2()
Dim columnH As Range
Dim rowNumber As Long
Dim cell As Range
Dim lastCellRow As Long
Application.ScreenUpdating = False
With ActiveSheet
lastCellRow = Columns("B").Find(What:="*", SearchDirection:=xlPrevious).Row
Set columnH = Intersect(.UsedRange, Columns("H"))
For Each cell In columnH
If UCase(cell.Value) = "TAK" Then
rowNumber = cell.Row + 1
Do While (UCase(.Cells(rowNumber, 8)) <> "TAK" And rowNumber <= lastCellRow)
If UCase(.Cells(rowNumber, 2)) = "PODPOWIEDŹ" Then
.Rows(rowNumber).Hidden = False
End If
rowNumber = rowNumber + 1
Loop
End If
Next cell
End With
Application.ScreenUpdating = True
End Sub
Pozdrawiam!
Ten post został edytowany przez Autora dnia 02.12.13 o godzinie 23:55