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但你说你不想,所以…

您可以使用下面的代码(不使用SelectActiveCell

 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 🙂