2017-07-26 486 views
1

是否有更優雅(更簡單)的方式將變量放入.formula中?我不想用.formulaR1C1VBA - .formula中的變量

我有這樣的代碼:

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)轉換成細胞和這個代碼的工作。但我只想確保這是最簡單的方法。

回答

1

您可以使用以下(代碼不使用SelectActiveCell

PosR = Range("C8").End(xlDown).Row 
KonR = PosR - 2 

Range("N" & PosR).Formula = "=SUM(" & Range("$N$9").Address & ":" & Range("$N$" & KonR).Address & ")" 

或者,備受simplier版本:

Range("N" & PosR).Formula = "=SUM($N$9:$N$" & KonR & ")" 
3

最簡單的方法就是跳過所有的選擇和那些變量

PosR = Range("C8").End(xlDown).Row 
Range("N" & PosR).Formula = "=SUM($N$9:$N$" & PosR - 2 & ")" 

編輯:要更明確,在最簡單的的方法是使用FormulaR1C1但你說你不想,所以...

+0

37打我吧秒:) :) –

+0

我們應該提到'Range(「C8」)。End(xlDown).Row'不會總是*找到最後一個使用的行,我認爲他真的想要,因爲他說「* 101是最後一個細胞減2 *「。因此'Range(「C」&Rows.Count).End(xlUp).Row'會更好。 –

+0

@Peh可能會也可能不會是真的,但我認爲它只是分散了實際問題,所以我忽略了它。 :)另外,'End(xlUp)'有它自己的問題。 – Rory

1

那麼你應該嘗試avoid using Select in VBA。你已經有了一個變量在.Formula實際包含約一個簡單的,因爲它得到,但你的整個代碼可以簡化爲:

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將無法​​找到最後一個單元格。你可能想看看ways of finding the last cell in VBA或者乾脆使用

' Again, preferably fully qualified 
Range("C" & Rows.Count).End(xlUp).Row 
0

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 :)