根据两列中的特定文本隐藏行

时间:2018-02-02 06:26:50

标签: excel-vba vba excel

我在我的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

以上只是代码的一部分 - 如果您需要其余代码来帮助我,请告诉我。

2 个答案:

答案 0 :(得分:0)

使用您的方法:

我假设TRangeFRange分别代表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(...

替换