我有一个相对较小的表(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来将行锁定为绝对值,并且公式正确复制到相邻单元格中(就像您将光标并填写值)。该代码现在可以工作,但是显然值都相同。有什么建议可以解决这个问题,或者有更好的解决方法?
答案 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}}粘贴范围。