我创建了一个宏来显示以下内容:
If (I3<>0,I3*G3,H3*G3)
并且这会为单元格N3, R3, V3, Z3
等重复。
Option Explicit
Sub Eg()
Range("J3, N3,R3, V3,Z3,AD3,AH3,AL3,AP3,AT3,Ax3,BB3,XF3,BJ3").Formula = "=IF(RC[-1]<>0,RC[-1]*RC[-3],RC[-2]*RC[-3])"
End Sub
然而,这似乎不起作用。
让我解释一下这应该如何运作:
此报告需要从应用程序下载 宏需要附加到此报告,以便在下载报告时,宏会在相应的列中自动运行此公式。
此外,我还必须使用此公式为所有行填充电子表格。
公式所在的列不是空白,但是一旦运行宏,就需要在报告中自动满足。
我在这里缺少什么?
答案 0 :(得分:1)
使用Range.Formula = formulaAsString
时,范围指的是多个单元格,您可以根据(仅)范围中的第一个单元格指定确切的公式字符串,同时适当地使用相对与绝对单元格引用,因为分配到多个(后续)单元格将发生,就好像您将该范围中的第一个单元格粘贴到其他单元格中一样,就像您完成了一个副本&amp;没有VBA的粘贴 - 您使用绝对寻址A1与A $ 1对比$ A $ 1与$ A1等...根据需要实现对后续单元格的公式的正确更改。
例如,
Range ("A1, C1, E1").Formula = "=A2+$A2"
将与
具有相同的结果Range ( "A1" ).Formula = "=A2+$A2"
Range ( "C1" ).Formula = "=C2+$A2"
Range ( "E1" ).Formula = "=E2+$A2"
答案 1 :(得分:1)
您正在将.Formula
与.FormulaR1C1
混在一起!您的字符串是R1C1样式,但您将其指定给A1样式公式。
因此,简单地说,将其更改为:
Range("J3, N3,R3, V3,Z3,AD3,AH3,AL3,AP3,AT3,Ax3,BB3,XF3,BJ3").FormulaR1C1 = _
"=IF(RC[-1]<>0,RC[-1]*RC[-3],RC[-2]*RC[-3])"
或
Range("J3, N3,R3, V3,Z3,AD3,AH3,AL3,AP3,AT3,Ax3,BB3,XF3,BJ3").Formula = _
"=IF(I3<>0,I3*G3,H3*G3)"
正如Erik在答案中指出的那样,后者也会以相同的方式工作并调整每个单元格的公式(这在R1C1中是不必要的,因为公式保持不变......)