なんでもエクセル(Nandemo Excel)

何でもエクセルでやってしまう そこのあなた。ようこそ

数式/関数:文字列から数字と文字を分割する

以前は面倒だったけど、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関数が使えるのを大前提としたいものである。