首页 文章

将范围与具有多个值的单个单元格进行比较

提问于
浏览
0

我试图基于一系列单元格隐藏一个工作簿/工作表中的行 . 我需要查看范围中的每个单元格,并确定初始工作簿/工作表中单个单元格的字符串中是否存在匹配项 . 行范围包含国家/地区名称,如:

  • 美利坚合众国

  • 法国

  • 安提瓜和巴布达

  • 阿根廷

但要比较的单元格如下:

  • 美利坚合众国,法国,安提瓜和巴布达

我试图研究并整理代码,但我真的不知道我在做什么 . 这就是我所拥有的 . 我确定问题是If语句 .

vwb.Activate
ActiveWorkbook.Sheets(tabName).Select
For Each c In vwb.Worksheets(tabName).Range("A121:A345").Text

If Application.WorksheetFunction.CountIf(InStr(1, twb.Worksheets("Basic_Info”).Range("COS"), c.Value)) Then
Else
vwb.Worksheets(tabName).Rows(c.Row).EntireRow.Hidden = True

End If
Next

2 回答

  • 0

    它比你所采取的路径简单得多(可能是混乱:)) .

    如果您不理解此代码与您所做的有何不同,请参阅下文并提出任何问题:

    Dim searchRange as Range, findRange as Range, c as Range
    Set searchRange = vwb.Worksheets(tabName).Range("A121:A345")
    Set findRange = twb.Worksheets("Basic_Info”).Range("COS")
    
    For Each c In searchRange
    
        If findRange.Find(c.Value, lookin:=xlPart) is Nothing Then
    
            c.EntireRow.Hidden = True        
    
        End If
    
    Next
    
  • 1

    如果您试图隐藏 COS 范围内找到匹配项的行,则这是一个示例框架 . 为了便于测试,我将twb更改为vwb . 如果你想隐藏在没有匹配的地方,那么使用 InStr(1, c.Value, countriesArr(i, 1)) = 0

    Option Explicit
    
    Sub test()
    
    Dim vwb As Workbook
    Set vwb = ThisWorkbook
    
    Dim c As Range
    Dim tabName As String
    tabName = "Sheet1"
    
    Dim i As Long
    
    Dim countriesArr() As String
    'countriesArr = vwb.Worksheets("Basic_Info").Range("COS").Value  'twb.
    countriesArr = Split(vwb.Worksheets("Basic_Info").Range("COS").Value, ",")
    Dim unionRng As Range
    
    For Each c In vwb.Worksheets(tabName).Range("A121:A345")
    
        For i = LBound(countriesArr) To UBound(countriesArr)
    
            If InStr(1, c.Value, countriesArr(i)) > 0 Then
    
                If Not unionRng Is Nothing Then
    
                     Set unionRng = Union(unionRng, c)
    
                Else
    
                    Set unionRng = c
    
                End If
    
                Exit For
    
            End If
    
        Next i
    
    Next c
    
    If Not unionRng Is Nothing Then
        unionRng.EntireRow.Hidden = True
    End If
    
    End Sub
    

相关问题