VBAmacros用于隐藏基于单元格值的行

我正在研究一个表格,它根据单元格的值(1-10之间)隐藏/显示许多行。 目前,我有一些嵌套的if语句。 这使我的工作手册非常缓慢。 有没有办法缩小这个代码? 谢谢。

If Range("B87").Value = 10 Then Rows("88:98").EntireRow.Hidden = False Else If Range("B87").Value = 9 Then Rows("98").EntireRow.Hidden = True Rows("88:97").EntireRow.Hidden = False Else If Range("B87").Value = 8 Then Rows("97:98").EntireRow.Hidden = True Rows("88:96").EntireRow.Hidden = False Else If Range("B87").Value = 7 Then Rows("96:98").EntireRow.Hidden = True Rows("88:95").EntireRow.Hidden = False Else If Range("B87").Value = 6 Then Rows("95:98").EntireRow.Hidden = True Rows("88:94").EntireRow.Hidden = False Else If Range("B87").Value = 5 Then Rows("94:98").EntireRow.Hidden = True Rows("88:93").EntireRow.Hidden = False Else If Range("B87").Value = 4 Then Rows("93:98").EntireRow.Hidden = True Rows("88:92").EntireRow.Hidden = False Else If Range("B87").Value = 3 Then Rows("92:98").EntireRow.Hidden = True Rows("88:91").EntireRow.Hidden = False Else If Range("B87").Value = 2 Then Rows("91:98").EntireRow.Hidden = True Rows("88:90").EntireRow.Hidden = False Else If Range("B87").Value = 1 Then Rows("90:98").EntireRow.Hidden = True Rows("88:89").EntireRow.Hidden = False Else If Range("B87").Value = 0 Then Rows("88:98").EntireRow.Hidden = True End If End If End If End If End If End If End If End If End If End If End If 

你有很多基本相同的代码。 我看了看,并试图使其更加算术,这缩短了代码。 看看这是否工作:

 Sub t() Dim myVal As String Dim mainRow As Long, tweakRow As Long Dim hideRange As Range, showRange As Range Dim row1 As Long, row2 As Long mainRow = 98 myVal = Range("B87").Value If myVal = 10 Then Rows(mainRow - 10 & ":" & mainRow - 10 + myVal).EntireRow.Hidden = False ElseIf myVal >= 1 And myVal <= 9 Then tweakRow = mainRow - 10 row1 = (mainRow - (9 - myVal)) row2 = (mainRow - (10 - myVal)) Set hideRange = Rows(row1 & ":" & mainRow).EntireRow Set showRange = Rows(tweakRow & ":" & row2).EntireRow Debug.Print "For a value of " & myVal & ", we will hide range: " & hideRange.Address & ", and show range: " & showRange.Address hideRange.Hidden = True showRange.Hidden = False ElseIf myVal = 0 Then Rows(mainRow - 10 & ":" & mainRow).EntireRow.Hidden = True End If End Sub 

我可能会尝试一个案例陈述。

哦,甚至使用ElseIf选项,至less可以减lessEndIf语句的数量。

我认为案例代码看起来像这样:

select范围(“B87”)。值

 Case "1" Case "2" ... 

结束select

使用EntireRow不需要使用EntireRow ,使用EntireRow时不需要when using EntireColumn。

 Rows("88:98").Hidden = True If Range("B87").Value > 0 Then Rows(88).Resize(1 + Range("B87").Value).Hidden = False End If