APP下载

利用自定义函数获取混合内容单元格中的指定字符串

2019-08-24谷城县审计局

审计月刊 2019年7期

◆吴 争 刘 璐/谷城县审计局

由于原始数据录入不规范,经常会造成数据分析人员在前期数据结构化整理工作上花费较长的时间和较多的精力。近日,笔者在某审计项目中遇到此类情况,较多基础数据全部录入在一个单元格内,且没有较明显的规则来提取,因为需要身份证号码和手机号码等关键字段,所以必须要对基础数据开展清洗工作,转换成标准格式以满足审计需要。

部分数据(以下所有截屏数据均为演示数据)如图1所示。

图1

从图中可以看到,C列单元格中包含了人员的社区信息、身份证号码、性别、手机号码、户籍属性。

一、利用VLOOKUP函数探索

起初考虑用VLOOKUP函数加入数组计算方式来解决,设置要输出身份证号码的单元格D2=VLOOKUP(0,MID(C2,ROW($1:$99),18)*{0,1},2,0)。思路是 MID 函数依次从C2的第1、2、3、4……直至99个位置,提取长度为18位的字符,然后分别乘以0和1,即常量数组{0,1}。如果MID函数的结果为文本,那么乘以{0,1}后结果为错误值{#VALUE!,#VALUE!};如果MID函数的结果为数值,结果即为所需提取的18位身份证号码。

实际运算后发现函数提取超过11位显示为科学计数,如图2所示。

图2

于是考虑用英文引号拼接函数来调整显示格式,修改单 元 格 D2="'"&VLOOKUP(0,MID(C3,ROW($1:$99),18)*{0,1},2,0),运行结果如图3。

图3

观察发现,计算结果与实际不符。看来利用VLOOK⁃UP函数加入数组计算提取18位的身份证号码行不通,只能另辟蹊径。

二、运用VBA正则运算解决问题

VBA正则表达式是一种特殊的字符串模式,用于匹配字符串排列的一套规则。我们可以用这个规则去匹配查找可以匹配上的字符串(即单元格中任意想要的信息)。

登录APP查看全文