You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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截图:数组1截图
  • 数组2截图:数组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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 19:24:02