Excel。数値を右揃えでセルに1文字ずつ振り分けたい
<MID+TEXT+SEQUENCE+LEN関数>
あるフォーマットがあって、入力したデータを1セルに1文字ずつ振り分けて入力したい
A列に数値や文字のデータを入力しております。
あいうえお ならば、B4:F5にかけて、1セル1文字ずつ振り分けて入力したいわけです。
そこで、B2にはどのような数式を設定したかというと、
=MID(A2,SEQUENCE(1,LEN(A2)),1)
この数式で、対応することができます。
この数式を確認しておきましょう。
MID関数は、文字列の中で指定した場所から指定した文字数を抽出する関数です。
最初の引数は、文字列なので、A2
2つ目の引数は、開始位置。ここにSEQUENCE関数を使っています。
SEQUENCE関数のところは、あとで説明します。
3つ目の引数は、文字数。抽出したい文字数なので 1
ポイントになるSEQUENCE関数です。
SEQUENCE関数は、数列を返す関数です。
最初の引数は、行。1行内に収めますので、1
2つ目の引数は、列。文字数の列が必要です。
そこで、文字数を求めることができるLEN関数をネストします。
あいうえお ならば 5 という具合です。
このSEQUENCE関数は、スピル機能に対応した関数なので、オートフィルで数式をコピーしなくてもA列の文字数分列を作ってくれます。
このように、
=MID(A2,SEQUENCE(1,LEN(A2)),1)
という数式で、左側から1文字つずつ振り分けて入力することができます。
ただ、数値の場合は、左詰めではなくて、右詰にしたいわけです。
あいうえお のような文字列ならばいいのですが、どうやったら、123などの数値を右詰にすることができるのでしょうか。
TEXT関数をつかって、次のように修正してみました。
=MID(TEXT(A2,"0000000"),SEQUENCE(1,LEN(TEXT(A2,"0000000"))),1)
これで、右詰めにすることはできました。
TEXT関数をつかってしまったので、文字型になっています。セル内が左揃えになっていますので、右揃えに修正すればOKです。
ここまでで、いいとは思いますが、0は消したいよね。とさらに欲もでてきます。
0を消すにはIF関数をつかうのが、一番わかりやすい方法です。
=IF(MID(TEXT(A2,"0000000"),SEQUENCE(1,7),1)="0","",MID(TEXT(A2,"0000000"),SEQUENCE(1,7),1))
0だったら空白、そうでなければ、そのままという判断分岐をさせます。
欠点は、可読性が悪くなりました。
LET関数を使う方法もあることはありますが、ちょっと苦手な人も多いようなので、参考までですが、LET関数をつかうと、可読性も向上します。
=LET(t,TEXT(A2,"0000000"),m,MID(t, SEQUENCE(1,7),1),IF(m="0","",m))

