概要
TEXTJOIN は
「複数の文字列を、指定した区切り文字で一気につなぐ」
ための関数です。
単なる「文字列の結合」だけでなく、
- 氏名や住所の整形
- CSV 形式やログ文の生成
- SQL文やVBAコードの自動生成
- 条件付きでの結合(空白セルを飛ばす など)
まで、文字列操作の“まとめ役”として非常に強力です。
ここでは、TEXTJOIN を中心にした「文字列操作まとめ」として、
基本から実務で使えるテンプレート、考え方を丁寧に整理します。
TEXTJOIN の基本
TEXTJOIN の書式は次の通りです。
=TEXTJOIN(区切り文字, 空白セルを無視するか, 結合したい文字列や範囲...)
区切り文字
結合の間に挟みたい文字。例えば「, 」「 / 」「改行」など。
空白セルを無視するか
TRUE:空白セルは飛ばして結合、FALSE:空白もそのまま含める。
結合したい文字列や範囲
直接文字列を書いてもいいし、A1:A10 のような範囲でもよい。
例えば、A1:A3 に「山田」「太郎」「様」が入っていて、スペース無しで結合したい場合。
=TEXTJOIN("", TRUE, A1:A3)
結果は「山田太郎様」となります。
区切り文字を使った基本的な文字列操作
カンマ区切りの一覧を作る
A2:A5 に「東京」「大阪」「名古屋」「福岡」が入っているとき、
「東京,大阪,名古屋,福岡」のような一覧を作りたい場合。
=TEXTJOIN(",", TRUE, A2:A5)
スペースも付けたいなら、
=TEXTJOIN(", ", TRUE, A2:A5)
とすれば「東京, 大阪, 名古屋, 福岡」となります。
改行でつなぐ(縦リスト → 複数行テキスト)
A2:A5 を「セル内で改行しながら」並べたいときは、区切りに改行コードを使います。
=TEXTJOIN(CHAR(10), TRUE, A2:A5)
セルの「折り返して全体を表示する」をオンにすれば、
1セルの中で縦に並んで見える「まとめテキスト」が作れます。
TEXTJOIN と他の文字列関数の組み合わせ
TEXTJOIN は「最後にまとめる役」で、その前段で他の関数と組み合わせると威力が増します。
TRIM や SUBSTITUTE で整形してからまとめる
例えば、A2:A5 にバラバラな表記の都市名があるとします。
前後スペースを削除してからカンマ区切りにする例。
B2 に次の式を入れて下へコピーします。
=TRIM(A2)
B列に整形済みの文字列ができたら、TEXTJOIN でまとめます。
=TEXTJOIN(", ", TRUE, B2:B5)
整形と結合を一発でやりたい場合は、TEXTJOIN の引数側で TRIM をかけるイメージで組み立てます(FILTER や BYROW と一緒に使う上級パターンもありますが、初心者向けとしては“中間列を作る”方法がわかりやすいです)。
TEXT と組み合わせて「表示形式をそろえて結合」
日付や数値を混ぜて、読みやすい文章やログを作るときは TEXT と相性抜群です。
B2 に日付、C2 に金額が入っているとして、
=TEXT(B2,"yyyy/mm/dd") & ":" & TEXT(C2,"#,##0") & "円"
のような文章を、複数行分まとめて1セルに表示したい場合、
まず D2:D10 に上の「1行分の文章」式を作り、それを TEXTJOIN します。
=TEXTJOIN(CHAR(10), TRUE, D2:D10)
これで「日付:金額円」の行が、改行付きでまとまります。
条件付きの文字列結合(空白セル無視・条件セルと組み合わせ)
TEXTJOIN の第2引数「空白セル無視」が、実務でかなり便利です。
空白セルを飛ばして結合する
A2:A6 に「名前の部品」が入っていて、
途中が空欄のことがあるとします(ミドルネームなど)。
例:
A2:山田
A3:(空白)
A4:太郎
A5:様
A6:(空白)
このとき、
=TEXTJOIN("", TRUE, A2:A6)
とすれば、空白を飛ばして「山田太郎様」となります。
第2引数を FALSE にすると、空白もそのまま扱われます。
=TEXTJOIN("", FALSE, A2:A6)
だと、空白も含めた結合になります。
条件を満たすものだけをつないでいく(基本の発想)
「OK の行だけを結合したい」のような場面では、
基本的には FILTER や IF などの配列式と組み合わせますが、
初心者向けには「条件を満たす文字列だけを別列に出し、それを TEXTJOIN する」という分かりやすい方法をよく使います。
例えば、B列にフラグ(OK/NG)、A列に名前。
OK の名前だけカンマ区切りにしたい場合:
C2 に次の式を入れて下へコピー。
=IF(B2="OK",A2,"")
そして、集約セルで
=TEXTJOIN(", ", TRUE, C2:C100)
とすれば、「OK の人の名前一覧」だけを簡単に作れます。
文字列操作テンプレート(TEXTJOIN中心)
ここまでの内容を「そのまま使える型」として整理します。
単純結合(区切りなし)
=TEXTJOIN("", TRUE, A2:A5)
カンマ区切り一覧
=TEXTJOIN(", ", TRUE, A2:A5)
改行区切り一覧(セル内改行)
=TEXTJOIN(CHAR(10), TRUE, A2:A5)
空白セルを飛ばして氏名+敬称を作る
=TEXTJOIN("", TRUE, A2:A4)
(A2:姓、A3:名、A4:様 など)
整形済み文字列のリストをまとめてログ化
=TEXTJOIN(CHAR(10), TRUE, D2:D50)
(D列に「日付+ユーザー+メッセージ」を TEXT などで整形しておく)
応用的な考え方:TEXTJOIN を「最後のまとめ役」として意識する
TEXTJOIN は、それ自体が複雑な処理をするのではなく、
「前段で作った“文字列の部品”を、きれいに並べる」係です。
つまり、
- 必要なら TRIM / SUBSTITUTE / TEXT / IF などで「部品」を整える
- 部品を縦(または横)に並べる
- TEXTJOIN で「どう並べるか?」だけを決める
この 3 ステップで考えると、設計がきれいになります。
「なんでもかんでも TEXTJOIN の中でやろう」とすると、
かえって式が読みにくくなるので、
慣れるまでは「中間列を使ってから TEXTJOIN」という構成がおすすめです。
例題
問題1
A2:A5 に
A2:東京
A3:大阪
A4:名古屋
A5:福岡
が入っています。
これらを「東京, 大阪, 名古屋, 福岡」という 1 つの文字列にしたいです。
TEXTJOIN を使った式を書いてください。
=TEXTJOIN(", ", TRUE, A2:A5)
問題2
A2:A4 に「姓」「名」「様」が入っており、
A3(名)が空欄の場合もあります。
空欄は無視して、「山田太郎様」や「山田様」のように結合したいです。
TEXTJOIN を使った式を書いてください。
=TEXTJOIN("", TRUE, A2:A4)
問題3
A2:A6 に複数行のメッセージ文があります。
これらを 1 セル内で改行しながら表示したいです(折り返し表示はオンにするとします)。
TEXTJOIN を使った式を書いてください。
=TEXTJOIN(CHAR(10), TRUE, A2:A6)
問題4
A列に名前、B列に「OK」または「NG」が入っています。
B列が「OK」の行だけの名前を、カンマ区切りで 1 セルに出したいです。
C列で IF を使って「OK のときだけ名前を出す」処理をし、
その C列を TEXTJOIN でまとめる想定で、TEXTJOIN 側の式を書いてください。
=TEXTJOIN(", ", TRUE, C2:C100)
問題5
D2:D10 に、すでに=TEXT(…)+ユーザー名+メッセージ
の形で整形済みのログ文が入っています。
これらを 1 セルにまとめて、行ごとに改行して表示したいです。
TEXTJOIN を使った式を書いてください。
=TEXTJOIN(CHAR(10), TRUE, D2:D10)
TEXTJOIN は「文字列操作の最後のまとめ」の役目です。
前処理は他の関数に任せて、
最後に「どう並べたいか?」だけを TEXTJOIN に語りかける。
この意識を持つと、文字列操作全体の設計がぐっとクリアになります。

