下面是我用来隐藏所有行的代码" Kitchen:在第8列。如果第12列包含" No",我还需要隐藏该行。这是一个"或"声明,而不是"和"声明。 我研究了论坛,但未能找到答案。我也想加快这个过程。任何帮助,将不胜感激。
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
答案 0 :(得分:0)
您可以再添加一个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
。这将在继续宏的同时停止更新您的屏幕。
答案 1 :(得分:0)
要添加另一个逻辑测试,只需添加另一个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