根据一系列单元格的隐藏/未隐藏状态隐藏/取消隐藏行

如果隐藏了整个行的范围,我想取消隐藏一行。 如果该范围内的单行不被隐藏,我想隐藏这一行。 这是什么语法? 我目前的代码如下:

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"). 

然后按该列过滤行。