公式中的动态列索引名称错误

问题描述

我正在尝试通过使用 Vlookup 填充列来计算从图纸计划到图纸结果的组件数量,具有:

  • Count_col:是表Plan中的总列
  • Last_col:是表Result中的总列(在添加列需求之前)

工作表结果

材质 组件 需求W1 需求W2
ABCD1000 nc200 #NAME? #NAME?

图纸计划

材质 需求W1 需求W2
ABCD1000 1000 200
    For i = 1 To count_col
        Cells(1,i + last_col).Value = "=Plan!RC[-2]"
        Cells(1,i + last_col).Offset(1,0).Select
        ActiveCell.FormulaR1C1 = "=VLOOKUP(RC1,Plan!C1:C15,i+1,0)"
    Next i

但结果是名称错误,我检查了函数的拼写是否正确,但不知道如何修复。为什么我的公式中有“@”?

错误详情

=VLOOKUP($A2,Plan!$A:$O,@i+1,0)

解决方法

i+1 中的

"" 表现得像一个字符串而不是一个变量。试试这个。

ActiveCell.FormulaR1C1 = "=VLOOKUP(RC1,Plan!C1:C15," & i + 1 & ",0)"

还要避免使用 .Select。你的代码可以写成

Cells(1,i + last_col).Offset(1,0).FormulaR1C1 = _
"=VLOOKUP(RC1,0)"

推荐阅读:How to avoid using Select in Excel VBA

您还混合了 R1C1A1 样式的引用。我建议使用其中之一。一个简单的 Google 搜索 R1C1 vs A1 style 将解释它们是什么。

R1C1中,Plan!C1:C15需要写成Plan!R1C3:R15C3。所以你的最终代码是

Cells(1,Plan!R1C3:R15C3,0)"

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...