在VBA

2016-05-27 63 views
9

使用SUM()如果我有一組細胞在工作,我想加起來的,我可以用公式:在VBA

=SUM(Sheet1!A1:A10) 

要在子做到這一點,我會用:

Sub example1() 
    Dim r As Range, v As Variant 

    Set r = Sheets("Sheet1").Range("A1:A10") 
    v = Application.WorksheetFunction.Sum(r) 
End Sub 

但是,如果我想在多個工作表添加了一個單細胞,我使用的公式:

=SUM(Sheet1:Sheet38!B2) 

在VBA此行悲慘的失敗了,如解釋Specify an Excel range across sheets in VBA

Sub dural() 
    v = Application.WorksheetFunction.Sum("Sheet1:Sheet3!B2") 
End Sub 

我有兩種解決方法。我可以通過編程一個循環的總和:

Sub example2() 
    Dim i As Long 
    Dim v As Variant 

    v = 0 
    For i = 1 To 38 
     v = v + Sheets(i).Range("B2") 
    Next i 
End Sub 

或使用Evaluate()

v = Evaluate("Sum(Sheet1:Sheet3!B2)") 

是否有可能使用Application.WorksheetFunction.Sum()此計算,或者我應該堅持的循環?

+0

爲什麼不評價? – findwindow

+0

我很久沒有做這個了,所以我不會把這個作爲答案加入,直到你可以嘗試,但是你不需要也可以使用:'Set r = Sheets(「Sheet1」) .Range(「Sheet1:Sheet3!B2」)'然後在'r'上做'Sum'?或者類似......無論您需要如何創建紙張範圍。儘管如此,你可能更喜歡使用其他方法之一。 – gmiley

+1

@findwindow我使用'Evaluate()',它工作正常....但如果我必須根據動態範圍計算*(在所有工作表中相同)*,還有一個額外的步驟使得我必須提供字符串評價()' –

回答

2

我相信工作表function.sum的問題是它需要參數來評估不是字符串。 WorksheetFunction.Sum(「Sheet1!A1:A3」)也失敗。但是,這個成功

Application.WorksheetFunction.Sum(Sheet1.Range("A1"), Sheet2.Range("A1")) 

範圍可以是任何你喜歡的。

+0

.............謝謝............. –

1

您需要使用循環來執行跨所有工作表的計算,這是通過外觀來看最有效的方法。如上所述,您可以單獨鍵入每個範圍。

可能值得將你的加法範圍轉換爲雙精度(或單精度,整數等),因爲有時VBA將數字讀爲文本。

v = v + Cdbl(Sheets(i).Range("B2"))

爲什麼您遇到的問題Application.WorksheetFunction.Sum("Sheet1:Sheet3!B2")的原因是,如果你輸入公式到Excel,範圍「工作表Sheet1:Sheet3的B2」不會用Excel認可。

enter image description here

要使用Application.WorksheetFunction它在Excel工作VBA之外。

希望有所幫助。

+0

謝謝! ........................... –

+0

公平地說,截圖中的範圍有一個錯字。冒號前有一個額外的'!'。 –