我已经使用if函数创build了一个macros,但它似乎不工作。 我错了什么?

我创build了一个macros来显示以下内容:

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 

但是,这似乎并没有工作。
让我再解释一下这应该如何工作:

此报告需要从应用程序下载。
macros需要被附加到这个报告,所以当我下载报告时,macros会自动在相应的列中运行这个公式。

此外,我将不得不使用此公式填充所有行的电子表格。

公式所在的列不是空白的,但是一旦macros运行,就需要在报告中自动处理。

我在这里错过了什么?

当您使用Range.Formula = formulaAsString ,并且范围指的是多个单元格时,请指定确切的公式string(仅)该范围中的第一个单元格所需的,同时适当地使用相对与绝对单元格引用,因为分配到多个(成功)单元格会发生,就好像您将该范围中的第一个单元格粘贴到其他单元格一样,就好像您在不使用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" 

你正在混淆.FormulaR1C1 ! 您的string是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中是不必要的,因为公式保持不变)