🚀The world's best VBA AI has evolved. ExcelMaster is now an autonomous Agent.Read more →
Back to Blog

ExcelのTEXTJOIN関数 — 範囲を区切り文字でつなぎ、空白セルは自動でスキップ

|

ExcelのTEXTJOIN関数 — 範囲を区切り文字でつなぎ、空白セルは自動でスキップ

要点TEXTJOIN は値の範囲を1つの文字列につなぎ、あいだに区切り文字を入れ、 そして——ここをほぼ全員が見落とします——空白セルを勝手に飛ばします。構文は =TEXTJOIN(区切り文字, 空白を無視, テキスト1, …)。肝は第2引数です。TRUE なら 空白を飛ばし "田中, , , 佐藤" のようにはならない。FALSE なら空きを残す。知って おく上限が1つ。結果は 32,767文字(セル1個分)を超えられず、超えると #VALUE! になります。Excel 365 / 2019 以降に対応。

=TEXTJOIN(", ", TRUE, A2:A100)
=TEXTJOIN(" | ", TRUE, FILTER(Email, Status = "有効"))

長らく、名前の列を "田中, 佐藤, 鈴木" にするには A2 & ", " & A3 & ", " & A4 … という鎖が必要で、セルが空になった瞬間(, , が紛れる)や誰かが行を挿入した瞬間に 壊れました。TEXTJOIN はその鎖を、範囲・区切り文字・空白スイッチの1つの式に置き換え ます。「1つのセルにリストを入れたい」ときの定番関数です。

この記事でわかること

  • なぜ区切り文字ではなく 空白を無視(ignore_empty)が肝心の引数なのか
  • 32,767文字の上限と、それが招く #VALUE!
  • CONCATCONCATENATE& 演算子より TEXTJOIN が勝つ場面
  • スピルした結果(FILTERUNIQUE)を1セルにまとめる方法
  • ほぼ誰も試さない区切り文字の裏技——区切り文字の配列

考え方の軸:区切り文字つきのグルーガン

& 演算子と古い CONCATENATE一度に2つを貼り、区切り文字はペアごとに手で打ち ます。TEXTJOIN はグルーガンです。区切り文字を1つ装填し、範囲全体に狙いを定めると、 区切りを値のあいだにだけ自動で置きます——末尾には付けません。この一点が、 TEXTJOIN が存在する理由であり、はるかに読みやすい理由です。

' 旧来——区切りを手で繰り返し、空白セルで壊れる:
=A2 & ", " & A3 & ", " & A4 & ", " & A5

' TEXTJOIN——区切り1つ、範囲1つ:
=TEXTJOIN(", ", TRUE, A2:A5)

すべての鍵となるルール:空白を無視こそが本体

「リストがカンマだらけになる」という相談で最も多いのがこれです。原因は区切り文字 ではなく第2引数空白を無視 が、空白セルの扱いを決めます。

' A3 と A5 が空:
=TEXTJOIN(", ", TRUE,  A2:A6)   ' -> "田中, 佐藤, 鈴木"        (空白はスキップ)
=TEXTJOIN(", ", FALSE, A2:A6)   ' -> "田中, , 佐藤, , 鈴木"    (空白を残す)

TRUE が95%の場面で正解です。区切りの重複も、先頭・末尾のカンマもない、きれいな リストになります。FALSE はもっとまれで意図的な選択——各位置が別の何かと揃う必要が あるとき(固定長レコード、空でも3番目の枠は3番目のままにしたいテンプレート)です。 &CONCATENATE が脆く感じるのは、このスイッチに当たるものが無いから。空白セル が全部、後で掃除する「見える穴」になります。

誰も言わない上限:32,767文字

TEXTJOIN の結果は1つのセルに収まり、セルは最大32,767文字です。長い列をつなぐと この上限を越えられます——そのとき Excel は切り詰めた文字列ではなく #VALUE! を返し ます。

=TEXTJOIN(",", TRUE, A:A)    ' -> 結合後が32,767文字を超えると #VALUE!

ここに当たったら、たいてい作るものを間違えています——数万文字の置き場として1つの セルはまず適切ではありません。範囲を区切る(A2:A500)か、そもそもそのデータが 1セルに入るべきかを考え直しましょう。

スピルした配列を1セルにまとめる

ここで TEXTJOIN は現代 Excel での価値を発揮します。動的配列関数—— FILTERUNIQUESORT——は結果を多数のセルにスピルします。逆に、その スピルを読める1つの文字列に畳みたいことがあります(まとめセル、メールの「宛先」行、 CSVの1行)。TEXTJOIN は配列をそのまま受け取るので、入れ子にします。

' 有効な顧客のメールを、重複なしで、1セルに:
=TEXTJOIN("; ", TRUE, UNIQUE(FILTER(Email, Status = "有効")))

管理するスピル範囲も作業列も不要——内側の関数が配列を作り、TEXTJOIN がそれを平らに します。区切り文字は配列にもでき({", "; " と "})、最後の要素だけ別のつなぎ方に する裏技も使えます。ほとんどの解説が見せない技です。

判断:TEXTJOIN・CONCAT・& のどれ?

& は既知の2〜3個を貼るときだけ(姓 & " " & 名)。範囲リストをつなぐ瞬間、 問いはこうなります——区切り文字が要るか、空白を飛ばしたいか。要るなら——そしてほぼ 常に要ります——TEXTJOINCONCAT に手を伸ばすのは、 本当に区切りなしかつ空白を飛ばさないときだけ。&SUBSTITUTE を足して区切り を偽装し始めた時点で、最初から欲しかったのは TEXTJOIN です。

ExcelMaster の使いどころ

TEXTJOIN の作業の多くは、要するに「この列を、どこかに貼れる文字列にして」です—— 期限超過の人全員のメールアドレスを、セミコロン区切りでExcelMaster は、 空白を無視 スイッチも、つなぎに必要な FILTER/UNIQUE も含めて、その式を日本語の 指示から書き、置きたい場所に結果を出します。リストはあなたが説明し、結合は任せられ ます。

よくある質問

Excelでセルをカンマで結合するには?

=TEXTJOIN(", ", TRUE, A2:A100) を使います。第1引数が区切り文字、第2引数(TRUE)が 空白セルのスキップ、第3引数が範囲です。カンマと空白は値のあいだにだけ現れ、末尾には 付きません。

TEXTJOINで空白セルを無視させるには?

第2引数を TRUE にします:=TEXTJOIN(", ", TRUE, 範囲)FALSE だと空白セルが空の 枠になり、"a, , b" のように区切りが重複します。

TEXTJOINが#VALUE!を返すのはなぜ?

最も多い原因は32,767文字の上限です。セルはそれ以上入らないため、値が多すぎる結合は あふれます。範囲を小さくするか、そのデータが1セルに収まるべきかを考え直しましょう。

TEXTJOINとCONCATENATEの違いは?

CONCATENATE(と &)は区切りなしで値を貼り、空白を飛ばす手段もなく、CONCATENATE は範囲をまるごと取れません——セルを1つずつ並べます。TEXTJOIN は範囲や配列を取り、 区切りを自動で入れ、必要なら空白を飛ばします。リストなら TEXTJOIN が常に勝ちます。

TEXTJOINはExcel 2016で使える?

使えません。TEXTJOIN は Excel 2019 / 365 から。2016では &CONCATENATE で 区切りを手書きします。

検証環境

検証環境: Excel 365(Windows 11)— 最終確認 2026-06-17。

関連ガイド: ExcelのTEXTSPLIT関数 · ExcelのCONCAT関数 · ExcelのFILTER関数 · VBAの文字列連結