遍历表格并更改公式

时间:2019-11-26 17:10:51

标签: excel vba

我有一个相对较小的表(2-5行/ 7-9列),试图通过.formula循环并计算值。我在弄清楚如何引用所在单元格的列或行的绝对值时遇到一些问题。到目前为止,这是我已经硬编码的内容:

For i = 1 To Range("GapTable").Rows.Count
    For i2 = 2 To Range("GapTable").Columns.Count
        Range("GapTable").Cells(i, i2).Formula = "=IFERROR(ROUND(AVERAGEIFS(prof_gap, series, $A21, grade, B$20),2), ""N/A"")"
    Next i2
Next i

我正在尝试找出如何更改$ A21来将列锁定为绝对值,更改B $ 20来将行锁定为绝对值,并且公式正确复制到相邻单元格中(就像您将光标并填写值)。该代码现在可以工作,但是显然值都相同。有什么建议可以解决这个问题,或者有更好的解决方法?

1 个答案:

答案 0 :(得分:2)

正如我在评论中所写,您可以在动态引用指向左上方单元格的范围内进行粘贴,例如

with Range("GapTable")
    .range(.cells(1,2),.cells(.Rows.Count,.Columns.Count)).Formula = "=IFERROR(ROUND(AVERAGEIFS(prof_gap, series, $A21, grade, B$20),2), ""N/A"")"
end with

如果必须循环,则可以使用计数器,例如:

dim colnum as long, rownum as long
For i = 1 To Range("GapTable").Rows.Count
    For i2 = 2 To Range("GapTable").Columns.Count
        Range("GapTable").Cells(i, i2).Formula = "=IFERROR(ROUND(AVERAGEIFS(prof_gap, series, $A" & rownum & ", grade, " & cells(20,colnum).address & "),2), ""N/A"")"
        colnum = colnum + 1
    Next i2
    rownum = rownum + 1
Next i    

请注意,您必须将列号转换为地址,这就是cell()引用包含20的原因。

我没有包含将rownum / colnum分别重置为 reset 回到20/2的错误处理。如果由于某种原因您不能仅仅粘贴超出范围,就抛出该概念。


Edit1 :在.声明中忘记了cells(1,2)前面with的{​​{1}}粘贴范围。