VBA数组间使用通配符VLOOKUP返回Error 2042问题求助
问题原因
Error 2042为VBA调用工作表VLOOKUP函数无匹配结果时返回的标准错误值,原始代码存在两个核心问题:
- 通配符规则不支持内存数组:VLOOKUP的
*通配符匹配仅对工作表单元格区域生效,直接传入VBA内存数组作为查找范围时,通配符不会被识别,仅会执行完全匹配,因此无法命中仅前5位一致的结果 - 数组初始化错误:
ReDim arr9(LBound(arr7) + UBound(arr7))写法不严谨,当arr7的起始下标不为0时会出现下标越界问题
解决方案
改用双层遍历匹配逻辑,不需要依赖工作表函数,执行效率更高,适配内存数组匹配场景:
Dim arr9 As Variant Dim i As Long, j As Long Dim targetPrefix As String ' 按arr7的维度初始化结果数组 ReDim arr9(LBound(arr7) To UBound(arr7)) For i = LBound(arr7) To UBound(arr7) targetPrefix = Left(arr7(i), 5) arr9(i) = "" ' 无匹配时默认返回空值,避免错误 ' 遍历查找数组匹配前缀 For j = LBound(Arr) To UBound(Arr) If Left(Arr(j), 5) = targetPrefix Then arr9(i) = Arr(j) Exit For ' 匹配成功直接退出内层循环,减少冗余计算 End If Next j Next i
原始参考信息
- 数组1截图:

- 数组2截图:

- 报错截图:

- 原始报错代码:
Dim arr9 As Variant ReDim arr9(LBound(arr7) + UBound(arr7)) i = 0 For i = LBound(arr7) To UBound(arr7) Step 1 arr9(i) = Application.VLookup(Left(arr7(i), 5) & "*", Arr, 1, 0) Next i
内容的提问来源于stack exchange,提问作者Thayskills
相关产品推荐
相关产品推荐

