(Excel)各文字の間に指定した文字を挿入する

 Excelで、関数を使ってセル内の各文字の間に任意の文字(文字列)を挿む方法についてです。
 具体的な利用例としては「1文字ごとにスペースを入れる」とか「1文字ごとにハイフンを入れる」といったものが考えられます。


TEXTJOIN/REGEXEXTRACT関数を使う方法

 数式は比較的簡単ですが、REGEXEXTRACT関数が使えるのはMicrosoft 365バージョンに限られる(2025年9月現在)ので注意してください。
 次の画像では、C3セルに数式を入力し、B3セルの文字列の各文字の間に「★」を挿んだ文字列を取得しています。

 C3セル

=TEXTJOIN("★",,REGEXEXTRACT(B3,".",1))

 文字列を1文字ずつに分割してからTEXTJOIN関数で「★」を挿みつつ結合しています。
 文字列を分割するところでTEXTSPLIT関数を使いたくなりますが1文字ずつ分割する適当な方法がないのでREGEXEXTRACT関数を使っています。第2引数(正規表現)を「"."」つまり任意の1文字とし、第3引数(返却パターン)を「1」とすることでマッチするすべてのものを取得しています。これにより文字列の1文字1文字を取得=1文字ずつ分割できるというわけです。


REGEXREPLACE関数を使う方法

 REGEXEXTRACT関数もMicrosoft 365バージョンのみで使用できる関数です(2025年9月現在)。
 次の画像ではREGEXREPLACE関数を使い、上記の例と同じことをやっています。

 C3セル

=REGEXREPLACE(B3,"(?<=.)(?=.)","★")

 正規表現の肯定後読み/先読みを使っています。先頭側の隣に文字(.)があり、かつ末尾側の隣に文字(.)があるような、文字と文字の間の部分を「★」に置き換えています。
 関数は1つで済むのですが、正規表現が難しいので内容的には面倒です。

TEXTJOIN/MID/SEQUENCE関数を使う方法

 REGEX~関数が使えないバージョン用の方法です。
 次の画像も上記の例と同じことをやっています。

 C3セル

=TEXTJOIN("★",,MID(B3,SEQUENCE(LEN(B3)),1))

 文字列の分割にMID/SEQUENCE関数を使っています。
 「SEQUENCE(LEN(B3))」により、1から5(文字列の文字数)までの連番を生成しています。これをMID関数の第2引数(抽出開始位置)とすることで、文字列の1文字目、2文字目…というように1文字ずつ分割することができます。
 あとはTEXTJOIN関数で「★」を挿みつつ結合しています。