2016-03-21 6 views
1

を抽出するためのロジックはなく、使用されている配列数式次のサンプルデータ式まず£図形を抽出するための特定のセルデータ

(24M UNLTD + INS 30ギガバイト£347 +£30 S6)

から第1でStackoverflowの質問です。

{=MID(A1,FIND("£",A1),MIN(IF(ISERROR(MID(MID(A1,FIND("£",A1)+1,999),ROW($1:$999),1)+0),ROW($1:$999),999)))} 

以下の画像に示すように、式の分析を試みました。私はそれが式のこの部分は、この式の種々の成分の役割を明確にするために工夫されていること4.要求の姿につながるかについては一部のロジック

MIN(IF(ISERROR(MID(MID(A1,FIND("£",A1)+1,999),ROW($1:$999),1)+0),ROW($1:$999),999)) 

を把握することはできませんよ。標準(非アレイ)式として以下を試し

ste by step working on formula

答えて

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 番目の文字なので、21を返します。
  2. MID(A2, FIND("£",A2)+1, 999)は最初の£記号の後に続くテキストを抽出します。テキストは数字で始まるように見えるかもしれませんが、数字のような偽装テキストです。例えば347 +£30 S6
  3. アレイの式では、ROW($1:$999)は、計算の各サイクルで1ずつ増加する1から999までの数字のシーケンスとして処理されます。
  4. MID(MID(A1, FIND("£", A1) + 1, 999), ROW($1:$999), 1) + 0)は、テキスト値の配列を返します。テキスト値の配列は、それぞれ1文字の長さと1文字の位置が前の文字よりも深くなります。例えば347+£など
  5. +0
  6. を試してみて、番号にテキストのこれらの作品のそれぞれを変換するために使用されます。 IFERROR関数は、テキストを真の数値に変換できない場合にTRUEを返します。真の数字にすることができない最初のものは、4 thです。 +
  7. IFは、4番目の位置でTRUEをキャッチし、2番目のROW($1:$999)から4を返します。 1位、2位、3位には999が返されました。
  8. MINは、配列として返されるこれらの数字のうち、最小のものをキャッチします。これは、の由来です。例えば999, 999, 999, 4, 5, 999, ...

Evaluate Formulaコマンドを使用して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
これは、プロセスにいくつかのステップが評価された式を示しています。 がMIN functionに返されていることに注意してください。

+0

ご連絡いただきありがとうございます。私はあなたの知識と経験に深い敬意を払います。配列式のMIN部分を理解する上での難しさを明確にすることができれば、それはさまざまな状況で頻繁に発生するので、私は感謝します。 – skkakkar

+0

その部分は書いて説明するのに少し時間がかかります。私は上記で十分だと思います。 – Jeeped

+0

数式とその関連ロジックのさまざまなステップを明確にしてくれて、ありがとう。今は物事が私には明らかなクリスタルです。 – skkakkar

関連する問題