vbs 合并 excel 表格

18 篇文章 1 订阅

项目进入到要测试数据的阶段了。

从数据库导出一堆 excel 表,但看它们就这样散着真不舒服。所以合并一下吧。

在网上搜了半天,竞然都没有找到现成通用的VBS脚本,真坑爹。只能自己来了。


Dim source_XLS,final_XLS_name,fileConut

'----------------------------------- 配置参数 ---------------------------------
'这里是文件名,想要什么直接改引号中间的文字就行了
xls_name  = "数据统计表"
'------------------------------------------------------------------------------

'----------准备文件操作----------
Set fso = CreateObject("Scripting.FileSystemObject")

'----------准备WshShell----------
Set WshShell=WScript.CreateObject("Wscript.Shell")

'----------准备excel对象----------
Set oExcel = CreateObject("Excel.Application")
oExcel.Visible = 0

'vbs 所在目录
XLSFolder = WshShell.CurrentDirectory
'文件名自动加日期后缀
final_XLS_name = "\"&xls_name&"_"&Date

'清理旧表(vbs 模糊删除太麻烦,所以调用命令行)
'fso.DeleteFile(xls_name&"*") 
WshShell.run  "%Comspec% /C DEL "&xls_name&"*.*",0

'调用
ProcessAllFiles XLSFolder

'-----------打完收功----------------
oExcel.Quit

MsgBox "成功合并【"& fileConut & "】个表格" ,0+64-64+256,"合并 Excel 表格!"

'* 遍历文件夹
'******************************
Function ProcessAllFiles(folderspec)        
	Dim fd, fs, f
	Set fd = fso.GetFolder(folderspec)
	Set fs = fd.Files
	
	Dim Workbook_to,Workbook_form
	
	Set Workbook_to = oExcel.Workbooks.Add
	
	oExcel.DisplayAlerts = False	
	
	For Each f In fs
		If UCase(Right(f.Path, 4)) = ".XLS" Or UCase(Right(f.Path, 5)) = ".XLSX" Then
			Set Workbook_form = oExcel.Workbooks.Open(f.Path, 0, True)
			
			'改 sheet 名字,只留中文部分
			sheetName = Workbook_form.Worksheets(1).name
			tempName = Split(sheetName,"_")
			Workbook_form.Worksheets(1).name  = tempName(UBound(tempName))    		
			
			'移动sheet
			Workbook_form.Worksheets(1).move Workbook_to.Worksheets(1)
			
			Workbook_form.Close 	
			fileConut = fileConut+1
			WshShell.Popup "成功合并: "&f.Name, 1, "合并 Excel 表格!", 0 + 32
		End If
	Next
	
	'删除默认的 sheet1
	Workbook_to.Worksheets("Sheet1").Delete 
			
	Workbook_to.SaveAs fd & final_XLS_name
	Workbook_to.Close 	
	
	oExcel.displayalerts=True	
	oExcel.Quit
	
End Function



可以使用 VBA 代码来合并多个 Excel 文件,以下是一个简单的示例: ``` Sub mergeExcelFiles() Dim folderPath As String, selectedFiles() As String Dim i As Integer Dim wb As Workbook, ws As Worksheet Dim destWb As Workbook, destWs As Worksheet '选择要合并的文件夹 With Application.FileDialog(msoFileDialogFolderPicker) .Title = "请选择要合并的文件夹" If .Show Then folderPath = .SelectedItems(1) End With '获取文件夹中所有的 Excel 文件 selectedFiles = getExcelFiles(folderPath) '新建一个工作簿,用于合并数据 Set destWb = Workbooks.Add Set destWs = destWb.Sheets(1) '遍历所有 Excel 文件,将数据合并到新工作簿中 For i = 0 To UBound(selectedFiles) Set wb = Workbooks.Open(selectedFiles(i)) Set ws = wb.Sheets(1) '将数据复制到新工作簿中 ws.UsedRange.Copy destWs.Cells(destWs.Rows.Count, 1).End(xlUp).Offset(1) wb.Close False Next i '保存合并后的数据 destWb.SaveAs folderPath & "\合并后的数据.xlsx" destWb.Close False MsgBox "合并完成!" End Sub '获取指定文件夹中的所有 Excel 文件 Function getExcelFiles(folderPath As String) As String() Dim files() As String, i As Integer, j As Integer ReDim files(0) i = 0 '获取文件夹中所有的文件 files = Split(CreateObject("WScript.Shell").Exec("cmd /c dir """ & folderPath & "\*.xlsx"" /b /s").StdOut.ReadAll, vbCrLf) '筛选出 Excel 文件 For j = 0 To UBound(files) If InStr(files(j), ".xlsx") > 0 Then files(i) = files(j) i = i + 1 ReDim Preserve files(i) End If Next j ReDim Preserve files(i - 1) getExcelFiles = files End Function ``` 这段代码会弹出一个对话框,让你选择要合并Excel 文件所在的文件夹。然后它会遍历该文件夹中的所有 Excel 文件,并将它们的数据合并到一个新的工作簿中。最后,它会将合并后的数据保存为一个新的 Excel 文件。你可以根据自己的需要修改代码中的路径和文件名。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

笑虾

多情黯叹痴情癫。情癫苦笑多情难

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值