配列数式がどのように機能するかについてもう少し詳しく説明します (@Jacob の数式は、「A1A」の場合は 0 など、いくつかのケースでは少し間違っているようです)。読む。うまくいかない例があれば教えてください。
=IF(
LEN(A1)=0
,0
,MIN(
IF(
ISNUMBER(
1*MID(
A1,
ROW(INDIRECT("A1:A"&LEN(A1))),
1
)
),
ROW(INDIRECT("A1:A"&LEN(A1))),
LEN(A1)+1
)
)
)
- この中心にあるのは row() 関数です。配列モードでは、範囲 a1:a*n* のセルごとに 1 回評価されます。ここで、nはセル A1 の文字列の長さであり、配列 { 1,2,..., n }.
- 配列は MID 関数に渡され、配列 {*char_1*,*char_2*,...,*char_n*} が生成されます。
- 配列は 1 で乗算され、以降の手順で数字がテキストとして解析されるのを防ぎます。これは、VALUE() を使用して行うこともできます。
- 次に、論理値の配列を出力する ISNUMBER() 関数に渡されます。
これは、 IF に渡される条件の配列です。次に、手順 1 を繰り返して、各文字の位置を含む 2 番目の配列を作成します。配列モードの IF 関数は、出力の配列を生成します。条件が TRUE であるケースは、文字位置の配列から対応する値に設定され、残りはすべて LEN(A1)+1 に設定されるため、数値文字の可能な位置の値よりも大きくなります。
次に、MIN 関数は IF による配列出力を評価し、セル A1 の文字列の最初の数字の位置である最小値を返します。最も外側の IF 関数は、セルにテキストがない場合、数式が 1 ではなく 0 を返すように強制します。それ以外の場合、INDIRECT は #REF を返します。上方に伝播するセル A0 を検索するとエラーが発生し、IF によって FALSE 条件が返され、0 + 1 = 1 が返されます。
代わりに最初の非数値文字の位置を検索するには、IF の 2 番目の 2 つの引数の順序を逆にするだけです。
=IF(
LEN(A1)=0
,0
,MIN(
IF(
ISNUMBER(
1*MID(
A1,
ROW(INDIRECT("A1:A"&LEN(A1))),
1
)
),
LEN(A1)+1,
ROW(INDIRECT("A1:A"&LEN(A1)))
)
)
)