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
关键说明
- 用
"$D" & Dept_Row & ""替代原有的$D2,每次循环Dept_Row自增,公式会自动引用对应行的D列单元格 - 原代码中
Table1 = Worksheets1.Range("D:D")属于对象赋值错误,必须加Set关键字,否则会把单元格值存入数组而非引用范围 - 使用
.Formula属性而非直接赋值字符串,是VBA操作公式的标准写法
内容的提问来源于stack exchange,提问作者Alexis Marquez
相关产品推荐
相关产品推荐

