提取特定单元格数据的公式逻辑
从样本数据中提取第一个数字而不是第二个数字
(24M UNLTD + INS 30GB£347 +£30 S6)
以下数组公式已经用于Stackoverflow问题。
{=MID(A1,FIND("£",A1),MIN(IF(ISERROR(MID(MID(A1,FIND("£",A1)+1,999),ROW($1:$999),1)+0),ROW($1:$999),999)))}
我试图对下面的图像中所示的公式进行分析。 我无法掌握部分的逻辑
MIN(IF(ISERROR(MID(MID(A1,FIND("£",A1)+1,999),ROW($1:$999),1)+0),ROW($1:$999),999))
至于如何得出4的数字。要求详细说明这部分的公式,以澄清这个公式的各个组成部分的作用。
尝试下面的标准(非数组)公式,
=--REPLACE(REPLACE(A2, 1, FIND("£", A2), ""), FIND("+", REPLACE(A2, 1, FIND("£", A2), "")), LEN(A2), "")
首先,里面的REPLACE(A2, 1, FIND("£", A2), "")
所有东西都擦除到第一个£符号,然后应用相同的逻辑从第一个+到结尾擦除修改过的文本中的所有内容。 将文本看起来像一个数字转换为实际的数字。
您提供的数组公式使用更复杂的逻辑。
-
FIND("£", A2) + 1
find第一个£符号后的第一个数字的起始点。 例如,第一个£是第20 个字符,所以它返回21。 -
MID(A2, FIND("£",A2)+1, 999)
提取跟在第一个£符号后面的文本。 文本可能看起来像一个数字开始,但它是伪装成数字的文本。 例如347 +£30 S6 - 在一个数组公式中,
ROW($1:$999)
按从1到999的数字序列处理,每个计算周期递增1。 -
MID(MID(A1, FIND("£", A1) + 1, 999), ROW($1:$999), 1) + 0)
返回一个文本值数组,每个长度为1个字符,文字比以前的一个。 例如7
,+
,£
等 -
+0
用于尝试将这些文本中的每一个文本转换为数字。 IFERROR函数返回TRUE,如果一段文本不能被转换为一个真正的数字。 第一个不能变成真实数字的是第四个+
-
IF
捕获第四个位置的TRUE,并从第二个ROW($1:$999)
返回4。 它已经返回999
位置1,2和3.例如999,999,999,4,5等。 -
MIN
捕获这些以数组forms返回的最小数字。 这是4来自哪里。 例如999, 999, 999, 4, 5, 999, ...
您可以通过将所有的999更改为9,然后使用“ 评估公式”命令来查看。 改变为9的原因很重要的是使得返回的数字数组看起来像1,2,3,4,5,6,7,8,9,它们不会使结果模糊不清,如1,2,3, 4,5,6,7,8,9,10,11,12,13,14,… 998,999 。
这表明该公式评估了该过程的几个步骤。 注意4被返回到MINfunction 。