如何将一个EXCEL中的多个SHEET中内容合并到一个SHEET中
答案:2 悬赏:80 手机版
解决时间 2021-12-18 11:54
- 提问者网友:未信
- 2021-12-18 01:27
如何将一个EXCEL中的多个SHEET中内容合并到一个SHEET中
最佳答案
- 五星知识达人网友:你可爱的野爹
- 2021-12-18 02:57
新建一个总表,准备汇总
Alt+F11,VBA快捷键,在弹出的新界面中,左键双击坐标的名为”总表“的工作表,使后续的代码是复制到这个工作表中。
在右边的空白区域,复制下面的代码:
Sub main()
For Each sh In Sheets
If sh.Name <> "总表" Then
i = sh.Range("D65536").End(3).Row
k = Range("A65536").End(3).Row
sh.Range("A2:D" & i).Copy Range("A" & k + 1)
End If
Next
End Sub
代码详解:1.Sub main()——其中Sub 跟括号是固定的,main是宏名,可以随便更改(其实完全没有必要多此一举,这里可以不做任何修改)2.For Each sh In Sheets——这是遍历全部的工作表,这里就要注意,如果你的工作表中包含一些,不需要汇总数据的工作表,那么就需要将源数据表备份一份,然后将不需要汇总数据的工作表都删除掉,只剩下总表以及需要汇总数据的工作表(当然,还有其他办法,这里只讲解最简单地做法)3.If sh.Name <> "总表" Then——这里是判断工作表的名字是不是”总表“,如果是总表,就不汇总数据,本例中总表的名字就是”总表“,如果你的工作表中,总表名字是其他的,就将这里的”总表“改为你的工作总表明细;4.i = sh.Range("D65536").End(3).Row——这里要注意了"D65536",是为了获得最后一个不为空的行的行号,这里用了D列,因为本例中的D列是有数据的
,在实际的使用过程中,一定要选择一个最后一行有数据的列,否则不能获得最大行号(假如只有2列,那么这里的D可以改为B或者A)5.k = Range("A65536").End(3).Row——这里是获得总表的最大行号,以便复制的数据,能够依次往下粘贴;(这里的A65536跟上面提到的是一个道理,总表中的A列最后一行不是空的)6.sh.Range("A2:D" & i).Copy Range("A" & k + 1)——这里要注意“A2:D”&i是要复制的区域,因为本例中只有A-D列,而且数据是从第2行开始的,所以这里是A2:D,那假如是从E列第10行开始,到Z列结束的区域,就应该改为E10:Z;Range("A" & k + 1)——这里是从总表的A列开始粘贴,假如是从D列开始,那么这里的A改为D即可7.End If Next End Sub——这些是结束判断、继续循环和程序结束,都不需要更改。
保存执行代码
Alt+F11,VBA快捷键,在弹出的新界面中,左键双击坐标的名为”总表“的工作表,使后续的代码是复制到这个工作表中。
在右边的空白区域,复制下面的代码:
Sub main()
For Each sh In Sheets
If sh.Name <> "总表" Then
i = sh.Range("D65536").End(3).Row
k = Range("A65536").End(3).Row
sh.Range("A2:D" & i).Copy Range("A" & k + 1)
End If
Next
End Sub
代码详解:1.Sub main()——其中Sub 跟括号是固定的,main是宏名,可以随便更改(其实完全没有必要多此一举,这里可以不做任何修改)2.For Each sh In Sheets——这是遍历全部的工作表,这里就要注意,如果你的工作表中包含一些,不需要汇总数据的工作表,那么就需要将源数据表备份一份,然后将不需要汇总数据的工作表都删除掉,只剩下总表以及需要汇总数据的工作表(当然,还有其他办法,这里只讲解最简单地做法)3.If sh.Name <> "总表" Then——这里是判断工作表的名字是不是”总表“,如果是总表,就不汇总数据,本例中总表的名字就是”总表“,如果你的工作表中,总表名字是其他的,就将这里的”总表“改为你的工作总表明细;4.i = sh.Range("D65536").End(3).Row——这里要注意了"D65536",是为了获得最后一个不为空的行的行号,这里用了D列,因为本例中的D列是有数据的
,在实际的使用过程中,一定要选择一个最后一行有数据的列,否则不能获得最大行号(假如只有2列,那么这里的D可以改为B或者A)5.k = Range("A65536").End(3).Row——这里是获得总表的最大行号,以便复制的数据,能够依次往下粘贴;(这里的A65536跟上面提到的是一个道理,总表中的A列最后一行不是空的)6.sh.Range("A2:D" & i).Copy Range("A" & k + 1)——这里要注意“A2:D”&i是要复制的区域,因为本例中只有A-D列,而且数据是从第2行开始的,所以这里是A2:D,那假如是从E列第10行开始,到Z列结束的区域,就应该改为E10:Z;Range("A" & k + 1)——这里是从总表的A列开始粘贴,假如是从D列开始,那么这里的A改为D即可7.End If Next End Sub——这些是结束判断、继续循环和程序结束,都不需要更改。
保存执行代码
全部回答
- 1楼网友:醉吻情书
- 2021-12-18 04:21
把所需合并的excel文档放在同一个文件夹中,再文件夹中新建一个excel打开excel,按alt+f11,或
依次点工具,宏,vb编辑器,弹出的编辑器中点插入模块,新弹出的空白窗口中输入以下代码:
sub com()
dim mypath, myname, awbname
dim wb as workbook, wbn as string
dim g as long
dim num as long
dim box as string
application.screenupdating = false
mypath = activeworkbook.path
myname = dir(mypath & "\" & "*.xls")
awbname = activeworkbook.name
num = 0
do while myname <> ""
if myname <> awbname then
set wb = workbooks.open(mypath & "\" & myname)
num = num + 1
with workbooks(1).activesheet
.cells(.range("a65536").end(xlup).row + 2, 1) = left(myname,
len(myname) - 4)
for g = 1 to wb.sheets.count
wb.sheets(g).usedrange.copy .cells(.range("a65536").end(xlup).row + 1, 1)
next
wbn = wbn & chr(13) & wb.name
wb.close false
end with
end if
myname = dir
loop
range("a1").select
application.screenupdating = true
msgbox "共合并了" &
num & "个工作薄下的全部工作表。如下:" & chr(13) & wbn, vbinformation,
"提示"
end sub
保存---点执行键ok
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯
正方形一边上任一点到这个正方形两条对角线的 |
阴历怎么看 ? |