2017-06-01 57 views
0

我已閱讀Application.WorksheetFunction.Sum,但我想知道是否存在執行該作業的Range對象的特定方法或屬性。我查看了Range的成員,但我沒有找到任何東西。VBA如何在不循環的情況下添加單元格值

有沒有方法添加不使用工作表函數?而不必循環遍歷每個單元格。喜歡的東西:

Sub test() 
    Range("A1") = 1 
    Range("A2") = 0 
    Range("A3") = 2 
    Range("A4") = Range("A1:A3").Add 
    MsgBox Range("A4") 
End Sub 

隨着輸出3.

+5

是'範圍( 「A4」)= Application.WorksheetFunction.Sum(範圍(「A1:A3」))'很不方便?爲什麼不使用它,如果它已經從微軟爲你量身定製? –

+0

我只是想知道是否有比我已經知道的明顯更簡單的東西。謝謝你的時間。 – dimitris

回答

2

下去的話,第4道:O)

evaluate(join(application.transpose(range("a1:a5").Value),"+")) 
+0

還不錯,完全沒有:D – Vityata

+0

順便說一句,我不確定你是否真的需要'轉置'。像這樣的東西也應該可以工作:'?evaluate(join(array(3,44,5),「+」))' – Vityata

+1

您需要範圍內的轉置,但不能關閉定義爲這樣的數組。你可以說'評估(「3 + 44 + 5」),儘管如果不使用範圍,似乎沒有意義:) –

2

一般情況下,還有第三種方式,你沒有提到:

Application.Sum

它比WorksheetFunction.Sum有點不同,事實上它有點離散 - 它不會拋出MsgBox的錯誤,即使它應該。 像這樣將只有2 MsgBox引發的錯誤,你將在即時窗口中獲得2個錯誤:

Option Explicit 

Public Sub WaysOfSumming() 

    'This is Div/0 Error: 
    Range("A1").Formula = "=5/0" 

    Debug.Print Excel.WorksheetFunction.Sum(Range("A1"), 3, 5) 
    Debug.Print Application.Sum(Range("A1"), 3, 5) 

    Debug.Print Excel.WorksheetFunction.Sum(Range("A1"), 3, 5) 
    Debug.Print Application.Sum(Range("A1"), 3, 5) 

End Sub 
相關問題