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

VBA中INDEX-MATCH公式无法自动更新至对应行的问题

解决VBA公式引用行号不更新的问题

问题核心

你当前代码里的公式是硬编码固定行号,'Worksheets1'!$D2写死了引用D2,和控制写入位置的Dept_Row变量完全脱节,所以循环时只会重复生成引用D2的公式。

修改方案

把公式中的固定行号2替换成变量Dept_Row,通过字符串拼接生成对应行的引用:

Sub trial()
On Error Resume Next

Dim Dept_Row As Long
Dim Dept_Clm As Long
Dim Table1 As Range, Table2 As Range

' 修正对象赋值错误,明确工作表名称
Set Table1 = Worksheets("Worksheets1").Range("D:D")
Set Table2 = Worksheets("Worksheets2").Range("A:B")

Dept_Row = Worksheets("Worksheets1").Range("A2").Row
Dept_Clm = Worksheets("Worksheets1").Range("A2").Column

For Each cl In Table1
    If IsEmpty(cl) Then Exit Sub
                                             
    If Not IsEmpty(cl) Then 
        ' 关键:用Dept_Row变量拼接行号,生成$D2、$D3、$D4...的动态引用
        Worksheets("Worksheets1").Cells(Dept_Row, Dept_Clm).Formula = _
          "=INDEX('Worksheets2'!$B:$B,MATCH('Worksheets1'!$D" & Dept_Row & ",'Worksheets2'!A:A,0))"
    End If

    Dept_Row = Dept_Row + 1
Next cl

Exit Sub

关键说明

  1. 用"$D" & Dept_Row & ""替代原有的$D2,每次循环Dept_Row自增,公式会自动引用对应行的D列单元格
  2. 原代码中Table1 = Worksheets1.Range("D:D")属于对象赋值错误,必须加Set关键字,否则会把单元格值存入数组而非引用范围
  3. 使用.Formula属性而非直接赋值字符串,是VBA操作公式的标准写法

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 03:35:27