制作人事资料时,通常需要录入职员身份证号码,以及生日、年龄、性别等资料。除身份证号码需要手工逐一录入外,其他三项信息均有四种录入方法:手工录入、内置公式、自定义函数法、插件法。手工录入方式效率极差,且出错几率也最高,本节通过后三种方式来实现录入并比较,从而让读者对VBA的优势与用法有个初步的认知。
1.1.1 内置公式法
以图1.1的数据为例,利用公式从身份证号码中提取生日、年龄、性别等信息,可以有多种方法。本例列举其中之一,内置公式法。
图1.1 根据身份证号码提取职工年龄、生日与性别
通过公式计算职工的年龄、出生日期与性别,步骤如下:
step1在单元格C3中输入以下公式,用于计算年龄:
step2在单元格D3中输入以下公式,用于计算出生日期:
step3在单元格E3中输入以下公式,用于计算性别:
step4选择C3:E3区域,将公式向下填充即可实现批量提取身份证信息,其效果如图1.2所示。
图1.2 公式法批量获取身份证信息
点评:相对于手工输入法,利用公式从身份证号码中获取个人信息效率更高、错误率更低,人员越多时越能体现出其优势。
1.1.2 自定义函数法
自定义函数是指利用VBA编写的外置函数。在本例的随书光盘中已经录入了相关的VBA代码,可以在工作表中任意调用。对于代码的含义和录入方式在本书后面的章节将有详细介绍,本章仅通过具体应用展示其用法及效率优势。具体操作步骤如下:
step1进入“自定义函数法”工作表;
step2在C3:E3区域分别输入以下三个公式,用于计算年龄、出生日期和性别:
step3选择C3:E3单元格,将公式向下填充,结果如图1.3所示。
图1.3 自定义函数法批量获取身份证信息
本例中的函数“SFZ”即身份证函数,用于从身份证号码中获取年龄、生日与性别等信息。它不属于Excel内置函数,需要利用VBA编写代码方可使用。读者可以从随书光盘中获取该函数的完整代码。
“SFZ”函数有两个参数:第一参数cell为单元格引用,第二参数Options为信息描述,即用于指定需要获取身份证中哪一部分信息。当它为“NL”(不区分大小写)时,表示获取年龄;当它为“SR”时,可获取生日,当它为“XB”或者省略第二参数时,可获取性别。
点评:相对于内置函数法,自定义函数法是借用VBA编写的外置函数完成的,它的优势在于公式简短,且容易理解公式的含义。任何不熟悉函数与VBA者皆可在一分钟内学会操作并理解其公式与参数的含义。
1.1.3 插件法
插件法是指借用Excel插件操作工作表,该插件不隶属于当前工作簿,但却可以实现与当前工作簿交互的功能,批量、迅速完成身份证信息提取工作。
操作步骤如下:
step1在关闭Excel程序的前提下,将插件文件复制到以下自启动文件夹中即安装完成:
注意
如果您的Office没有安装在C盘,那么上面的磁盘号需要根据实际情况做修改;如果您使用的是Office,则将其中的“Office14”修改为“Office11”;如果您使用的是Office,则将其中的“Office14”修改为“Office12”。
step2打开文件“提取身份证信息.xlsm”,进入“插件法”工作表;
step3选择单元格区域B3:B6,单击右键,从快捷菜单中选择菜单,程序将弹出“确定计算区域”对话框。该对话框中默认显示当前选区,如果需要修改,可以输入新的区域,也可以用鼠标在工作表中选择身份证号码存放区域,该区域的地址会自动产生在对话框中,如图1.4所示。
图1.4 插件法批量获取身份证信息
step4单击“确定”按钮,程序在瞬间就会从选区的所有身份证号码中提取出年龄、生日和性别等信息。
点评:用插件法从身份证号码中批量获取信息的优点是速度快,通用性好。相对于内置函数法,它在操作上更简便快捷,不需要任何函数知识,不需要输入长长的公式,仅需单击几次鼠标即可,弹指间完成大量的运算工作。相对于自定义函数,它的优点是通用性好,在任何工作表、任何工作簿中皆可使用本工具,而自定义函数不是以插件方式存在,只能在当前工作簿中使用。
1.1.4 浅谈VBA优势
从前面三个案例中我们可以看出,Excel具有强大的计算功能,但常规方法对于某些大型数据运算显得比较烦琐。用户需要学习复杂的函数知识,设置较长且难以理解的多层嵌套公式才可以解决某些运算。而VBA可以使公式简化、易懂,甚至根本不需要公式、无需录入一个字母即可完成一些专业性较强的计算工作。
具体来说,相对于Excel的内置功能,VBA或者说利用VBA开发的插件具有以下优势。
◆ 批量地对操作对象进行数据处理
以前一节插件法完成身份证信息的案例进行例证,它可以瞬间完成多个单元格数据的运算,甚至多个工作表中存放的身份证号码也可以瞬间完成信息提取。较传统的逐一处理方式在效率上有大幅提升。
◆ 多任务一键完成
多任务是指对同一个对象需要进行多个操作。例如,前一节中从身份证号码中同时获取生日、性别与年龄三类信息,VBA可以实现单击一个按钮后瞬间完成,完全感觉不到程序在分三步逐一完成任务,这是高效办公的最佳体现。
◆ 将复杂的任务简单化
Excel是很多小工具的综合体,这些工具可以嵌套运用,完成更强大的数据处理。但当嵌套过多时,就需要用户有较深的功底才能驾驭或者理解。另外,对于一些特殊行业的工作、任务,也要经过很复杂的操作才可完成,这对于那些只需要应用不需要深入研究和理解的普通办公职员们来说是一个技能考验。而通过VBA进行二次开发则可以将复杂的任务简单化。简单是指理解和操作上同时简化。
就像1.1.3节中通过右键菜单提取身份证号码中的三类信息一样,不需要用户去录入繁杂的公式,以及理解信息的提取过程,单击菜单即可完成。再如企业中生成工资条,个人的工资数据用手工操作需要处理*N次,而利用Excel插件则可以单击按钮瞬间完成。
◆ 提升工作表数据安全性
利用VBA代码可以对数据进行多层保护,在某些特殊需求下,VBA可以保护数据让普通用户无法胡乱修改,或者防止意外破坏数据结构。
◆ 提升数据准确性
准确性体现在数据录入和数据运算两方面。首先,通过VBA对输入的数据进行限制,可以防止用户意外录入不规范字符。如数值中有两个小数点,或者录入数值时意外录入了标点符号或者字母,造成无法计算或者漏算部分数据等。其次,在数据运算时,人工设置大量公式,或者每天在不同工作表重复录入同一个公式,在大量地操作中难免不产生一次错误,而利用VBA可以让工作简化。工作量越小,出错的几率就越小。同时,在大量重复性工作中,VBA可以确保不产生错误。
◆ 完成Excel本身无法完成的任务
弹出提示、警告对话框、行程安排与预告,或者到磁盘中查找需要的数据、修改注册表等,Excel常规方式是不可能完成的。如果需要类似功能,VBA是最佳选择,它可以轻松胜任与制表相关的各类操作需求。
◆ 开发专业程序
利用VBA还可以开发一些专业性的程序,如报表汇总软件、进销存管理系统、人事管理系统等,可以将界面设置成与其他任何软件的显示方式相媲美的专业程序软件。