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

VLOOKUP动态列索引异常:跨表查找全部返回18的问题排查

VLOOKUP跨表查找全部返回同一值的问题修复

问题根源

  1. 重复覆盖单元格:内层J循环每次都给sh1.Cells(2, I)赋值,最终仅保留最后一次循环的结果,导致所有目标单元格返回同一个值。
  2. 未限定工作表的Range:Range("I2")未指定所属工作表,默认引用活动表,可能导致查找值错误。
  3. 目标区域不匹配:代码操作的是Sheet1第2行的列,和你需要的W27至W44(第27-44行、W列)完全不符。

修复代码

Sub VLookup_Fixed()
    Dim rowNum As Integer
    Dim matchCol As Integer
    Dim sh1 As Worksheet, sh2 As Worksheet
    
    Set sh1 = ThisWorkbook.Worksheets("Sheet1")
    Set sh2 = ThisWorkbook.Worksheets("Sheet2")
    
    ' 遍历Sheet1的W27到W44(第27至44行,W列对应第23列)
    For rowNum = 27 To 44
        ' 获取当前行I列的查找值
        Dim lookupVal As Variant
        lookupVal = sh1.Cells(rowNum, 9).Value ' I列是第9列
        
        ' 匹配Sheet2表头对应的列号
        matchCol = Application.Match(sh1.Cells(1, 23).Value, sh2.Range("I1:AA1"), 0)
        
        ' 执行VLOOKUP并赋值到当前行W列
        If Not IsError(matchCol) Then
            sh1.Cells(rowNum, 23).Value = Application.VLookup(lookupVal, sh2.Range("I:AA"), matchCol, 0)
        End If
    Next rowNum
End Sub

关键调整点

  • 明确工作表范围:所有单元格引用都绑定sh1或sh2,避免活动表干扰。
  • 匹配目标区域:直接遍历27-44行,对应你需要的W27至W44单元格。
  • 简化逻辑:移除冗余的内层循环,根据需求直接匹配W列表头对应的Sheet2列。
  • 错误防护:增加IsError判断,防止表头匹配失败导致代码中断。

内容的提问来源于stack exchange,提问作者Adde

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 19:50:46