我在第8列中隐藏了所有值为“ Kitchen”的行。
如果列12包含“否”,我还需要隐藏该行。这是一个“或”语句,而不是“与”语句。
我已经研究了该站点,但是找不到答案。我也想加快这个过程。
Sub FOHc()
BeginRow = 6
EndRow = 400
ChkCol = 8
For RowCnt = BeginRow To EndRow
If Cells(RowCnt, ChkCol).Value = "Kitchen" Or Cells(RowCnt, ChkCol).Value = Blank Then
Cells(RowCnt, ChkCol).EntireRow.Hidden = True
Else
Cells(RowCnt, ChkCol).EntireRow.Hidden = False
End If
Next RowCnt
End Sub
<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9zWjBWUy5qcGcifQ==” alt =“电子表格”>
您可以再添加一个Or
条件
If Cells(RowCnt, ChkCol).Value = "Kitchen" Or Cells(RowCnt, ChkCol).Value = Blank Or Cells(RowCnt, ChkCol2).Value = "No" Then
为了加速宏,在开头添加Application.ScreenUpdating = False
,在结尾添加Application.ScreenUpdating = True
。在进行宏操作时,这将停止更新屏幕。
要添加另一个逻辑测试,只需添加另一个Or
语句。
为了加快速度,收集所有要隐藏在一个范围内的行,并一次性隐藏它们。
通常,使用适当的限定词也是一个好主意,语句Cells
指Excel认为是活动工作表的内容。而ThisWorkbook.Worksheets("Sheet1").Cells
始终引用名为“ Sheet1”的工作表。
声明所有变量可能会防止不良行为和错误,并且通常是一种好习惯。
这里是重构代码。
Sub FOHc()
Dim beginRow As Long
Dim endRow As Long
Dim chkCol As Long
Dim rowCnt As Long
Dim rngResult As Range
Dim ws As Worksheet
beginRow = 6
endRow = 400
chkCol = 8
Set ws = ThisWorkbook.Worksheets("Sheet1") 'Change this to the actual name of your sheet.
With ws
.Cells.EntireRow.Hidden = False 'Unhides all rows, remove line if that's not desired
For rowCnt = beginRow To endRow
If .Cells(rowCnt, chkCol) = "Kitchen" Or .Cells(rowCnt, chkCol) = Empty Or .Cells(rowCnt, 12) = "No" Then
If rngResult Is Nothing Then
Set rngResult = .Cells(rowCnt, 1)
Else
Set rngResult = Union(rngResult, .Cells(rowCnt, 1))
End If
End If
Next rowCnt
End With
If Not rngResult Is Nothing Then rngResult.EntireRow.Hidden = True
End Sub