我在我的vba函数中遇到问题,该函数使用矩阵来隐藏存在"的行。"或" x"在两个特定的列中。它只适用于一列,但我不知道如何检查两列。我想我必须将这两个循环组合成一个循环,但不知道如何。
' hide rows when "x" or "." is in a specific column
On Error Resume Next
For Each c In Range(TRange & LastRow)
If c.Value = "." Or c.Value = "x" Then
c.EntireRow.Hidden = False
Else
c.EntireRow.Hidden = True
End If
Next
On Error GoTo 0
' hide rows when "x" or "." is in a specific column
On Error Resume Next
For Each d In Range(FRange & LastRow)
If d.Value <> "x" Then
d.Value = "." Or d.EntireRow.Hidden = True
End If
Next
On Error GoTo 0
以上只是代码的一部分 - 如果您需要其余代码来帮助我,请告诉我。
答案 0 :(得分:0)
我假设TRange
和FRange
分别代表T和F列。
Dim MySheet As Worksheet, i As Integer
Set MySheet = ThisWorkbook.Worksheets("YourSheetName")
For i = Range(TRange & LastRow).Cells(1,1).Row To LastRow
If MySheet.Cells(i,6) = "x" _
or MySheet.Cells(i,6) = "." _
or MySheet.Cells(i,20) = "x" _
or MySheet.Cells(i,6) = "." _
Then MySheet.Rows(i).Hidden = True
Next
在您使用更多信息更新问题后,我会发布其他解决方案。
答案 1 :(得分:0)
AntiDrondert提出了最简单,最有效的解决方案:.Autofilter
您没有为您的问题提供所有具体细节,但如果工作表是1,您需要隐藏&#34;。&#34;或&#34; x&#34;在UsedRange的A列和B列中,试试这个:
Option Explicit
Public Sub HideDotsAndXs()
Const COL1 = 1 'Column A
Const COL2 = 2 'Column B
Dim ws As Worksheet, ur As Range
Set ws = Application.ThisWorkbook.Worksheets(1)
Set ur = ws.UsedRange
Application.ScreenUpdating = False
With ur
ur.AutoFilter
.AutoFilter Field:=COL1, Criteria1:="<>.", Operator:=xlAnd, Criteria2:="<>x"
.AutoFilter Field:=COL2, Criteria1:="<>.", Operator:=xlAnd, Criteria2:="<>x"
End With
Application.ScreenUpdating = True
End Sub
尽量避免使用On Error Resume Next
;它通常可以由If Not IsError(...