VBA – 在.formula中variables
有一个更优雅(更简单)的方法来把variables放在.formula中吗? 我不想使用.formulaR1C1
我有这个代码:
Range("C8").Select Selection.End(xlDown).Select PosR = ActiveCell.Row KonR = PosR - 2 Range("N" & PosR).Select aAddress = Range("$N$9").Address & ":" & Range("$N$" & KonR).Address ActiveCell.Formula = "=SUM(" & aAddress & ")"
很明显,我想把=SUM($N$9:$N$101)
(101是最后一个单元格减2)放到那个单元格中,这段代码完成这个工作。 但我只是想确定这是最简单的方法。
最简单的方法是跳过所有select和这些variables
PosR = Range("C8").End(xlDown).Row Range("N" & PosR).Formula = "=SUM($N$9:$N$" & PosR - 2 & ")"
编辑:要更明确, 最简单的方法是使用FormulaR1C1
但你说你不想,所以…
您可以使用下面的代码(不使用Select
和ActiveCell
:
PosR = Range("C8").End(xlDown).Row KonR = PosR - 2 Range("N" & PosR).Formula = "=SUM(" & Range("$N$9").Address & ":" & Range("$N$" & KonR).Address & ")"
或者 ,更简单的版本:
Range("N" & PosR).Formula = "=SUM($N$9:$N$" & KonR & ")"
那么你应该试图避免在VBA中使用Select
。 您已经在.Formula
实际包含了一个关于简单的variables,但是您的整个代码可以被简化:
PosR = Range("C8").End(xlDown).Row Range("N" & PosR).Formula = "=SUM($N$9:$N$" & PosR - 2 & ")"
真的,你应该完全符合你的范围,像这样
With ThisWorkbook.Sheets("Sheet1") PosR = .Range("C8").End(xlDown).Row .Range("N" & PosR).Formula = "=SUM($N$9:$N$" & PosR - 2 & ")" End With
如果C列中有空白单元格,那么使用xlDown
将无法find最后一个单元格。 您可能想要查找在VBA中查找最后一个单元格的方法,或者简单地使用
' Again, preferably fully qualified Range("C" & Rows.Count).End(xlUp).Row
Range("$N$9").Address
正好给出"$N$9"
。
Range("N9").Address
给出相同的。 因此,这有点过度。 查看下面示例中的前两个debug.print。
因此,一旦你计算出最后一行并给它lngLast
,就有可能得到这样的公式: "=SUM(N9:N" & lngLast & ")"
Option Explicit Public Sub TestMe() Dim strA As String Dim lngLast As Long strA = Range("$N$9").Address Debug.Print strA = "$N$9" strA = Range("N9").Address Debug.Print strA = "$N$9" lngLast = Range("N" & Rows.Count).End(xlUp).Row - 2 ActiveCell.Formula = "=SUM(N9:N" & lngLast & ")" End Sub
Good morning, everyone
🙂