JAVA和Nginx 教程大全

网站首页 > 精选教程 正文

16.7 数组 - 数据提取技术 提取数组对象中的id

wys521 2024-11-12 14:28:21 精选教程 20 ℃ 0 评论

例 将消费金额从消费明细中提取出来单独存放

下图所示为一份生活费消费明细表,由于数据输入不规范,无法直接汇总生活费。为便于汇总,需将消费金额从消费明细中提取出来单独存放。

每条消费明细记录中只包含一个数字字符串,提取到的数字即为消费金额,没有其他数字字符串的干扰。

在D2单元格中输入以下数组公式,按<Ctrl+Shift+Enter>组合键,并将公式向下制到D11单元格。

{=-LOOKUP(1,-MID(C2,MIN(FIND(ROW($1:$10)-1,C2&1/17)),ROW($1:$16)))}

使用FIND函数在消费明细中查找0-9这10个数字,返回这10个数字在消费明细中最先出现的位置。公式中出“1/17”的计算结果为0.058823529417647,是一个包含0-9的数字字符串,其作用是使FND函数能查找到0-9的所有数字,不返回错误值。

使用MIN函数返回消费明细中第一个数字的位置,结合MID函数依次提取长度为1-16的数字字符串,结果如下。

{“8";"80";"800";"800元";"800元";"800元";"800元";"800元";"800元";"800元";00元";"800元";"800元";"800元";"800元";"800元"}

取负运算将文本型数字转换为负数,同时将文本字符串转换为错误值。

最后使用LOOKUP函数忽略错误值返回数组中最后一个数值,得到负的消费金额再进行一次取负运算即得到消费金额。

例 提取首个手机号码

下图所示为某经销商的客户信息,为了便于管理,需要从中提取手机号码。

手机号码是以13、15、17及18开头的11位数字字符串。而客户信息中包含公司名称、联系人姓名、固定电话、移动手机号及传真,有多个数字字符串对手机号码形成干扰,需甄别后才能提取。

在C3单元格中输入以下数组公式,按<Ctrl+Shift+Enter>组合键,并向下复制到C10单元格。

{=MID(B3,MIN(MATCH(1&{3,5,7,8},LEFT(MID(B3&1.13000151718E+21,ROW($1:90),11)/10^9,2),)),11)}

公式中,“1.13000151718E+21”是一个包含13、15、17及18开头的四类手机号码的数值。将其连接在客户信息之后,是为了避免MATCH函数在查找四类手机号码时返回错误值,达到容错的目的。

使用MID函数从“B3&1.13000151718E+21”字符串中依次提取1个字符长度的字符串。通过“10^9”的算术运算。将11位均为数学的字符串转换为大于0且小于100的小数,将包含非数字的文本字符串转换为错误值。

使用LEFT函数提取左边两个字符,通过MATCH函数查找13、15、17及18,分别返回以13、15、17及18开头的手机号码在客户信息中的位置。

使用MIN函数返回手机号码在客户信息中的最小位置,即首个手机号码的位置。

最后使用MID函数从客户信息中首个手机号码的位置处提取11个字符长度的字符串,得到首个手机号码。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表