我正在尝试检查单元格值,基于此,应该隐藏5行。
例如,如果 S4 单元格值为 <= 0 ,则它应将行从 4隐藏到8 ,然后再次检查 S9 单元格值将是,如果它是 <= 0 ,则它应隐藏从 9到13 的行,依此类推。
像这样,我有1000多行。有更好的方法来解决这个问题吗?请告诉我。
答案 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