根据一系列单元格的隐藏/未隐藏状态隐藏/取消隐藏行
如果隐藏了整个行的范围,我想取消隐藏一行。 如果该范围内的单行不被隐藏,我想隐藏这一行。 这是什么语法? 我目前的代码如下:
Public Sub MySub() Application.ScreenUpdating = False With Range("A1:A5") .EntireRow.Hidden = False For Each cell In Range("A1:A5") Select Case cell.Value Case Is = "-" cell.EntireRow.Hidden = True End Select Next cell End With Application.ScreenUpdating = True End Sub
我想我明白。 这个怎么样:
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行,因为它是在你的范围的最后一行之下。 因此,我创build了一个variables来保存这个。 这样,如果你想改变你的范围来说A1:A100
,你所要做的就是调整rng
,并且它会隐藏/取消隐藏第101行。当然,如果你只需要它是6
,那么就做hideRow = 6
。
编辑:为了好玩,我试图减less计数variablesnumDashes
的使用,并试图检查所有范围的部分-
以更简洁。 下面也应该工作,但可能需要调整或两个:
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
你可以用辅助列中的公式来做到这一点。 我用这个财务报表来压缩多列都为零的行来缩短报表。
=IF(AND(SUM(A7:R7)<1,SUM(A7:R7)>-1),IF(OR(ISNUMBER(LEFT(H7,4)),ISBLANK(H7),ISERR(VALUE(LEFT(H7,4)))),"Show","Hide"),"Show").
然后按该列过滤行。