提取特定单元格数据的公式逻辑

从样本数据中提取第一个数字而不是第二个数字

(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), "")所有东西都擦除到第一个£符号,然后应用相同的逻辑从第一个+到结尾擦除修改过的文本中的所有内容。 将文本看起来像一个数字转换为实际的数字。

您提供的数组公式使用更复杂的逻辑。

  1. FIND("£", A2) + 1find第一个£符号后的第一个数字的起始点。 例如,第一个£是第20 字符,所以它返回21。
  2. MID(A2, FIND("£",A2)+1, 999)提取跟在第一个£符号后面的文本。 文本可能看起来像一个数字开始,但它是伪装成数字的文本。 例如347 +£30 S6
  3. 在一个数组公式中, ROW($1:$999)按从1到999的数字序列处理,每个计算周期递增1。
  4. MID(MID(A1, FIND("£", A1) + 1, 999), ROW($1:$999), 1) + 0)返回一个文本值数组,每个长度为1个字符,文字比以前的一个。 例如7+£
  5. +0用于尝试将这些文本中的每一个文本转换为数字。 IFERROR函数返回TRUE,如果一段文本不能被转换为一个真正的数字。 第一个不能变成真实数字的是第四 +
  6. IF捕获第四个位置的TRUE,并从第二个ROW($1:$999)返回4。 它已经返回999位置1,2和3.例如999,999,999,4,5等。
  7. 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

evaluate_formula
这表明该公式评估了该过程的几个步骤。 注意4被返回到MINfunction 。