Ⅰ 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函数的意义是否理解?