2015-06-26 71 views
0

我有大量具有相同佈局的工作表,列G6:G38是年份和列H6:H38是相應的支付金額。我試圖創建一個簡單的公式,我可以在所有通過這些列搜索並在給定年份中總結金額的表單中使用該公式。 這是我寫到一個模塊中的功能:Excel VBA:函數應用於單個工作表

Public Function TPaid(Year As Integer) 
Application.Volatile 
Dim x As Integer 
x = 6 
Do Until x = 38 
    If Range("G" & x).Value = Year Then 
    TPaid = TPaid + Range("H" & x).Value 
    End If 
    x = x + 1 
Loop 
End Function 

插入的公式中的所有工作表中的單個細胞後,我發現,我的每個輸入公式時,它會導致相同的所有其他用途公式在其他工作表上顯示最近的計算。我怎樣才能使公式只適用於其輸入的工作表?

例如:在sheet1中的單元格A1我推定爲=Tpaid(2013)。然後在sheet2中的單元格A1我推定爲=Tpaid(2013)。點擊輸入sheet2後,顯示的金額正確,但現在sheet1中的金額已更改爲與sheet2中顯示的金額相同,但金額不正確。

+1

你可以很容易地做到這一點與表對象的資格'Range':'Application.Caller.Parent.Range( 「H」 &X).Value',但你不應該「T。相反,您應該將求和範圍作爲參數傳遞給函數,並移除'Application.Volatile'。更好的是,只需使用Excel已有的['SUMIF'函數](https://support.office.com/en-ca/article/SUMIF-function-169b8c99-c05c-4483-a712-1697a653039b)。 – GSerg

回答

1

正如GSerg所說,這可以通過幾種方式完成,其中最好的方法是=SUMIF(G6:G38,2013,H6:H38)

否則,

Public Function TPaid(Year As Integer) 
    Application.Volatile 
    Dim x As Integer, obj as Object 
    With Application.Caller.Parent 
    For x = 6 to 38 
     If .Range("G" & x).Value = Year Then TPaid = TPaid + .Range("H" & x).Value 
    Next 
    End With 
End Function 
相關問題