把若干张抬头相同的EXECL表格如何合并在一起?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了把若干张抬头相同的EXECL表格如何合并在一起?相关的知识,希望对你有一定的参考价值。
方法一:宏命令控制法对于Office家族的宏功能,大家或许早有耳闻,但由于需要使用VBA进行编程,所以宏一直让许多人望而却步,不过要使用一个现成的宏就简单多了。首先打开要处理的Excel表,选择“工具→宏→Visual Basic 编辑器”,在编辑器左边的窗口中用鼠标双击Sheet1,会出现代码编辑窗口,在代码编辑窗口输入如下代码(为了不破坏原有的工资表,所以这里采用了将Sheet1的内容复制到Sheet2的方法,所以最后的生成结果是在Sheet2中显示):
Sub MakeSalaryList()
Dim i As Integer
Dim endrow As Integer
'测出数据的最后一行
endrow = Sheet1.Range("a65536").End(xlUp).Row - 1
'把标题贴过去
Worksheets(1).Range("1:1").Copy (Worksheets(2).Cells(1, 1))
For i = 3 To endrow
'把每条数据抬头贴过去
Worksheets(1).Range("2:2").Copy (Worksheets(2).Cells(3 * i - 7, 1))
'把数据贴过去
Worksheets(1).Range(Cells(i, 1), Cells(i, 256)).Copy (Worksheets(2).Cells(3 * i - 6, 1))
Next i
End Sub
关闭编辑器,将自动返回到刚才的Excel表,选择“工具→宏→宏”,将弹出如下对话框:
点击“执行”,将在Sheet2生成如Gz-2所示的转换成工资条,怎样,不复杂吧。当然,如果你的表总Sheet2已经输入了别的内容,就可以将他复制到Sheet3来生成,代码修改也很简单,把其中的Sheet2修改成Sheet3就可以了,其它代码不变。
方法二:公式填充法
相比宏命令,公式填充法更便于理解,不过需要手工操作的步骤稍微多一些,“鱼和熊掌不可得兼”,要用哪种方法就看你的爱好了。
首先打开要操作的Excel工资表,为了不破坏原表(Sheet1)结构,我们仍然采用在Sheet2中进行操作的方法。由于这个工资表一共有L列,18行,要复制的表头项目在第二行,所以在第一个单元格中输入如下公式:
=IF(MOD(ROW(),2)=0,INDEX(sheet1!$A:$L,INT(((ROW()+1)/2))+2,COLUMN()),sheet1!A$2)
接下来的工作就简单了,我们只要使用填充柄将此公式填充到其它单元格,列向填充到L列,行填充到18行就大功告成。
因为在不同的表格中这个公式需要修改的地方比较多,所以这里做一下解释:
由于工资条中的奇数行都是表头,偶数行是数据,所以在这个公式中首先进行奇偶行判断,若是奇数行,直接取工资表的A2单元格数据(即公式中的sheet1!A$2,如果表头数据在第4行第三列则修改为sheet1!C$4)。若是偶数行,则用INDEX()函数来取数。该函数的第一个参数是指定工资表中的一个取数区域(即sheet1!$A:$L,如果不是从A到L列,那么可以修改这个参数,如修改为sheet1!$B$P ,就表示在B到P列之间取数)。当然,如果你想把转换后的数据放在Sheet3而不是Sheet2中,那么,只要在Sheet3中执行以上操作就可以了,并不需要修改公式的内容(见图4)。
采用这种方法不能自动插入空行,给打印后的裁减带来了一定的麻烦,所以,建议在做完后在全选所有单元格,通过调整行高和列宽来解决这个问题。
方法三:Word邮件合并法
对于宏和公式运用不太熟练的朋友别着急,这里还有一招等着你。
首先我们确定好主文档(工资条表格)和数据源(Excel或Access格式的记录表),然后通过“邮件合并”向导把数据源中的的字段信息合并进来。
点击“工具→信函与邮件→邮件合并”,然后在屏幕右侧进入“邮件合并”向导。第一步:选择文档类型。选择“信函”。第二步:选择开始文档。选择默认的“使用当前文档”。 第三步:选取收件人。单击“使用现有列表”区的“浏览”按钮,通过“选择数据源”对话框,定位格式数据源的存放位置,选中并打开。 接着弹出“邮件合并收件人”对话框,在这里可以指定参与邮件合并的记录,选择默认的“全部”,确定返回Word编辑窗口。 第四步:撰写信函。将插入点定位于表格的第二行第一格内,单击“邮件合并”工具栏上“插入Word域”左边的“插入域”按钮,打开“插入合并域”对话框,选中“域”下方列表框中的“序号”字段,并单击“插入”按钮,即可把“序号”字段合并到主文档中。然后用同样的方法把其余字段插入到主文档表格中对应的位置即可。第五步:预览信函。在这里我们可以浏览一下工资条的大致效果,还可以调整“姓名”表格的宽度,让姓名在一行内显示。然后选中“姓名”后的表格区域,单击鼠标右键在弹出的菜单中选择“平均分布各列”,让这些列具有相同的宽度,使工资条更美观。如果这样直接进入打印操作,一页纸只能打印一个工资条, 所以选中整个工资条表格,复制,粘贴到原表格下方空一行后的地方,把插入点定位于主文档中第一和第二个表格之间的空行处,单击“邮件合并”工具栏上的“插入Word域”按钮,在弹出的菜单中选择“下一记录”命令,以此类推,就可以在一页纸上多排几个工资表,充分利用资源了。最后进入第六步:完成合并。然后把工资条打印出来,就制作完成了(见图5)。
OK,再也不用费力地重复劳动专门制作工资条数据表了,通过简单的转化一个数据表就实现了两项完全不同的功能,赶快操练一下吧。
可参考看了要给分哟 我 参考技术A 抬头相同?什么意思,是表头吗?
另你这些表在同一工作簿中吗?
在同一工作表中吗?还是多个工作表?追问
是指不同工作薄的sheet,但表头相同。
追答直接复制粘贴就行了呀。
怎么把多个excel工作簿里面的相同名字的工作表的内容合并到一起
有多个工作簿,每个工作簿里面有几个不同名字的工作表,例如工作簿一里面有账号统计表,信息记录表,数据汇总表三个表格,其他的工作簿里面也有这三个表格,名字是一样的,怎么把这些工作簿里的相同名字的工作表里的内容合并到一张表格里面啊
每天要处理的表格太多了,一个一个复制粘贴太费时间了,各位高手有没有简单快捷的方法啊,多谢各位了
1、首先,我们需要在C列添加一个辅助列,在第一个数据右边的单元格(C2),输入函数公式:=B2。
2、在下一个单元格(C3),输入函数公式:
=IF(A3=A2,C2&"/"&B3,B3)即:如果A列的姓名与上一个单元格相同,返回结果上一个单元格的内容加B列对应的数据,并与之以斜杠隔开,否则,等于B列对应的数据。
3、向下填充公式后,我们可以看到,各姓名中的最后一个姓名对应右侧(C列)的数据,就是我们想要的结果。
4、但是我们要批量地提取想要的内容,我们需要再建立一个辅助列(D列)。在D2单元格输入公式:
=IF(ISNUMBER(FIND(C3,C4)),0,1)即:如果C列的数据,在下一个单元格中能找到本单元格的内容,就返回结果"0",否则返回结果"1"。
公式向下填充后,我们可以看到,各姓名中的最后一个姓名在D列对应的计算结果为数字1,其他的姓名在D列对应的计算结果都为0。
5、我们选中辅助列的数据(C列和D列),复制后,在原位置选择性粘贴为"数值"(新建辅助列粘贴也可以)。如果不粘贴为"数值",我们在进行排序时,公式的引用会发生错乱,即:计算结果会发生改变(即:计算出错)。
6、我们选择D1单元格,在开始菜单下找到排序,并使用"降序"排序。
7、降序排序后的结果,非常迅速、完美地解决了我们的问题。
参考技术A1.首先,先来看一下INDIRECT函数的用法。INDIRECT函数的作用是:将表示单元格引用的文本转换为实际单元格的引用。具体示例见下图说明:
2.上面的例子是返回同工作表中的内容,INDIRECT函数对不同工作簿、不同工作表的文本地址也是同样适用的,如下图示例:
3.注意:对部分工作表名称引用时需要在工作表名称前后加上英文状态的单引号,比如说以数字开头的工作表名称,实际单元格引用类似:='1月份报表'!H18。为了避免错误,可以将所有工作表名称前后都加上单引号。
4.下面来介绍一下要合并的数据。我们有12张工作表,每个工作表是一个月份的数据。其中A列是客户名称,B列和C列分别是两个产品的销售数量。每个表格里A列的客户名称是一样的(可以类比财务报表的固定科目)。
5.首先,建立一个汇总表,把客户名称复制到汇总表的A列。
6.从B1开始,将工作表名称顺序填充在汇总表第一行。
注意:工作表名称可以用其他Excel小插件取得,转置粘贴到B1开始的单元格区域。
7.先来汇总产品一各月的销售数量。
双击B2单元格,输入公式:=INDIRECT("'"&B$1&"'!B"&ROW(A2)),返回1月份A客户产品一的销售数量,我们可以查看原始数据表验证一下。
8.注意:上面INDIRECT函数生成单元格地址引用部分用了公式,B1代表月份,!B代表取每个表B列数据。row(A2)先返回A2单元格的行数2,然后下拉会变成3,4……等,也就可以顺序取得每个工作表其他客户的销售数据。
将B2单元格公式右拉,下拉填充满数据区域就可以方便的查看各月份各客户产品一的销售金额了。也可以查看原始数据表验证一下。
9.如果要查看产品二的数据,可以修改B2的公式,将!B改成!C,右拉下拉即可。也可以用查找替换的方法一次性完成该转换。
易错点提示:这种替换时不要只将B替换成C,因为公式中包含的所有字母B都会被替换成C,导致发生不可预期的错误。比如说ISBLANK函数的B替换成C后,excel就无法识别并运算了。
10.替换完成后,也可以查看一下原始数据表产品二的销售量,看是否正确返回了结果。
参考技术B 1原始数据所在工作簿包含多个格式相同的工作表,只不过每个工作表内容不同,比如说不同人名的工作表数据或者不同部门填写的数据。2在原始数据同目录下新建一个工作簿,建立两个工作表,名称分别为“首页”和“合并汇总表”。
3按Alt+F11进入VBA代码编辑和调试界面。
4根据提示,插入一个模块。
5将下述代码粘贴到模块空白处:
Sub CombineSheetsCells()
Dim wsNewWorksheet As Worksheet
Dim cel As Range
Dim DataSource, RowTitle, ColumnTitle, SourceDataRows, SourceDataColumns As Variant
Dim TitleRow, TitleColumn As Range
Dim Num As Integer
Dim DataRows As Long
DataRows = 1
Dim TitleArr()
Dim Choice
Dim MyName$, MyFileName$, ActiveSheetName$, AddressAll$, AddressRow$, AddressColumn$, FileDir$, DataSheet$, myDelimiter$
Dim n, i
n = 1
i = 1
Application.DisplayAlerts = False
Worksheets("合并汇总表").Delete
Set wsNewWorksheet = Worksheets.Add(, after:=Worksheets(Worksheets.Count))
wsNewWorksheet.Name = "合并汇总表"
MyFileName = Application.GetOpenFilename("Excel工作薄 (*.xls*),*.xls*")
If MyFileName = "False" Then
MsgBox "没有选择文件!请重新选择一个被合并文件!", vbInformation, "取消"
Else
Workbooks.Open Filename:=MyFileName
Num = ActiveWorkbook.Sheets.Count
MyName = ActiveWorkbook.Name
Set DataSource = Application.InputBox(prompt:="请选择要合并的数据区域:", Type:=8)
AddressAll = DataSource.Address
ActiveWorkbook.ActiveSheet.Range(AddressAll).Select
SourceDataRows = Selection.Rows.Count
SourceDataColumns = Selection.Columns.Count
Application.ScreenUpdating = False
Application.EnableEvents = False
For i = 1 To Num
ActiveWorkbook.Sheets(i).Activate
ActiveWorkbook.Sheets(i).Range(AddressAll).Select
Selection.Copy
ActiveSheetName = ActiveWorkbook.ActiveSheet.Name
Workbooks(ThisWorkbook.Name).Activate
ActiveWorkbook.Sheets("合并汇总表").Select
ActiveWorkbook.Sheets("合并汇总表").Range("A" & DataRows).Value = ActiveSheetName
ActiveWorkbook.Sheets("合并汇总表").Range(Cells(DataRows, 2), Cells(DataRows, 2)).Select
Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
DataRows = DataRows + SourceDataRows
Workbooks(MyName).Activate
Next i
Application.ScreenUpdating = True
Application.EnableEvents = True
End If
Workbooks(MyName).Close
End Sub
6在“首页”工作表中按下图示范插入一个窗体控件并指定宏为插入的代码名称。
7点击“首页”工作表中插入的按钮,根据提示,浏览到原始数据工作簿。
8下一步,用鼠标选择要合并的数据范围。
注意:每个工作表数据可能不一样,比如说有的是10行数据,有的是30行数据。在这里我们可以用鼠标选择任意工作表的一个较大范围,比如说A1:D100,保证比最多行数的工作表数据还多就可以,一会再删除空行。
9点击确定按钮,待代码运行完毕后,所有的数据就都合并到了“合并汇总表”中。
注意:
1)A列的文本说明右侧的数据来自于原始数据表的哪个工作表;
2)数据之间会有一些空行,下面通过筛选删除。
10选中全部数据区域,执行自动筛选。然后选择其中一个字段,选择“空白”和标题内容。
11然后将筛选出来的无用行鼠标右键删除,再删除A列整列即可。 参考技术C 由于很多人问这样的问题,我做了一个通用的程序。Alt+F8启动
有6个好处
要合并的子表名称无所谓,什么名称的excel表都可以合并
要合并多少个表都可以,你选几个表就合并几个
子表存放的路径无要求
子表首行抽取位置可以自定义(有没有表头随你选)
不需要打开excel即可抽取数据,速度快。
整表粘贴保证无遗漏 参考技术D http://zhidao.baidu.com/link?url=DURvq_pGEYq7VfSnE5XMqXnStYFQXpAUIdIdc_TTid_da2MLzaKJ_Q69y-SQbMilwMNSAvRnfBJtGcIrbLqeFXv0kZgvDb6d-WQ_iLBIJc_本回答被提问者采纳
以上是关于把若干张抬头相同的EXECL表格如何合并在一起?的主要内容,如果未能解决你的问题,请参考以下文章