用于提取特定细胞数据的公式逻辑

时间:2016-03-21 12:56:11

标签: excel excel-formula

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

(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的数字。要求详细阐述这部分公式,以澄清该公式的各种成分的作用。

ste by step working on formula

1 个答案:

答案 0 :(得分:3)

尝试以下作为标准(非数组)公式,

=--REPLACE(REPLACE(A2, 1, FIND("£", A2), ""), FIND("+", REPLACE(A2, 1, FIND("£", A2), "")), LEN(A2), "")

首先内部REPLACE(A2, 1, FIND("£", A2), "")将所有内容删除到第一个£符号,然后应用相同的逻辑从第一个 + 到最后。 --将看起来像数字的文本转换为实际数字。

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

  1. FIND("£", A2) + 1在第一个£符号后面找到第一个数字的起点。例如第一个£是20 th 字符,因此返回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个字符,文本比前一个更深。例如347+£等。
  5. +0用于尝试将这些文本中的每一个转换为数字。如果一段文本无法转换为真数,则IFERROR函数返回TRUE。第一个不能变成真数的是4 th ,例如+
  6. IF在第四个位置捕获TRUE,从第二个ROW($1:$999)返回4。它已返回999位置1,2和3,例如999,999,999,4,5等
  7. MIN捕获作为数组返回的最小数字。这是 4 的来源。例如999, 999, 999, 4, 5, 999, ...
  8. 您可以通过将所有999更改为9然后使用Evaluate Formula命令来自行查看。更改为9的原因很重要,因为返回的数组数组看起来像 1,2,3,4,5,6,7,8,9 ,这不会非常混淆结果as 1,2,3,4,5,6,7,8,9,10,11,12,13,14,... 998,999

    evaluate_formula
    这表明该公式评估了该过程的几个步骤。请注意 4 返回MIN function