检查string是否在带有Filter命令的Excel-VBA范围内

我试图检查是否有一个单元格的范围每个都有一个定义在另一个范围内的值

这是我现在的代码:

Sub CheckInstallationName() Dim LastRow As Long With Worksheets(2) LastRow = .Cells(.Rows.Count, Worksheets(1).Cells(4, 3).Value).End(xlUp).Row End With Dim rngA As Range Set rngA = Range(Worksheets(1).Cells(4, 3).Value & "4:" & Worksheets(1).Cells(4, 3).Value & LastRow) Dim cellA As Range Dim InstallationNameRange As Variant InstallationNameRange = Worksheets(1).Range("B16:B32").Value For Each cellA In rngA If UBound(Filter(InstallationNameRange, cellA.Value)) < 0 Then 'Some code End If Next cellA End Sub 

If UBound(filter(InstallationNameRange, cellA.Value)) < 0 Then我得到错误“运行时错误13”:types不匹配“,并找不到解决scheme。 可能这是一个非常小的修复。 没有这个if语句的代码工作

打开一个新的Excel并编写以下内容:

 Public Sub CheckRangeInRange() Dim rngA As Range Dim rngB As Range Dim rngCellA As Range Dim rngCellB As Range Dim blnError As Boolean Set rngA = Worksheets(1).Range("A1:B10") Set rngB = Worksheets(1).Range("D10:E20") rngA.Interior.Color = vbYellow rngB.Interior.Color = vbRed For Each rngCellA In rngA blnError = True For Each rngCellB In rngB If rngCellA = rngCellB Then blnError = False End If Next rngCellB If blnError Then Debug.Print "Display Error here!" Next rngCellA End Sub 

A1:B10D10:E20一些值,匹配值的地址将被打印在直接窗口中。

您不能在2-d范围内使用Filter ,并且从Range创build的任何数组都是2-d,即使它是单个行或一列。

你可以使用这个问题的“双Transpose技巧”。 注意高度投票的答案,而不是被接受的答案。

例如:

 Option Explicit Sub Test() Dim rng As Range Set rng = Sheet2.Range("C20:E20") 'a, b, c ' use the double transpose trick to convert 2-d array to 1-d array Dim arr As Variant arr = Application.WorksheetFunction.Transpose( _ Application.WorksheetFunction.Transpose(rng.Value)) ' now Filter will work Dim out As Variant out = Filter(arr, "a") Debug.Print out(0) End Sub