概要
「文字列を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文字単位でのチェック・判定・加工」がぐっとやりやすくなります。
