2013-06-19 128 views
1

我正在嘗試編寫一個宏,該宏將在一列數字(如總和或平均值)下放置一個公式。我想出了這個:Excel宏插入功能

Sub foo() 
    ActiveSheet.Range(ActiveCell, ActiveCell.End(xlDown)).Select 
    ActiveCell.End(xlDown).Offset(1) = Application.WorksheetFunction.Sum(Selection) 
End Sub 

此函數將找到總和並將其放在您選擇頂部的數據列中的最後一個數字。這是有效的,但它不是動態的,新值只是一個值,如果我改變列中的一個數字,持有總和的單元格不會改變。所以我試圖把實際的功能放在單元格中。這是我目前有:

Sub foo() 
    ActiveCell.Offset(1).Formula = "=Sum(ActiveCell:ActiveCell.End(xlUp))" 
End Sub 

這個時候,我開始在底部,激活細胞,目前意在列的最後一個值。沒有檢測到錯誤,但輸出錯誤,「#NAME」。我試着玩報價,但沒有得到任何東西。例如:

Sub foo() 
    ActiveCell.Offset(1).Formula = "=Sum(" & ActiveCell:ActiveCell.End(xlUp) & ")" 
End Sub 

任何想法?

+0

您需要獲取想要求和的範圍的'Address()',並將其用於公式中。 –

+0

請詳細說明。 –

+0

'ActiveSheet.Range(ActiveCell,ActiveCell.End(xlDown)).Address()'會給你想要求和的範圍的地址。在公式中代替'ActiveCell:ActiveCell.End(xlUp)' –

回答

1

加里的學生的答案是非常接近,但也不能令人信服,這是我結束了:

Sub foo() 
    Dim s As String 
    s = Range(ActiveCell, ActiveCell.End(xlUp)).Address(0,0) 
    ActiveCell.Offset(1).Formula = "=SUM(" & s & ")" 
End Sub 

如果您選擇數據列中的最後一個單元格,它會將s這個公式就在它下面,它的動態性讓你可以自由地改變數據。

編輯:添加(0,0)地址,以便其動態。

1

考慮:

Sub dural() 
    Dim s As String 
    s = Range(ActiveCell, ActiveCell.End(xlDown)).Address 
    ActiveCell.End(xlDown).Offset(1, 0).Formula = "=SUM(" & s & ")" 
End Sub 
+0

我得到運行時錯誤1004 當我運行該應用程序定義或對象定義的錯誤。 –

1

如果您的數據總是在第1行開始,那麼你可以使用宏這樣:

ActiveCell.Offset(1).ForumulaR1C1 = "=SUM(INDIRECT(ADDRESS(1,COLUMN()) & "":"" & ADDRESS(ROW()-1,COLUMN())))"