说到excel大家应该都不陌生,也都对它强大的功能有所耳闻,自己虽然已经用了好多年,但也只能算入门水平,比如今天遇到的一个实际情况就完全不知道怎么处理,上网查阅资料之后才解决,这里记录一下。
实际情况就是:我有很多个小的excel文件,每个文件只有两行内容,且这些文件的列目录都是一样的,也就是说我需要把这几十行内容整理到一张表上。
方法一:直接复制粘贴
几十个文件倒是不算多,但这也不是一个通用的解决方法啊,如果文件再多岂不要累死。
方法二:用VBA宏解决:
求助百度之后果然找到了类似问题的解决方法和现成的一段代码:
首先把所有的子文件全部放在一个文件夹内,然后在同一个文件夹里新建一个空的excel,作为整理信息的总表,打开这个excel之后按alt+f11打开宏函数面板,如图
然后把下面一段代码拷贝过去:(经测试可直接使用)
Sub 合并当前目录下所有工作簿的全部工作表()
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 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
具体代码内容我就不详细讲了,还是不难看懂的,拷贝之后点击文档上面的小绿色三角形开始运行,稍等片刻后,返回工作表可以看到资料都被整理进来了。但整理之后还有点小问题要处理,整理进来的文件应该是这样:
就是每个文件的文件名、标题、内容、以及空行都被整理进来了,而我们最后应该只需要一行的标题及每行的数据就可以了,我们观察其中每一个有内容的行号都是mod4余3的,因此只要我们把这些行筛选出来就行了,那么怎么筛选呢?我们先在最前面新建一列内容,比如为列A,在A1的函数输入框中输入=MOD(ROW(),4)(这里可以根据自己实际情况更改)然后拖动使整列有效,这样第一列就全是0-3的数字,如图:
最后只需用审阅里面的筛选功能,把不需要的行全选中删除就好了,至此我们就完美解决了批量合并表的问题。
同步发表于个人博客: xge技术博客