Excel関数 逆引き集 | 1文字ずつ分解 → MID+SEQUENCE

Excel
スポンサーリンク

概要

「文字列を1文字ずつバラバラにしたい」
「1文字ごとにチェックしたい(数字だけ?特定文字が含まれている?など)」
「配列として1文字ずつ扱いたい」

こういうときに使えるのが MID+SEQUENCE の組み合わせです。
考え方はとてもシンプルで、

  • MID …「n文字目から1文字取る」
  • SEQUENCE …「1,2,3,…と連番をまとめて作る」

この2つを組み合わせて「1文字目」「2文字目」「3文字目」…を一気に取り出します。


基本の考え方

A2 に「ABC123」という文字列があるとします。

1文字だけ抜き出すなら MID だけで十分です。

=MID(A2, 1, 1)   ' → A
=MID(A2, 2, 1)   ' → B
=MID(A2, 3, 1)   ' → C

ポイントは「開始位置」だけが 1,2,3,… と変わっていることです。

ここに SEQUENCE 関数で「1,2,3,4,5,6」を一気に作ると、
MID の「開始位置」にその並びを渡して、
「1文字目から1文字」「2文字目から1文字」…と一括で処理できます。


横方向に1文字ずつ分解する基本パターン

A2 に「ABC123」が入っているとします。
これを B2 から右に向かって 1 文字ずつ分解する式は次のとおりです。

=MID(A2, SEQUENCE(1, LEN(A2)), 1)

SEQUENCE(1, LEN(A2))
「1行 × 文字数列」の連番を作ります。
A2 が「ABC123」なら、LEN(A2)=6 なので
{1,2,3,4,5,6} という配列になります。

MID(A2, {1,2,3,4,5,6}, 1)
=1文字目から1文字、2文字目から1文字…をまとめて返す
→ 結果として B2:C2:… と横方向にスピルします。

結果イメージ(B2 から右へ)
B2:A
C2:B
D2:C
E2:1
F2:2
G2:3

「文字数分の SEQUENCE を作る → MID の開始位置に渡す」
この型が、1文字ずつ分解の基本です。


縦方向に1文字ずつ分解するパターン

「横ではなく、縦に1文字ずつ並べたい」場合は、SEQUENCE の行と列を逆にします。

=MID(A2, SEQUENCE(LEN(A2)), 1)

SEQUENCE(LEN(A2)) は「LEN(A2) 行 × 1列」の配列を作ります。
例えば LEN(A2)=6 なら {1;2;3;4;5;6}(縦並び)です。

結果イメージ(B2 から下へ)
B2:A
B3:B
B4:C
B5:1
B6:2
B7:3

横に並べたいか、縦に並べたいかで、SEQUENCE の指定を変えるだけです。


応用1:1文字ずつ分解して「何文字目の何か」を調べる

例えば、A2 に「A1B2C3」が入っていて、

  • どの位置が数字か
  • どの位置が英字か

などを調べたいとき、まずは 1 文字ずつ配列化しておくと便利です。

B2 に次の式を入れて縦に分解します。

=MID(A2, SEQUENCE(LEN(A2)), 1)

さらに隣の列で ISNUMBER+VALUE などを使えば、「数字かどうか」の判定も行単位でできます(ここは少し応用編)。


応用2:何文字目に特定の文字が出てくるか調べる

例えば、「A2 の文字列を 1 文字ずつ分解して、“X” がどの位置にあるか知りたい」とします。

1文字ずつの配列:

=MID(A2, SEQUENCE(LEN(A2)), 1)

この配列の中で “X” に等しい場所を TRUE/FALSE に変え、MATCH などと組み合わせれば
「X が最初に出てくる位置」を求める、といった応用もできます。

(ここまで来ると完全に“配列思考”の世界ですが、
「1文字ずつ分解できると、判定ロジックを組みやすい」とイメージしてもらえれば十分です)


応用3:固定桁のコードを視覚的にチェックする

コードの桁数や構造を確認したいとき、
1文字ずつセルに並べるだけで「ここが数字じゃない」「ここに余計な空白がある」などを目視で確認しやすくなります。

例えば、A2 に「 123A5B」(先頭にスペースが紛れたコード)が入っていたとして、
B2 に

=MID(A2, SEQUENCE(1, LEN(A2)), 1)

と入れると、B2 から右に

「(空白)」「1」「2」「3」「A」「5」「B」

のように並ぶので、不正な空白や想定外の文字を一目で見つけられます。


例題

問題1

A2 に「ABC123」という文字列が入っています。
これを B2 から右方向に、1文字ずつ分解して表示する式を書いてください。
(MID と SEQUENCE を使ってください)

=MID(A2, SEQUENCE(1, LEN(A2)), 1)

問題2

A2 に「ABC123」という文字列が入っています。
これを B2 から下方向に、1文字ずつ分解して表示する式を書いてください。
(MID と SEQUENCE を使ってください)

=MID(A2, SEQUENCE(LEN(A2)), 1)

問題3

A2 に「A1B2C3」という文字列が入っています。
B2 から下方向に 1 文字ずつ分解して表示し、その配列を作る式を書いてください。

=MID(A2, SEQUENCE(LEN(A2)), 1)

問題4

A2 に任意の文字列が入っています。
その文字列の「各文字」を横一列にスピルさせて表示する式を書いてください。

=MID(A2, SEQUENCE(1, LEN(A2)), 1)

問題5

A2 に「EXCEL」という文字列が入っています。
MID+SEQUENCE を使って 1 文字ずつ分解し、その 3 文字目(C)だけを取り出す式を書いてください。
(ヒント:TEXTSPLIT の代わりに MID+SEQUENCE+INDEX を使うイメージです)

=INDEX(MID(A2, SEQUENCE(1, LEN(A2)), 1), 3)

MID+SEQUENCE の組み合わせは、
「文字列を1文字単位の配列に変換するための定番パターン」です。

型はとてもシンプルです。

横に分解:

=MID(文字列セル, SEQUENCE(1, LEN(文字列セル)), 1)

縦に分解:

=MID(文字列セル, SEQUENCE(LEN(文字列セル)), 1)

この2つを体で覚えておけば、
「1文字単位でのチェック・判定・加工」がぐっとやりやすくなります。

Excel
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました