2010-02-26 19 views
1

好吧,這就是我想要完成的。對於這個例子,我有一個單獨的工作簿,由4張數據表和一個總計表組成。 4個數據表中的每一個都具有相同的名稱,其中唯一的區別是日期。 (例如9854978_1009_US.txt,其中1009是在文件名的其餘部分相同時更改的日期)。在這些文件的每一列中,F都包含一系列我希望找到總和的數字,但我不知道F中有多少個單元格實際上包含數字。 (但是,下面的數字永遠不會有額外的信息,所以我理論上可以將整個F列加在一起)。我還會隨着時間的推移將新文件添加到工作簿中,並且不希望重寫我從F列收集數據的代碼。基本上,我想要完成的是「總計」文檔將每列F從工作簿中的文檔名稱爲'9854978 _ ???? _ US.txt',其中問號根據文件名稱進行更改。我將如何去純粹的Excel代碼中做這件事?如何從單個工作簿中的多個工作表中的同一列收集數據?

回答

0

在這種情況下,我會推薦使用VBA,但是我發現了一個只有Excel公式無效的解決方案。

在新工作表的單元格A1中寫入1,然後在下面的單元格中輸入2。 選擇兩個單元格並向下拖動。自動完成功能將產生從1開始的數字,直到拖動結束。繼續執行,直至達到9999的數字

在單元格B1中輸入公式=TEXT(A1,"000#");將公式向下拖動以獲得文本至。

在單元格C1中輸入公式="9854978_"&B1&"_US.txt";將公式向下拖動以獲取文本從9854978_0001_US.txt到9854978_9999_US.txt

在單元格D1中輸入公式: =if(ISERROR(SUM(INDIRECT(C1&"!F:F"))),0,SUM(INDIRECT(C1&"!F:F")));將公式向下拖動以獲得總和。

該解決方案可能變得低效率減少可能的數字集。缺少一年的可能日期只有365.

PS:公式可能會有點不對,因爲我從我的本地化版本的Excel中翻譯了它們。

0

下面是會做這種計算的函數:

Function TotalColF() As Double 

    Dim wks As Worksheet 

    For Each wks In ThisWorkbook.Worksheets 
     If left(wks.name,7) = "9854978" then 
      TotalColF = TotalColF + Application.WorksheetFunction.Sum(wks.Range("F:F")) 
     End If 
    Next wks 

End Function 

這不是揮發性功能,因此,如果您添加另一個表,或更改F列的值,修改後的總不會顯示,直到您通過按Ctrl + Alt + F9強制進行重新計算。

如果您需要一個易於顯示正確總數的易失性函數,請告訴我。揮發性功能可能會使重新計算時間變慢,但這對您而言可能不是問題。

如果通過VBA添加新工作表,則可以使用VBA指令強制重新計算:Application.CalculateFull

相關問題