根据单元格值隐藏多行的代码

时间:2020-05-14 11:01:25

标签: excel vba

我正在尝试检查单元格值,基于此,应该隐藏5行。

例如,如果 S4 单元格值为 <= 0 ,则它应将行从 4隐藏到8 ,然后再次检查 S9 单元格值将是,如果它是 <= 0 ,则它应隐藏从 9到13 的行,依此类推。

像这样,我有1000多行。有更好的方法来解决这个问题吗?请告诉我。

enter image description here

2 个答案:

答案 0 :(得分:1)

有一种叫做“ For循环”的东西,可以帮助您遍历大量行而不必写下每一行。 在这里阅读有关它们的信息:https://www.excel-easy.com/vba/loop.html

我会给你一个基本的例子:

Sub hideSomeRows()

Dim currentRow As Long
Dim lastRow As Long
lastRow = 1000 'or any other last row you want to check

For currentRow = 1 To lastRow Step 5
    If Range("S" & currentRow).Value <= 0 Then
        Rows(currentRow & ":" & currentRow + 4).EntireRow.Hidden = True
    End If
Next currentRow


End Sub

这将循环遍历第1行和第1000行之间的每第5行,如果被检查行的S列中的值为负或零,则将自身和接下来的4行隐藏起来。

我使代码尽可能简单,但是在使用它之前,您应该真正考虑限定“范围”。 Here很好地讨论了为什么它很重要以及如何做到这一点。 找到一些快速的代码片段here,其中显示了如何将工作簿和正在处理的工作表定义为代码中的变量。 here是有关使用工作表的深入信息:

要点:做

Dim wb As Workbook
Set wb = ThisWorkbook

Dim ws As Worksheet
Set ws = wb.Sheets("!!YOURWORKSHEETNAME!!") 'replace !!YOURWORKSHEETNAME!! with the name of your worksheet

,然后写ws.Range而不是Range。行也一样。 你为什么问?尝试执行宏之前,先查看另一个工作表,您将看到,如果没有其他说明,您的宏将始终将Range解释为最后一个活动工作表的范围!

答案 1 :(得分:0)

根据您的查询,我假设您有1000行,并且如果单元格的值为<= 0,则必须隐藏下4行。

Sub Hide_Unhide()

Dim i As Integer

Application.ScreenUpdating = False

For i = 1 To 1000
    If (Not IsEmpty(ActiveSheet.Range("S" & i).Value)) And ActiveSheet.Range("S" & i).Value <= 0 Then
        ActiveSheet.Range("S" & i).EntireRow.Hidden = True
        i = i + 4
    End If
Next

Application.ScreenUpdating = True

End Sub