Vba 将范围与具有多个值的单个单元格进行比较
我试图根据单元格范围隐藏一个工作簿/工作表中的行。我需要查看范围中的每个单元格,并确定初始工作簿/工作表中单个单元格的字符串中是否存在匹配项。 行的范围包含国家名称,如: 美利坚合众国 法国 安提瓜和巴布达 阿根廷 但是要比较的单元格如下所示: 美利坚合众国、法国、安提瓜和巴布达 我试图研究并整理代码,但我真的不知道我在做什么。这是我的。我确信问题在于If语句Vba 将范围与具有多个值的单个单元格进行比较,vba,excel,Vba,Excel,我试图根据单元格范围隐藏一个工作簿/工作表中的行。我需要查看范围中的每个单元格,并确定初始工作簿/工作表中单个单元格的字符串中是否存在匹配项。 行的范围包含国家名称,如: 美利坚合众国 法国 安提瓜和巴布达 阿根廷 但是要比较的单元格如下所示: 美利坚合众国、法国、安提瓜和巴布达 我试图研究并整理代码,但我真的不知道我在做什么。这是我的。我确信问题在于If语句 vwb.Activate ActiveWorkbook.Sheets(tabName).Select For Each c In vwb
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
这比你想象的要简单得多,你走的路可能很混乱: 请参阅下面的内容,如果您不理解此代码与您所做的有何不同,请提出任何问题:
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
下面是一个示例框架,如果您试图隐藏COS范围中存在匹配项的行。为了便于测试,我将twb改为vwb。如果要隐藏不匹配的位置,请使用InStr1,c.Value,countriesArri,1=0
因此,循环RangeA121:A345,如果找到rangeCOS中的任何国家,则隐藏该行?听起来你可能需要两个循环。另外,你正在比较两本工作手册,这是你想要的吗?你还有一个“你想要的地方是的,我正在比较两本工作手册。”。这就是让我更困惑的地方。是的,看看RangeA121:A345,如果找到了rangeCOS中的任何国家,那么将行隐藏在原始范围内。COS范围只是一个由逗号分隔的串联值的单个单元格。您可以使用Split函数,然后在值上创建数组。请参阅我的编辑或使用Scott的更简单的方法。
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