我想我明白了。這個怎麼樣:
Sub test()
Dim cel As Range, rng As Range
Dim hideRow&, numDashes&
Set rng = Range("A1:A5")
hideRow = rng.Count + 1
For Each cel In rng
If cel.Value = "-" Then
numDashes = numDashes + 1
Rows(cel.Row).EntireRow.Hidden = True
End If
Next cel
If numDashes = rng.Count Then
' If all cells in the range are '-'
Rows(hideRow).EntireRow.Hidden = False
Else
Rows(hideRow).EntireRow.Hidden = True
End If
End Sub
我是那種假設你要隱藏/取消隱藏行6,因爲它是一個你的範圍內的最後一行以下的。因此,我創建了一個變量來保存這個。這樣,如果你想改變你的範圍來說A1:A100
,你所要做的就是調整rng
,它會看起來隱藏/取消隱藏第101行。當然,如果你只需要它是6
,那麼只是做hideRow = 6
。
編輯:爲了好玩,我試圖減少計數變量numDashes
的使用,並試圖檢查所有-
的範圍,以便更加簡潔。下面也應該工作,但可能需要一兩個調整:
Sub test2()
Dim cel As Range, rng As Range
Dim hideRow&
Set rng = Range("A1:A5")
hideRow = rng.Count + 1
'Check to see if your range is entirely made up of `-`
If WorksheetFunction.CountIf(rng, "-") = rng.Count Then
Rows(hideRow).EntireRow.Hidden = False
' If you want to stop your macro if ALL range values are "-", then uncomment the next line:
'Exit Sub
Else
Rows(hideRow).EntireRow.Hidden = True
End If
For Each cel In rng
If cel.Value = "-" Then
Rows(cel.Row).EntireRow.Hidden = True
End If
Next cel
End Sub
你可以檢查'如果行(Cell.Row).EntireRow.Hidden = True然後...'?不太清楚問題是什麼,你能澄清一點嗎? – BruceWayne
所以我在A1:A5中有值。如果其中任何值等於「 - 」,則VBA代碼將隱藏相應的行。如果它們全都等於「 - 」,我希望單元格6行取消隱藏。如果即使第1-5行中的一個未被隱藏(意味着A1,A2,A3,A4或A5中的值不等於「 - 」),我希望第6行被隱藏。 –