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

时间:2018-01-15 15:19:51

标签: excel vba excel-vba

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

  • 美利坚合众国

  • 法国

  • 安提瓜和巴布达

  • 阿根廷

但要比较的单元格如下:

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

我试图研究并整理代码,但我真的不知道我在做什么。这就是我所拥有的。我确定问题是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 :(得分: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

答案 1 :(得分:0)

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

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

foreach ($Data as  $value) {
    list ($length, $hight) = $Data;
}