遍历每个表行并插入不同的公式

时间:2019-08-28 20:58:40

标签: excel vba ms-office

我有一个带有预定义行和列的表。我想遍历每一行并将不同的公式放入每个单元格。该单元格应显示来自其他工作表的数据。对于每一列都要重复此步骤。

                                      Repeat:
+--------+--------+-----+---------+  1 || 2 ->
|Column 1|Column 2| ... | Column n|  |
+--------+--------+-----+---------+  |
|row 1   | row 1  | ... | row 1   |  |
+--------+--------+-----+---------+  v
|                ...              |
+--------+--------+-----+---------+
|row n   | row n  | ... | row n   |
+--------+--------+-----+---------+

我尝试使用for循环,该循环一直运行到最后一行,并将带有.FormulaLocal方法的公式放入当前单元格中。

For i = 1 To UBound(bmPos)
        curTable.DataBodyRange.Cells(i, curTable.ListColumns("Column1").Index).FormulaLocal = _
                "=Table1!" & wksBM.Cells(bmPos(i), rngDate.Column).Address
        [...]
        curTable.DataBodyRange.Cells(i, curTable.ListColumns("ColumnN").Index).FormulaLocal = _
                "=Table1!" & wksBM.Cells(bmPos(i), rngCustomer.Column).Address
Next i

预期结果是每个单元格 i 都包含这样的公式: = Table1!$ A $ 1 ... = Table1!$ A $ i

当我使用调试器逐步执行代码时,看到的是,在第一次迭代中,所有行将获得相同的值。因此,在最后一次迭代之后,所有行都包含公式= Table1!$ A $ i

实际上,当我只用 i 替换整个公式时,我在单元格中获得了正确的迭代步骤。

1 个答案:

答案 0 :(得分:1)

Excel表格会使用您在任何行上输入的最后一个公式自动填充整列。

为防止这种情况,请将Application.AutoCorrect.AutoFillFormulasInLists = False放在Sub的开头。