小伙伴们是否都有过做简单的重复机械劳动体验呢,例如,将几百个同样格式的表格逐个整理成目标格式;一个表格中按某列分类筛选,将每一类分别复制到新建的表格中去;把几百个高版本excel文件(.xlsx)另存为低版本(.xls)等等,也许看了这篇文章你就能快速解决这些简单又无聊的工作了。
01
准备篇
在正式开始介绍方法之前,给大家普及一些excel的小知识。在excel中,有一个名字叫做“宏”的东西,可能有些小伙伴们没有听说过,没关系,你就把他理解成一个能学习并代替你操作过程的“机器人”就行了。在界面上点击开始录制之后,你需要将操作步骤做一遍,做完后点击结束录制,给他取个名,设置个快捷键就可以用啦;另外一个概念叫做“VBA”,VBA是OFFICE内置的编程语言,能完成许多重复繁琐的操作,使工作处理更高效。看到这很多小伙伴觉得我又不会编程,怎么办?没关系,后文我会提供一些现成的代码,你只需要复制进去点击运行就可以了,就是这么简单。
02
技巧篇
下面我们就开始正式介绍今天我们的运用场景和如何快速的解决这些问题。
场景一:批量整理表格的格式
老板发给你一个压缩包,对你说:小X,这是所有的客户需求资料,辛苦你一下把所有的字体,行间距,列宽,还有对齐方式等都整理成一致的,明天九点前交给我。你打开一看,里面是将近一千个excel文件,这要是一个一个的整理,非得熬夜加班通宵不可。
当你用了我给你的这个方法之后,完成任务的时间完全取决于你的电脑卡不卡,如果电脑配置给力,十几分钟就处理好了,话不多说,showtime!
第一步:在功能区任意地方点击右键,弹出的菜单中选择「自定义功能区」。

第二步:在右侧选项卡列表中,找到「开发工具」并勾选。

第三步:设置宏安全性。

默认情况下,excel为了防止不明来源宏带来的风险,会禁用宏,为了顺利录制自己的宏,请到开发工具选项卡中进行如下设置:
第四步:为工作簿设置正确的文件类型。

excel2007版本以后,想要在工作簿中保存和运行宏,一定要将其另存为「启用宏的工作簿」文件类型。
随便复制一个需要处理的文件另存成xlsm就可以,这个xlsm文件的作用仅仅是帮助你处理数据,其他的xls或xlsx文件不用手动另存为这个格式。
到这里,前期工作就全部结束了,说明一下,同一台电脑,这些设置只需要设置一次。接下来你可以把调整格式的一系列操作录制自己的宏了。点击开发工具中的录制宏按钮,在弹出的对话框中输入宏名,指定快捷键,选择保存在「当前工作簿」,确定。开始调整格式,如行间距,列宽,字体大小,单元格对齐方式,边框底纹,甚至是添加某几列删除某几行等等,操作完成后,点击完成录制。

这样你就完成了宏的录制工作,下一步就是把这些操作批量应用于所有excel文件上了。你需要把你刚才的xlsm文件和要应用的文件放在同一个文件夹中。
打开xlsm文件开发工具的vb代码区,双击sheet1的代码区,将以下代码帖进去,点击菜单,运行即可。(注意修改代码中红色字体标出的内容)

Sub key()
Dim Path As String
Dim File As String
Dim WB As Workbook
Application.ScreenUpdating = False '冻结屏幕,打开各个文件及关闭时屏幕不会闪晃
Path = "d:temp" '把目标文件夹路径赋值给变量,这里的路径就是你要处理的文件存放路径
File = Dir(Path & "*.xls") '一次找寻路径中的excel文件,这里到底是.xlsx还是.xls,可以自己改
Do While File <> "" '当指定路径中由文件时进行循环
Set WB = Workbooks.Open(Path & File) '打开符合要求的文件
Call myformat '调用你的另一端对每个excel文件进行具体操作的宏,也可以直接写到这个宏中myformat为宏名称
WB.Save
WB.Close
File = Dir '找寻下一个excel文件
Loop
Application.ScreenUpdating = True '解冻屏幕,让屏幕恢复正常刷新。和上面的那一句成对使用
End Sub
▲关键代码
执行过程中excel会一直闪动,此时不要对excel做任何操作,直至执行结束。不过你可以在执行的过程中查看文件夹的变化,细心的你会发现,每个文件的修改时间变了,说明excel已经对其进行了宏应用。最后,打开原来那些excel文件,你会发现都已经变成了你想要的样子。
场景二:批量将xlsx文件另存为xls格式
虽然office2007版本之后的excel文件后缀就已经是xlsx了,但是不排除有一些OA,进销存等平台仍然只支持导入xls格式的文件,联系软件厂商修改功能周期会很慢,老板又催的急,所以只能挨个的将文件另存了xls了?我来拯救你!
经过了上面的一系列设置,你的电脑已经可以正常的运行VBA代码了,要实现另存成低版本的excel文件,跟前文提到的操作类似,只需要把xlsm文件和要另存的文件都放在同一个文件夹,把我提供给你的代码贴到vb代码区,点击执行就可以了。
Sub AA()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim F, X, wb, bm
F = Application.GetOpenFilename("EXCEL文件,*.xlsx,", 1, MultiSelect:=True)
For X = 1 To UBound(F)
Set wb = Workbooks.Open(F(X))
wb.SaveAs Filename:=Application.Substitute(F(X), "xlsx", "xls"), FileFormat:=xlExcel8
wb.Close False
Next X
MsgBox "处理完成,请查阅"
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
▲关键代码
执行完成后,会弹出对话框“处理完成,请查阅”。这时你再到文件夹中查看,会发现多出了数量和xlsx文件一样的xls文件了,随便打开几个检查一下,没有任何问题,这下终于可以愉快的把数据导入到各个平台中去啦!
03
总结篇
Excel中的很多非常好用的高级功能,我们如果能够巧妙运用,确实能够帮助我们在日常的学习工作当中提高数据处理的效率。但是Excel的功能实在是太多了,是否需要买本书,然后花时间把书中的所有内容都消化到血液中去呢?如果你有足够的时间和兴趣,完全没有问题,但是如果你的时间不够,但是又经常遇到各种问题怎么办呢?关注“职场攻守范”公众号,我们将会不定期的分享一些办公中已经遇到或可能遇到的问题,为你提供解决方案。当然最重要的还是自己要注重学习积累,遇到难题多动脑筋多搜索多提问(也可添加微信好友tiantian830943,拉你进互助群,在群里大家一起讨论学习),我相信你会成为职场的佼佼者。
下期预告
细心的小伙伴们会说:在前面不是提到了一个表格中按某列分类筛选,将每一类分别复制到新建的表格中去的场景吗?如何做呢?我们将在下期更新,喜欢就在微信中搜索"职场攻守范”关注我们