“偷懒”是学习的动力 – VBA实现合并多个Excel文件至一个文件的多个工作表内

这几天的主要工作是导出商品数据并汇总。

工作要求:

将某一大类商品的销售数据从数据库中按月导出,做成Excel表。

Excel格式:

一个类别做一个工作簿(Book),在工作簿内以月份分为多个工作表(Sheet)。

工作过程:

输入查询条件后,Oracle可直接生成表,导出Excel也很方便,这里只需要简单的人工操作即可。

但后期将分月报表整合的过程十分枯燥,整理好一个分类后,考虑是否可通过office的VBA实现。

遂开始搜索解决方法,果然有:

代码如下:

Sub Books2Sheets()
‘定义对话框变量
Dim fd As FileDialog
Set fd = Application.FileDialog(msoFileDialogFilePicker)

‘新建一个工作簿
Dim newwb As Workbook
Set newwb = Workbooks.Add

With fd
If .Show = -1 Then
‘定义单个文件变量
Dim vrtSelectedItem As Variant

‘定义循环变量
Dim i As Integer
i = 1

‘开始文件检索
For Each vrtSelectedItem In .SelectedItems
‘打开被合并工作簿
Dim tempwb As Workbook
Set tempwb = Workbooks.Open(vrtSelectedItem)

‘复制工作表
tempwb.Worksheets(1).Copy Before:=newwb.Worksheets(i)

‘把新工作簿的工作表名字改成被复制工作簿文件名,这儿应用于xls文件,即Excel97-2003的文件,如果是Excel2007,需要改成xlsx
newwb.Worksheets(i).Name = VBA.Replace(tempwb.Name, “.xls”, “”)

‘关闭被合并工作簿
tempwb.Close SaveChanges:=False

i = i + 1
Next vrtSelectedItem
End If
End With

Set fd = Nothing
End Sub

引自:

用VBA实现把多个Excel文件合并到一个Excel文件的多个工作表(Sheet)里

 

使用前需调出“开发工具”菜单组

方法(2010版)

点击“文件” 进入Excel选项,在“自定义功能区”下 勾选“开发工具”,确定。

进入 Visual Basic,双击左上方Project中的 Sheet1,粘贴以上代码。

按F5运行(或点击工具栏中的绿色小三角)

在跳出的对话框中,按住Ctrl选中要合并的Excel文件(如果事先整理好了,用Shift选取更方便)

回车。

完成。

 

在与同事的沟通中发现,他们一向是手工整理,从未想过运用脚本或其他自动化方式完成这类机械性重复劳动。

也许是行业的性质决定了员工的工作方式,大家形成了勤勤恳恳的工作风格。

这种工作方式固然有其优点,但对于企业而言,雇佣一个员工自然希望他能创造更大的价值。而花在这类机械性工作所的时间在一定程度上挤占了更高质量的工作时间,影响工作效率的同时还会使员工产生烦躁和疲倦等情绪,是“双输”的。

适度的“偷懒”,不仅可以将自己从麻木的劳动中解放出来,还可以激发学习兴趣。毕竟用一段代码解决一件事情在普通人眼里是很Geek的行为,一旦做到了,对内可以提高自己的技术,对外又能在帮助同事的解决问题的过程中获得成就感,何乐而不为呢?

 

发表评论