我想我明白了。这个怎么样:
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行被隐藏。 –