检查字符串是在范围内的Excel VBA与筛选命令
我试着去检查,如果单元格区域各有另一范围内检查字符串是在范围内的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':类型不匹配”,找不到解决方案。可能它是一个非常小的修复。如果没有这个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:B10
和D10:E20
和匹配值的地址将在即时窗口打印。
您不能在2-d范围内使用Filter
,并且从Range
创建的任何数组都是2-d,即使它是单行或列。
您可以使用'双Transpose
特技`这个question。请注意高票通过的答案,而不是接受的答案。
例如为:
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
我想你在我的代码中发现了问题,它是Filter函数。我有你的函数工作,但我的范围是1行与多行,所以这意味着我需要'arr = Application.WorksheetFunction.Transpose(WorksheetFunction.Range(rng.Value))'对吗?但是,这行不想为我工作 – SLT
单个'Tranpose'在测试代码中工作,所以不知道为什么它不适合你。但是,如果(在您的代码中)'cellA.Value'不是'InstallationNameRange'中的值,您将会得到下标超出范围。 –
做'Debug.Print UBound函数(过滤(InstallationNameRange,cellA.Value))''的前If'。如果它是一个错误,那么这就是你所得到的错误的可能原因。 –
什么是“过滤器”,它在哪里定义? – Vityata
@Vityata过滤器是VBA过滤器中的标准函数(SourceArray,Match,[Include],[Compare])https://msdn.microsoft.com/en-us/library/fat7fw0s(v=vs.90).aspx – SLT