Excel 2010 VBA公式与变量搞乱

时间:2016-12-01 20:19:18

标签: excel vba excel-vba formula

我有这段代码:

LastLine = Range("C" & Rows.Count).End(xlUp).Row
LastLine = "C" & LastLine
Range(LastLine).Select
ActiveCell.FormulaR1C1 = "=SUM(R4C3:R[-1]C)"
Range("E13").FormulaR1C1 = "=if(R12C5 - " & LastLine & " <> 0,R12C5 - " & LastLine & ","""")"

对于公式而言,一切都是可行的,结果就是

&#34; = IF($ E $ 12 - $ Z:$ Z&lt;&gt; 0,$ E $ 12 - $ Z:$ Z,&#34;&#34;)&#34;

谁能看到我做错了什么?当我尝试

LastLine = Range(LastLine).address

它给了我一个错误

2 个答案:

答案 0 :(得分:2)

未键入变量LastLine,并在整个代码中更改其类型。首先,它是一个数字(行数),然后你为它分配文本,字母C与行号结合,例如“C3”。接下来,在R1C1引用中使用它,其中C3表示第3列,因此第一个LastLine赋值中的行号最终将作为公式中的列。

如果您的变量调暗为特定类型,并且您不会将A1表示法与R1C1混合,则您的代码会更清晰。

Sub test()
Dim LastLine As Long
Dim LastLineCell As String

LastLine = Range("C" & Rows.Count).End(xlUp).Row
LastLineCell = "C" & LastLine
Range(LastLineCell).Select
ActiveCell.FormulaR1C1 = "=SUM(R4C3:R[-1]C)"
Range("E13").FormulaR1C1 = "=if(R12C5 - R" & LastLine & "C26 <> 0,R12C5 - R" & LastLine & "C26,"""")"
End Sub

答案 1 :(得分:1)

由于您使用的是R1C1表示法,因此您必须将CsomeRow翻译为RsomeRowC3

Range("E13").FormulaR1C1 = "=if(R12C5 - R" & LastLine & "C3 <> 0,R12C5 - R" & LastLine & "C3,"""")"