我想在这里做左vlookup。我知道我有一些无法找到的值,但我不明白为什么在循环中间仍然会出现应用程序定义或对象定义错误的错误。感谢您的帮助。
With Sheet3
x = 2
Do Until IsEmpty(.Range("E" & x).value)
look = .Range("E" & x).value
result = WorksheetFunction.Index(Sheet2.Range("A:A"),
WorksheetFunction.Match(look, Sheet2.Range("B:B"), 0))
If Not IsError(result) Then
.Range("F" & x).value = result
Else
.Range("F" & x).value = " "
End If
x = x + 1
Loop
End With
答案 0 :(得分:0)
在VBA中,如果Variant包含vbError值,则IsErrror函数返回true。当未找到匹配时发生错误时,该值不会分配给Result
变量,即使它是变量。您必须使用On Error Goto ...
方法捕获该错误。
这不是什么大问题。您的代码可能如下所示。
Result = ""
On Error Resume Next
Result = WorksheetFunction.Index(Sheet2.Range("A:A"), _
WorksheetFunction.Match(look, Sheet2.Range("B:B"), 0))
.Range("F" & x).Value = Result
如果出现错误,变量Result将保留之前的值。因此它设置为""在功能之前。所以你不需要测试是否有错误。
在编写此代码的过程中,我发现您在Index函数的换行符时也错过了下划线。
答案 1 :(得分:0)
这个数组公式会完成这项工作吗?
=INDEX($B$1:$B$8,SMALL(IF($A$1:$A$8=$E$1,ROW($A$1:$A$8)),ROWS($G$1:$G1)))
它位于第1行到第8行