此Excel函数从字符串中提取N位数字。它是如何工作的?

时间:2017-01-17 20:09:17

标签: excel extraction

我试图编写Excel函数,从长字母数字字符串中提取任何N位数字。我在几个地方(12)在网上找到了一个有效的示例,但我无法弄清楚如何。

例如,给定字符串0xabc_2014528888_abcde_30285_q!,函数应返回2014528888(假设N = 10)。

我在几个地方找到了以下Excel代码段(此处为N = 10):

=LOOKUP(10^10,MID(A1,ROW(INDIRECT("1:"&LEN(A1)-9)),10)+0)

但我无法理解它是如何运作的。

  1. Microsoft的LOOKUP() function documentationLOOKUP()的第一个参数是查找值...如何将该值设置为10 ^ N返回N个字符?

  2. INDIRECT()函数似乎正在获取参数1:21(在我的示例字符串中)。这是一个有效的细胞参考?如果我单独在单元格中输入它,它就不会计算任何合理的东西。

  3. 有人可以解释这个函数在提取数字序列方面做了些什么吗?

1 个答案:

答案 0 :(得分:0)

我会给出一个镜头,虽然有些部分我不确定。

基本上,我们这里有一个数组公式,它不是作为数组输入的 - 也就是说,当给定一系列值时,它将为每个可能的值执行其功能,而不是为整个范围一次。

INDIRECT("$1:$22")会返回对所有行122的引用。 ROW函数然后使用对这些行的引用来返回列表或数组(这是我不确定的部分 - 我不确定它是如何创建数组的数字{1;2;3;4;5;6;7;8;9;...22}

然后使用MID从源值返回10个字符的所有字符串,使用之前的线性数字数组作为起始点。 MID返回另一个数组{"0xabc 2014";"xabc 20145";"abc 201452";..."e 30285 q!"}。然后强制字符串通过+1执行数学函数。这会强制数组中包含非数字字符的任何字符串返回#VALUE!错误,而数字字符串则将其自身返回为值。我们得到一个像{#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;2014528888;#VALUE!;...}

这样的数组

最后,LOOKUP查看该数组并找到小于第一个参数的最大值 - 也就是说,数组中唯一没有返回#VALUE的结果!

我怀疑 - 但无法确定 - 密钥是使用LOOKUP而不是VLOOKUP或任何其他数据库功能。 LOOKUP有两种操作模式 - 矢量模式和阵列模式。我怀疑如果在阵列模式下使用,它会强制输入第二个参数的任何数据成为一个数组。