以前は面倒だったけど、Microsoft365ならそうでもないことの内の一つ。
「123ABC45DE6789F」のように「数字+文字+数字+文字……」で繋がっている文字列を、「123」「ABC」「45」「DE」……と数字と文字で分割したい場合。
=LET(
_ts1,TEXTSPLIT(A1,,SEQUENCE(10,,0),TRUE),
_ts2,TEXTSPLIT(A1,,_ts1,TRUE),
IFERROR(TOROW(HSTACK(_ts2,_ts1)),"")
)
TEXTSPLIT関数が使えるならこれでいい。文字から始まる逆パターンを想定するならもう少し長くなるけど、大体はこんな感じの式でできる。
これが古いバージョンだとこうはいかない。
しなくてもできるけど余計に長くなるので、B列を挟んで C列から数式をスタートさせる。
C1に
=IFERROR(
IF(
REPLACE($A1,1,LEN(CONCAT($B1:B1)),"")<"9",
-LOOKUP(,-LEFT(
REPLACE($A1,1,LEN(CONCAT($B1:B1)),""),
{1,2,3,4,5}
))&"",
LEFT(
REPLACE($A1,1,LEN(CONCAT($B1:B1)),""),
MIN(
FIND(
{1,2,3,4,5,6,7,8,9,0},
REPLACE($A1,1,LEN(CONCAT($B1:B1)),"")
&1234567890
)
)-1
)
),
""
)
見ての通りやたらと長い。同じ記述が4ヶ所もあるので、Excel2021なら LETで定義したほうがいい。
あと、Excel2019より前のバージョンでは CONCAT関数が使えないので、「LEN(CONCAT($B1:B1))」を「SUMPRODUCT(LEN($B1:B1))」にする必要あり。
できるかどうかは置いといて、数式でやるなら TEXTSPLIT関数が使えるのを大前提としたいものである。