2014-09-04 65 views
0
=SUMIF('[filename1.xlsx]Sheet1'!$A:$A,C12,'[filename1.xlsx]Sheet1'!$Y:$Y)+SUMIF('[filename2.xlsm]Data from ABC'!$A:$A,C12,'[filename2.xlsm]Data from ABC'!$Y:$Y) 

上述公式被在filename3使用,但是,如果filename1filename2閉合它給和錯誤,我必須重新設定整個公式。爲了避免這種情況,我們如何才能給出文件名作爲單元格引用sumif公式如何給文件路徑到SUMIF()式中VBA

我正在使用以下公式,其中我給出了單元格A10,A11,B10,B11中的整個文件名,但它是不工作。

=SUMIF(A10,C12,A11+SUMIF(B10,C12,B11) 

您能否給我建議一個解決方案?

+1

您需要找到一種使用函數從封閉工作簿中提取值的不同方法。 [** HINT **](http://vba4all.wordpress.com/2013/10/11/various-ways-to-pull-data-out-of-a-closed-or-opened-workbook-using- Excel的公式和 - VBA /) – 2014-09-04 11:12:28

回答

0

功能SUMPRODUCT可以處理封閉的工作簿。但是這個函數中的參數在矩陣(數組)的上下文中,這對於整個列來說是非常不合適的。因此,如果您可以縮小從整列到部分列的範圍,以下內容纔有效。

打開這三個文件。在filename3中創建公式:

=SUMPRODUCT(('[filename1.xlsx]Sheet1'!$A$1:$A$1000=C12)*'[filename1.xlsx]Sheet1'!$Y$1:$Y$1000) 
+SUMPRODUCT(('[filename2.xlsm]Data from ABC'!$A$1:$A$1000=C12)*'[filename2.xlsm]Data from ABC'!$Y$1:$Y$1000) 

現在關閉文件名1和文件名2。現在在公式中應該是到filename1和filename2的完整路徑,並且這些值是可自動更新的。

問候

阿克塞爾

0

首先聲明一些變量來代表你的文件:

Dim f1 as Workbook, f2 as Workbook 
Set f1 = Workbooks("filename1.xlsx") 
Set f2 = Workbooks("filename2.xlsx") 

現在你可以在你的代碼中訪問這些對象,並使用他們的PathName財產會幫助建立依賴於這些工作簿關閉的公式字符串:

當引用公式是這樣,我覺得語法是:

'_workbook_path[_workbook_name_]_sheet_name'!_cell_address 

所以,像這樣(未經測試,可能需要一些調整,如果你的文件名/工作表的名稱中有空格的/ etc。)

ActiveCell.Formula = "=SumIf('" & f1.Path & "[" & f1.Name & "]Sheet1'!$Y:Y)+" & _ 
        "SumIf('" & f2.Path & "[" & f2.Name & "]Data from ABC'!$Y:Y)" 

等等

無論其

這不是何時/何你實現這個明確的,並且有可能會更好從未打開的書本中獲取數據的方法,包括ADODB和ExecuteExcel4Macro方法。

相關問題