我使用if函数创建了一个宏,但它似乎不起作用。我错了什么?

时间:2012-11-15 13:33:22

标签: excel vba excel-vba

我创建了一个宏来显示以下内容:

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 

然而,这似乎不起作用。
让我解释一下这应该如何运作:

此报告需要从应用程序下载 宏需要附加到此报告,以便在下载报告时,宏会在相应的列中自动运行此公式。

此外,我还必须使用此公式为所有行填充电子表格。

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

我在这里缺少什么?

2 个答案:

答案 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中是不必要的,因为公式保持不变......)