宏:合并多个Excel文件,Excel合并Sheet

1、合并Excel文件
打开一个空Excel文件,Alt+F11,插入一个模块,开始写代码

Sub CombineWorkbooks()
Dim FilesToOpen, ft
Dim x As Integer
Application.ScreenUpdating = False
On Error GoTo errhandler
FilesToOpen = Application.GetOpenFilename _
(FileFilter:="Micrsofe Excel文件(*.xls), *.xls", _
MultiSelect:=True, Title:="要合并的文件")
If TypeName(FilesToOpen) = "boolean" Then
MsgBox "没有选定文件"
'GoTo errhandler
End If
x = 1
While x <= UBound(FilesToOpen)
Set wk = Workbooks.Open(Filename:=FilesToOpen(x))
wk.Sheets().Move after:=ThisWorkbook.Sheets _
(ThisWorkbook.Sheets.Count)
x = x + 1
Wend
MsgBox "合并成功完成!"
errhandler:
'MsgBox Err.Description
'Resume errhandler
End Sub
这段代码的作用:它首先打开一个文件选择框,你可以选择一个或多个文件,
然后把这些文件里的所有Sheet合并到当前这个工作簿里来,有重名的Sheet会自动在后面加数字。

2、合并一个EXCEL多个sheet的内容到一个汇总sheet

Sub MergeWorkbooks()
Dim FileSet
Dim i As Integer

On Error GoTo 0
Application.ScreenUpdating = False

FileSet = Application.GetOpenFilename(FileFilter:="Excel 2003(*.xls),*.xls,Excel 2007(*.xlsx),*.xlsx", _
MultiSelect:=True, Title:="选择要合并的文件")

If TypeName(FileSet) = "Boolean" Then
GoTo ExitSub
End If

For Each Filename In FileSet
Workbooks.Open Filename
Sheets().Move After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
Next

ExitSub:
Application.ScreenUpdating = True

End Sub


[c-sharp]view plaincopyprint?
Function LastRow(sh As Worksheet)
On Error Resume Next
LastRow = sh.Cells.Find(what:="*", _
After:=sh.Range("A1"), _
Lookat:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Row
On Error GoTo 0
End Function

Sub MergeSheets()
Dim sh As Worksheet
Dim DestSh As Worksheet
Dim Last As Long
Dim shLast As Long
Dim CopyRng As Range
Dim StartRow As Long

Application.ScreenUpdating = False
Application.EnableEvents = False

'新建一个“汇总”工作表
Application.DisplayAlerts = False
On Error Resume Next
ActiveWorkbook.Worksheets("汇总").Delete
On Error GoTo 0
Application.DisplayAlerts = True
Set DestSh = ActiveWorkbook.Worksheets.Add
DestSh.Name = "汇总"

'开始复制的行号,忽略表头,无表头请设置成1
StartRow = 2

For Each sh In ActiveWorkbook.Worksheets

If sh.Name <> DestSh.Name Then
Last = LastRow(DestSh)
shLast = LastRow(sh)

If shLast > 0 And shLast >= StartRow Then

Set CopyRng = sh.Range(sh.Rows(StartRow), sh.Rows(shLast))

If Last + CopyRng.Rows.Count > DestSh.Rows.Count Then
MsgBox "内容太多放不下啦!"
GoTo ExitSub
End If

CopyRng.Copy
With DestSh.Cells(Last + 1, "A")
.PasteSpecial xlPasteValues
.PasteSpecial xlPasteFormats
Application.CutCopyMode = False
End With
End If
End If
Next

ExitSub:
Application.GoTo DestSh.Cells(1)
DestSh.Columns.AutoFit
Application.ScreenUpdating = True
Application.EnableEvents = True

End Sub

这段代码的作用:它会新建一个叫做“汇总”的工作表,
然后把当前工作簿里的所有Sheet里有数据的内容都复制到“汇总”表里。
提示:如果数据表里的内容没有表头的话需要把StartRow = 2改成StartRow = 1。

实例:

Function LastRow(sh As Worksheet)
On Error Resume Next
LastRow = sh.Cells.Find(what:="*", _
After:=sh.Range("A1"), _
Lookat:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Row
On Error GoTo 0
End Function

Sub MergeSheets()
'
' Macro1 Macro
'
' 快捷键: Ctrl+t
'
Application.Goto Reference:="MergeSheets"

Dim sh As Worksheet
Dim DestSh As Worksheet
Dim Last As Long
Dim shLast As Long
Dim CopyRng As Range
Dim StartRow As Long

Application.ScreenUpdating = False
Application.EnableEvents = False

'新建一个“汇总”工作表
Application.DisplayAlerts = False
On Error Resume Next
ActiveWorkbook.Worksheets("汇总").Delete
On Error GoTo 0
Application.DisplayAlerts = True
Set DestSh = ActiveWorkbook.Worksheets.Add
DestSh.Name = "汇总"

'开始复制的行号,忽略表头,无表头请设置成1
StartRow = 5

For Each sh In ActiveWorkbook.Worksheets

If sh.Name <> DestSh.Name Then
Last = LastRow(DestSh)
shLast = LastRow(sh)

If shLast > 0 And shLast >= StartRow Then

Set CopyRng = sh.Range(sh.Rows(StartRow), sh.Rows(shLast))

If Last + CopyRng.Rows.Count > DestSh.Rows.Count Then
MsgBox "内容太多放不下啦!"
GoTo ExitSub
End If

CopyRng.Copy
With DestSh.Cells(Last + 1, "A")
.PasteSpecial xlPasteValues
.PasteSpecial xlPasteFormats
Application.CutCopyMode = False
End With
End If
End If
Next

ExitSub:
Application.Goto DestSh.Cells(1)
DestSh.Columns.AutoFit
Application.ScreenUpdating = True
Application.EnableEvents = True

End Sub

 

转载于:https://www.cnblogs.com/pumkin/archive/2013/03/20/Pumkin.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用Python中的pandas库来合并多个Excel文件sheet。具体步骤如下: 1. 导入pandas库 ```python import pandas as pd ``` 2. 定义要合并Excel文件路径和sheet名称列表 ```python file_paths = ['file1.xlsx', 'file2.xlsx', 'file3.xlsx'] sheet_names = ['sheet1', 'sheet2', 'sheet3'] ``` 3. 循环读取每个Excel文件的每个sheet,并将数据合并到一个DataFrame中 ```python df = pd.DataFrame() for file_path, sheet_name in zip(file_paths, sheet_names): data = pd.read_excel(file_path, sheet_name=sheet_name) df = pd.concat([df, data], ignore_index=True) ``` 4. 将合并后的数据保存到一个新的Excel文件中 ```python df.to_excel('merged.xlsx', index=False) ``` 以上就是使用Python合并多个Excel文件sheet的基本步骤。需要注意的是,合并Excel文件的列数和列名必须相同,否则会出现数据错位的情况。 ### 回答2: 在日常的工作中,我们常常需要将多个Excel文件中的数据合并到一个文件中进行统计或分析,而在Python中实现这个过程非常方便。 接下来,我将介绍如何使用Python合并多个Excel文件中的数据。 首先,我们需要导入pandas这个Python库。该库是一个基于NumPy的数据处理工具,它提供了大量的函数和工具,用于处理类似于Excel的表格数据。 我们可以使用pandas中的read_excel函数来读取Excel文件中的数据。该函数默认只读取第一个sheet中的数据,因此我们需要使用pandas中的ExcelFile类来读取多个sheet中的数据。 以下是一个简单的代码示例,它能够将多个Excel文件中的所有sheet中的数据合并到一个DataFrame对象中: ```python import pandas as pd # 定义需要合并Excel文件列表 files = ['file1.xlsx', 'file2.xlsx', 'file3.xlsx'] # 定义用于存储所有数据的DataFrame对象 all_data = pd.DataFrame() # 循环读取每个Excel文件中的每个sheet,并将数据添加到all_data对象中 for file in files: # 使用ExcelFile类读取Excel文件 xl = pd.ExcelFile(file) # 循环读取每个sheet for sheet_name in xl.sheet_names: # 使用read_excel函数读取sheet中的数据 sheet_data = pd.read_excel(xl, sheet_name) # 将sheet数据添加到all_data对象中 all_data = pd.concat([all_data, sheet_data]) # 将合并后的数据保存到Excel文件中 all_data.to_excel('merged_data.xlsx') ``` 在上面的代码中,我们首先定义了一个包含多个Excel文件的列表,然后使用循环语句逐个读取每个Excel文件中的每个sheet,并将其添加到all_data对象中。 最后,我们使用to_excel函数将合并后的数据保存到一个新的Excel文件中。 使用Python合并多个Excel文件中的数据非常简单,只需要几行代码即可完成。因此,在日常的工作中,我们可以选择使用Python来处理Excel数据,提高数据处理的效率和准确性。 ### 回答3: Python是一种功能强大的编程语言,可以帮助我们编写一些复杂的程序,例如合并多个excel文件sheet。下面我们将介绍如何使用Python来实现这个功能。 Python有很多库可以用来处理excel文件,例如pandas和xlrd。在本文中,我们将使用pandas库,该库提供了许多处理数据的功能,包括读取和写入excel文件、数据筛选、排序和合并等。 合并多个excel文件sheet步骤如下: 1. 导入pandas库。在Python中,我们可以使用import命令将库导入到我们的程序中。 2. 使用pandas的read_excel函数读取每个excel文件。我们可以使用for循环逐个读取每个文件,并将每个文件的数据存储在一个DataFrame对象中。 3. 将所有的DataFrame对象合并为一个DataFrame对象。为了将所有的DataFrame对象合并为一个DataFrame对象,我们可以使用pandas的concat函数。可以将多个DataFrame对象作为参数传递给concat函数,并设置axis=0参数以按行合并所有对象。 4. 将合并的DataFrame对象保存为新的excel文件。 下面是一个完整的Python程序,用于合并多个excel文件sheet。 ```python import pandas as pd #定义要合并excel文件列表 excel_files = ['file1.xlsx', 'file2.xlsx', 'file3.xlsx'] #定义一个空的DataFrame对象,用于存储所有的数据 all_data = pd.DataFrame() #读取每个excel文件的所有sheet,并将它们合并为一个DataFrame对象 for file in excel_files: #读取所有的sheet到DataFrame对象 sheets = pd.read_excel(file, sheet_name=None) #将多个sheet合并为一个DataFrame对象 df = pd.concat(sheets.values(), ignore_index=True) #将合并后的数据添加到all_data中 all_data = all_data.append(df, ignore_index=True) #将合并后的数据保存为新的excel文件 all_data.to_excel('merged_file.xlsx', index=False) ``` 在上面的程序中,我们定义了要合并excel文件列表(excel_files),并使用for循环读取每个文件的所有sheet。我们使用pandas的read_excel函数读取每个sheet,并使用concat函数合并它们。最后,我们将合并后的数据保存到新的excel文件中。 此程序可以成功地合并多个excel文件sheet,并将结果保存到一个新的文件中。你可以根据自己的需要进行修改,例如读取特定的sheet或在合并后对数据进行删选和排序。 总之,Python是一个很好的工具,可以帮助我们处理各种数据处理任务,包括合并多个excel文件sheet。我们希望这篇文章对你有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值