Ⅰ Excel濡備綍楂樻晥奼囨誨氫釜宸ヤ綔綈挎暟鎹錛熶竴鏂囩粰浣犺叉竻妤氾紒銆愰檮瀹屾暣鐨刅BA浠g爜銆佷嬌鐢ㄨ嗛戙
鍦‥xcel鐨勪笘鐣岄噷錛屾暟鎹鏁村悎鏄涓欏逛笉鍙鎴栫己鐨勬妧鑳姐傚綋浣犻渶瑕侀珮鏁堝湴奼囨誨氫釜宸ヤ綔綈誇腑鐨勬暟鎹錛屽彲鑳戒細閬囧埌鏍煎紡涓嶇粺涓鍜屾爣棰樿屽勭悊鐨勬寫鎴樸傚埆鎷呭績錛岃繖綃囨寚鍗楀皢涓轟綘鎻紺哄備綍閫氳繃VBA緙栫▼瀹炵幇榪欎竴鐩鏍囷紝鍚屾椂闄勪笂瀹炵敤鐨勪唬鐮佺ず渚嬪拰鎿嶄綔瑙嗛戱紝璁╀綘鐨勫伐浣滄洿鍔犲緱蹇冨簲鎵嬨
棣栬佸師鍒欐槸紜淇濇墍鏈夊伐浣滅翱鐨勬牸寮忓拰鏍囬樿屼繚鎸佷竴鑷達紝鍚﹀垯鍙鑳戒細褰卞搷鏁版嵁鐨勫噯紜鎬у拰鍙鐢ㄦс傝繖鏄浣犵殑鏁版嵁闆嗘垚涔嬫棶鐨勮搗璺戠嚎銆
璁╂垜浠娣卞叆鎺㈣ㄥ備綍緙栧啓VBA鑴氭湰鏉ヨ嚜鍔ㄥ寲榪欎釜榪囩▼銆傝繖閲屾湁涓ょ嶆柟娉曚緵浣犻夋嫨錛
鎿嶄綔姝ラゅ備笅錛
榪欎釜浠誨姟鐨勯毦搴﹁瘎鍒嗕負⭐️⭐️⭐️錛屾剰鍛崇潃瀹冩棦闇瑕佷竴浜涘熀紜鐨刅BA鐭ヨ瘑錛屼篃鑰冮獙浜嗘暟鎹澶勭悊鍜岄昏緫鎬濈淮銆傚傛灉浣犳e湪澶勭悊10涓鎴栨洿灝戠殑宸ヤ綔綈匡紝榪欏皢鏄涓涓鐞嗘兂鐨勫疄璺甸」鐩銆
瀹屾垚鏁版嵁鏁村悎鍚庯紝浣犲皢鐪嬪埌涓涓鏁存磥鐨勬眹鎬誨伐浣滆〃錛屾竻鏅板湴灞曠ず浜嗘墍鏈変俊鎮銆傝嗛戞暀紼嬩笉浠呮紨紺轟簡鏁翠釜榪囩▼錛岃繕鎻愪緵浜嗚В絳旂枒闂鍜岃繘闃舵妧宸х殑棰濆栧府鍔┿傝塊棶[閾炬帴](瑙嗛戦摼鎺)浠ヨ幏鍙栨洿澶氳︾粏鎸囧煎拰VBA榪涢樁鎶宸э紝濡係QL鍩虹鐭ヨ瘑銆乂BA鍩虹銆丒xcel鎻掍歡鐨勮繍鐢ㄧ瓑銆
嬈蹭簡瑙f洿澶氬疄鐢ㄦ暀紼嬪拰鑱屼笟鍙戝睍寤鴻錛屼笉濡ㄥ叧娉ㄦ垜浠鐨勪笓瀹跺崥涓伙細[鑱屽満鑰侀笩涓婚〉](https://www.example.com/yourexpert)錛岄偅閲屾湁涓板瘜鐨勮祫婧愮瓑寰呬綘鍘繪帰緔銆
鐜板湪錛屼綘宸茬粡鎺屾彙浜咵xcel鏁版嵁奼囨葷殑VBA縐樼睄錛屽噯澶囧紑濮嬩綘鐨勯珮鏁堟暣鍚堜箣鏃呭惂錛
Ⅱ 求VBA合並多個excel表格,並且分類匯總求和
合並表格用vba,合並數據再用power query,分了兩步,這樣比較省事。
VBA代碼:
Sub hebing()
Dim 行號%, 路徑$, 文件$, WB As Workbook, SHT As Worksheet
Application.ScreenUpdating = 0
Worksheets("Sheet1").Cells.Clear
Worksheets("Sheet1").Range("A1:C1") = Array("姓名", "數量", "金額")
路徑 = "C: est合並"
ChDir 路徑
文件 = Dir("*.xlsx")
行號 = 2
Do Until 文件 = ""
Set WB = GetObject(路徑 & 文件)
Set SHT = WB.Worksheets(1)
SHT.Range("A2:C" & SHT.UsedRange.Rows.Count).Copy
ThisWorkbook.Worksheets("Sheet1").Cells(行號, 1).PasteSpecial
行號 = ThisWorkbook.Worksheets("Sheet1").UsedRange.Rows.Count + 1
WB.Close
文件 = Dir
Loop
Set WB = Nothing
Sheet1.Select
Sheet1.UsedRange.Select
Sheet1.ListObjects.Add(xlSrcRange).Name = "合並"
Sheet2.[a1].ListObject.QueryTable.Refresh
Application.ScreenUpdating = 1
End Sub
PowerQuery代碼:
let
源 = Excel.CurrentWorkbook(){[Name="合並"]}[Content],
分組的行 = Table.Group(源, {"姓名"}, {{"數量", each List.Sum([數量]), type number}, {"金額", each List.Sum([金額]), type number}})
in
分組的行
操作方法:
Ⅲ VBA匯總統一文件夾下的多個表格的數據
大家好,今天繼續講解《VBA資料庫解決方案》,今日講解的是第37講,利用ADO,實現同一文件夾下多個EXCEL工作表的數據匯總。最近的內容實用性比較強,如今日的內容,只把需要匯總的EXCEL文件放在同一個文件夾下,而且格式一致,那麼利用ADO匯總這幾個文件的數據是非常快的,這講的內容和第32講的內容是類似的,不過第32講的內容是要事先知道文件的名稱,然後建立一個數組來分別對應每個文件,通過循環來實現從每個文件中提取數據的目的,本講的內容是事先不知道每個文件的名稱。
實例:在一個文件夾下有若干個文件,如下圖:
我們現在,需要把上面的文件夾中除了「VBA與資料庫操作」之外的各個文件的內容一次性匯總出來,這個VBA程序該如何寫呢?代碼如下:
Sub mynzexcels_6()
'第37講,利用ADO,實現同一文件夾下EXCEL工作表數據的匯總
Dim cnADO As Object
Dim strPath, strTable, strSQL, Z As String
Set cnADO = CreateObject("ADODB.Connection")
Range("a:g").ClearContents
Range("a1:e1") = Array("日期", "型號", "批號", "出庫數量", "庫存數量")
Z = Dir(ThisWorkbook.Path & "\*.*")
strPath = ThisWorkbook.Path & "\" & Z
strTable = "[sheet1$A2:h65536]"
'建立連接,提取數據
x = 2
Do While Z <> ""
If Z <> "VBA與資料庫操作.xlsm" Then
cnADO.Open "provider=Microsoft.ACE.OLEDB.12.0;extended properties='excel 8.0;hdr=no;imex=1';data source=" & strPath
strSQL = "select F1,F2,F3,F4,F5 from " & strTable
Range("A" & x).CopyFromRecordset cnADO.Execute(strSQL)
x = Range("b65536").End(xlUp).Row
cnADO.Close
End If
Z = Dir
Loop
Set cnADO = Nothing
End Sub
代碼截圖:
代碼講解:
1 Z = Dir(ThisWorkbook.Path & "\*.*") 其中DIR函數用來指定文件名的字元串表達式,可能包含目錄或文件夾、以及驅動器。如果沒有找到 pathname,則會返回零長度字元串 ("")。
2 strPath = ThisWorkbook.Path & "\" & Z
strTable = "[sheet1$A2:h65536]"
上述代碼分別給出了文件的路徑名稱和數據表的范圍,數據的范圍是sheet1工作表除去表頭後的全部$A2:h65536.
3 strSQL = "select F1,F2,F3,F4,F5 from " & strTable
Range("A" & x).CopyFromRecordset cnADO.Execute(strSQL)
建立連接後把需要的數據拷貝出來,需要的數據是第1列,第2列,第3列,第4列 ,第5列
4 x = Range("b65536").End(xlUp).Row 下次復制的位置確定.
5 Z = Dir
特別注意:第一次調用 Dir 函數時,必須指定 pathname,否則會產生錯誤。如果也指定了文件屬性,那麼就必須包括 pathname。Dir 會返回匹配 pathname 的第一個文件名。若想得到其它匹配 pathname 的文件名,再一次調用 Dir,且不要使用參數。如果已沒有合乎條件的文件,則 Dir 會返回一個零長度字元串 ("")。一旦返回值為零長度字元串,並要再次調用 Dir 時,就必須指定 pathname,否則會產生錯誤。不必訪問到所有匹配當前 pathname 的文件名,就可以改變到一個新的 pathname 上。但是,不能以遞歸方式來調用 Dir 函數。以 vbDirectory 屬性來調用 Dir 不能連續地返回子目錄。由於文件名並不會以特別的次序來返回,所以可以將文件名存儲在一個數組中,然後再對這個數組排序。
上述的Z=dir 就是實現的下一個文件名的調用。
下面看運行的結果:
點擊「ADO實現同文件夾下所有文件數據匯總」按鈕:
匯總後再A到E列給出了數據的匯總:
今日內容迴向:
1 在不知道文件名和文件個數的前提下,如何匯總文件?
2 DIR函數的意義是否理解?