在一個目錄下,有n張excel作業簿數量未知,檔案名未知。但是要統計的資料都位于作業簿的第二張表,且作業簿和表的結構是完全一致的。
單個表示例

匯總表:

如何將該目錄下的所有作業簿的第二章表的指定資料匯總到 總表中了
uj5u.com熱心網友回復:
Dim wkst As Worksheet, wkbk As Workbook, sumA As Currency, sumB As Currency
Set fso = CreateObject("Scripting.filesystemobject")
For Each file In fso.getfolder("D:").Files '到指定目錄里找檔案(不包含子目錄)
If LCase(Right(file.shortname, 3)) = "xls" Or _
Mid(LCase(StrReverse(file.shortname)), 2, 3) = "slx" Then
wkbk = Application.Workbooks.Open(file.Path) '如果檔案名是 .xls或者.xls? 結尾
wkst = wkbk.Sheets(2) '就打開作業簿,在第二個sheet的c列
wkst.Cells(1, 3).Formula = "=sumif(A:A,""a"",B:B)" '通過公式SUMIF對"a"和"b"
wkst.Cells(2, 3).Formula = "=sumif(A:A,""b"",B:B)" '條件求和(假定資料在AB兩列)
sumA = sumA + wkst.Cells(1, 3) '將公式結果累加到匯總資料中
sumB = sumB + wkst.Cells(2, 3)
wkbk.Close
End If
Next
Debug.Print sumA, sumB
uj5u.com熱心網友回復:
你是想用VBA實作嗎?其實也不算很難啊。
1. 檔案夾:
簡單粗暴的方法,用 Inputbox( ) 函式,讓“用戶”輸入要處理的目錄就行了。
如果要想做得高級點、人性化一點,那就可以用 API實作檔案夾選擇對話框;
也可以用 Shell物件選擇對話框;更直接的,可以用 Application.FileDialog來實作選擇。
在VBA環境中,推薦用 Application.FileDialog 實作。
2. 檔案:
有前一步選擇的“目錄”后,用Dir$( ) 函式列舉指定目錄中的所有 xlsx檔案(或xls檔案)。
簡單點的就是列舉一個處理一個。當然先全部列舉,存到字串陣列中,然后依次處理也行。
打開作業簿,用 Workbooks.Open( )函式介面就行。
3. 所謂“第二張表”:
如果確定“表物件名”是 Sheet2,那么在“操作作業表”時可以寫死為 .Sheet2 。
不確定的話,那么必須做到“作業表名”(指的是打開檔案后在“表標簽”上看到的文字)是統一的。
比如叫“Sheet2”,或者“xx資料記錄”等等,要看你的具體情況了。
這種情況下,可以用 相應作業簿物件的 .Sheets(2)、 .Sheets("Sheet2")、或者 .Sheets("xx資料記錄") ,
選擇任意一種方式來“確定作業表物件”就行了。
4. 讀取單元格資料
有很多種方式,比如用 objSheet.Range("C6").Value 就可以讀取指定作業表中C6單元格的值;
也可以用 objSheet.Cells(6, 3).Value 來讀取指定作業表中C6單元格的值。
在Range( )、Cells( )中的引數是可以用變數值的,因此可以很方便的用“回圈”來處理所有的單元格了。
5. 出“統計結果”
在上面“4.”中讀出來的資料,先“統計”到陣列中存盤下來。
在統計完所有的檔案后,再“寫入”一個指定的(或“新建”)作業表中就行了。
在上面“4.”中說的是“讀取”,其實過來操作:對其“賦值”,就是寫入資料了。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/40387.html
標籤:VBA
