JOIN関数とは|読み方・構文・できること
Googleスプレッドシートで「配列やセル範囲をカンマ区切りのテキストにまとめたい」と思ったことはありませんか?
CONCATENATE関数や&演算子でも結合はできます。でもセルが増えるほど数式が長くなって、読み返すのも修正するのもつらいですよね。
そんなときに便利なのがJOIN関数です。区切り文字と配列を渡すだけで、サッと1つの文字列にまとめてくれます。この記事ではJOIN関数の基本から、FILTER・QUERY・ARRAYFORMULAとの応用、TEXTJOIN・SPLIT・CONCATとの使い分けまで、実務でそのまま使える形で整理していきますね。
読み方と語源
JOIN関数の読み方は「ジョイン」です。英語で「結合する・つなぐ」という意味があります。名前のとおり「配列を結合する関数」とイメージしてください。
ひとつ覚えておきたいのが、JOIN関数はGoogleスプレッドシート独自の関数という点です。Excelには搭載されていません。Excelで同じことをやりたいときはTEXTJOIN関数を使ってくださいね。
JOIN関数でできること・できないこと
JOIN関数の役割を1枚の表で整理するとこうなります。
| できること | できないこと |
|---|---|
| 配列・セル範囲を区切り文字で結合 | 空白セルを自動でスキップ |
| 複数の引数を並べて結合 | IF関数の結果配列を直接受け取る(FILTER経由が必要) |
| 2次元の範囲も結合 | 日付や数値の書式を保持した結合(TEXT併用が必要) |
| 区切りなし(空文字)の結合 | Excelでの実行 |
「空白スキップができない」と「書式保持ができない」がJOIN関数のクセです。この2点さえ押さえれば、ほとんどの場面で迷いません。
JOIN関数の基本的な使い方|書き方と引数の例
構文と引数の説明
JOIN関数の構文はこちらです。
=JOIN(区切り文字, 値または配列1, [値または配列2, ...])
| 引数 | 必須/省略可 | 説明 |
|---|---|---|
| 区切り文字 | 必須 | 値の間に挿入する文字列(”,”や” “など) |
| 値または配列1 | 必須 | 結合したい値、セル参照、またはセル範囲 |
| 値または配列2, … | 省略可 | 追加で結合したい値や配列 |
第1引数の区切り文字には空文字””も指定できます。区切りなしで結合したいときに使ってくださいね。
基本的な書き方の例
A1からA4に「東京」「大阪」「名古屋」「福岡」と入っている場合を見てみましょう。
=JOIN(", ", A1:A4)
→ 「東京, 大阪, 名古屋, 福岡」
区切り文字にカンマ+スペースを指定するだけで、きれいなリストが完成します。セルが何個あっても数式は変わりません。
セル範囲ではなく個別のセルを指定することもできます。
=JOIN("-", A1, B1, C1)
→ 「東京-大阪-名古屋」
引数を複数並べても結合できますが、セル範囲のほうがスッキリ書けますよ。
複数範囲を一度に結合する
範囲を複数指定することもできます。A列とB列を横につなげたリストを作りたい場合はこうです。
=JOIN(", ", A1:A3, B1:B3)
→ 「東京, 大阪, 名古屋, 札幌, 仙台, 福岡」
範囲ごとに順番に結合されます。行ごとに交互に結合したいときはARRAYFORMULAを使いますが、これは後述の応用パートで扱いますね。
区切り文字なしで結合する
区切り文字に空文字 "" を指定すれば、区切りなしで連結できます。
=JOIN("", A1:A3)
→ 「東京大阪名古屋」
ただし区切りなしの単純結合なら、CONCAT関数のほうが意図が伝わりやすいです。用途に応じて選んでくださいね。
JOIN関数の実務パターン7選
実務でよく使う7つのパターンを、そのままコピーして使える形で紹介します。
パターン1: カンマ区切りリストを作る
タグ一覧やメール宛先リストを作るときの定番パターンです。A列にメールアドレスが入っている場合はこう書きます。
=JOIN("; ", A1:A5)
→ 「user1@example.com; user2@example.com; user3@example.com; ...」
セミコロン+スペースで区切れば、メールのCC欄にそのまま貼り付けられる形になりますよ。Gmailの「連絡先を貼り付け」にも使えます。
パターン2: 改行コードでセル内改行を作る
CHAR(10)を区切り文字に使うと、セル内で改行した文字列を作れます。
=JOIN(CHAR(10), A1:A4)
結果のセルで「折り返して全体を表示する」書式を設定すると、各値が1行ずつ表示されます。議事録の出席者リストやタスクの進捗サマリーを1セルにまとめたいときに重宝しますよ。
CHAR(10)のほかにCHAR(13)(キャリッジリターン)も使えますが、スプレッドシートではCHAR(10)が一般的です。
パターン3: 日付と数値を書式整えて結合
JOIN関数は日付や数値をそのまま結合するとシリアル値になってしまいます。書式を保持したいときはTEXT関数で変換してから渡します。
=JOIN("/", TEXT(A1, "yyyy"), TEXT(B1, "m"), TEXT(C1, "d"))
→ 「2026/3/21」
通貨や%表示なども同じ要領です。
=JOIN(" - ", A1, TEXT(B1, "¥#,##0"), TEXT(C1, "0.0%"))
→ 「売上 - ¥1,234,567 - 12.5%」
パターン4: プレフィックス・サフィックスを付けて結合
各要素に「〇〇:」「- 」のような接頭語を付けたいときは、ARRAYFORMULAとの組み合わせが便利です。
=JOIN(", ", ARRAYFORMULA("#" & A1:A3))
→ 「#東京, #大阪, #名古屋」
ハッシュタグ付きリストやNotion風の箇条書きリストが一発で作れますよ。
パターン5: 曜日リストや固定配列を作る
配列リテラル {} を直接渡すこともできます。
=JOIN(" / ", {"月","火","水","木","金","土","日"})
→ 「月 / 火 / 水 / 木 / 金 / 土 / 日」
シート上にデータを用意しなくても、数式内で完結する使い方です。アンケート選択肢の区切り表示などに向いていますね。
パターン6: SORT と組み合わせて並び順を整える
そのままのA列順ではなく、五十音順・日付順でリスト化したい場合はSORT関数と組み合わせます。
=JOIN(", ", SORT(A2:A10))
→ 「大阪, 京都, 神戸, 名古屋, 東京」
昇順がデフォルトなので、降順にしたいときは SORT(A2:A10, 1, FALSE) としてくださいね。
パターン7: UNIQUE で重複排除してから結合
重複のあるデータから一意な値だけ取り出してリスト化したい場合です。
=JOIN(", ", UNIQUE(A2:A100))
→ 「東京, 大阪, 名古屋」(重複除去後)
「今月のユニーク来店客リスト」「登場したカテゴリの一覧」などでよく使うパターンですよ。SORTと併用するとさらに読みやすくなります。
=JOIN(", ", SORT(UNIQUE(A2:A100)))
FILTER・QUERY・ARRAYFORMULAとの組み合わせ応用
JOIN関数がもっとも輝くのは、他の配列関数と組み合わせたときです。ここでは実務度の高い3パターンを掘り下げます。
FILTER で条件付き結合
FILTER関数で絞り込んだ結果をJOIN関数で結合する方法です。A列に名前、B列に部署が入っているとします。
「営業部」のメンバーだけをカンマ区切りで結合する数式です。
=JOIN(", ", FILTER(A2:A10, B2:B10="営業部"))
→ 「田中, 佐藤, 高橋」
FILTER関数が条件に合う名前の配列を返します。JOIN関数がその配列をカンマ区切りで結合します。2つの関数を組み合わせるだけで条件付き結合が完成しますよ。
複数条件にしたいときは *(AND)や +(OR)を使います。
=JOIN(", ", FILTER(A2:A10, B2:B10="営業部", C2:C10>=3))
→ 営業部で勤続3年以上の名前だけ結合
FILTER + JOIN の活用場面
部署別の名前リスト、カテゴリ別の商品一覧、ステータス別のタスク一覧、担当者別の案件リストなど、「条件で絞り込んでからリスト化する」パターンに幅広く使えます。
FILTER結果が空のときのエラー回避
条件に合うデータがないとFILTERは #N/A を返してJOINも失敗します。IFERRORで包んでおくと安心です。
=IFERROR(JOIN(", ", FILTER(A2:A10, B2:B10="広報部")), "該当なし")
QUERY で SQL 風の抽出結果を結合
QUERY関数で抽出した結果もJOIN関数で結合できます。
=JOIN(", ", QUERY(A2:C100, "SELECT A WHERE C='完了'", 0))
→ ステータスが完了の案件名だけをカンマ区切りで結合
QUERYの柔軟な条件指定とJOINのテキスト化がハマる組み合わせです。レポート作成の常連コンビなので、ぜひ覚えておいてくださいね。
ARRAYFORMULAで行ごとに結合して1列に収める
「A〜C列の値を各行ごとに結合して、D列に1列で出力したい」ときはARRAYFORMULAが使えます。ただしJOIN関数は配列展開に制約があるので、行ごとの結合には&演算子のほうが安定します。
# D1に入力
=ARRAYFORMULA(IF(A1:A10="","", A1:A10 & "-" & B1:B10 & "-" & C1:C10))
どうしても区切り文字を可変にしたいなら、行ごとに TEXTJOIN を使うほうが柔軟です。
# D1に入力(TEXTJOIN版)
=ARRAYFORMULA(IF(A1:A10="","", TEXTJOIN("-", TRUE, A1:A10, B1:B10, C1:C10)))
JOINとARRAYFORMULAは相性に制約があるので、行ごとの結合ではTEXTJOINや&演算子を選ぶと挙動が安定しますよ。
TEXTJOIN関数との違いと使い分け
JOIN関数とTEXTJOIN関数はどちらも区切り文字で結合する関数です。似ているようで大きな違いがあります。
比較表
| 項目 | JOIN | TEXTJOIN |
|---|---|---|
| 空白セルのスキップ | 不可(空白もそのまま結合) | 第2引数でTRUE/FALSE制御 |
| 引数の並び | 区切り文字, 配列… | 区切り文字, 空白無視, テキスト… |
| IF配列との相性 | 不可(FILTER経由が必要) | 直接IF配列を渡せる |
| 最大文字数 | セル上限(約50,000字) | セル上限(約50,000字) |
| Sheets対応 | 対応(独自関数) | 対応 |
| Excel対応 | 非対応 | 対応(Microsoft 365 / Excel 2019以降) |
どちらを使うべきか(選び方フロー)
次の基準で選んでみてください。
- 空白セルが混じるデータ → TEXTJOIN(空白スキップ機能あり)
- IF関数の結果を直接結合したい → TEXTJOIN
- 空白セルがないクリーンな配列 → JOIN(引数がシンプル)
- FILTER・UNIQUE・SORTの結果を結合 → JOIN(相性が良く書きやすい)
- Excelとの互換性が必要 → TEXTJOIN(Excel側でも動作する)
空白セルを含むデータなら迷わずTEXTJOINです。空白のないデータやFILTER関数の結果を結合するなら、引数がシンプルなJOINが便利ですよ。
実例で比較する
A列が 東京 / (空白) / 大阪 / (空白) / 名古屋 の場合の結果を比較してみましょう。
=JOIN(", ", A1:A5)
→ 「東京, , 大阪, , 名古屋」(空白のせいでカンマが連続)
=TEXTJOIN(", ", TRUE, A1:A5)
→ 「東京, 大阪, 名古屋」(空白スキップ)
見た目の美しさに差が出ますね。実務では空白が混じることも多いので、TEXTJOINに切り替える選択肢を常に持っておくと安心です。
SPLIT関数との逆関数関係(結合と分割の往復)
JOIN関数とSPLIT関数は「結合」と「分割」の逆の関係にあります。セットで覚えておくと便利です。
| 操作 | 関数 | 例 |
|---|---|---|
| 結合 | JOIN | 3つのセル → 「東京,大阪,名古屋」 |
| 分割 | SPLIT | 「東京,大阪,名古屋」→ 3つのセルに分割 |
実際に相互変換してみましょう。
結合(JOIN):
=JOIN(",", A1:C1)
→ 「東京,大阪,名古屋」
分割(SPLIT):
=SPLIT("東京,大阪,名古屋", ",")
→ A1:「東京」, B1:「大阪」, C1:「名古屋」
同じ区切り文字(カンマ)を使えば、元の形に戻せます。データの結合と分割を行き来する場面で活躍しますよ。
往復の典型シーン
- CSV形式で貼り付けたテキストを分割(SPLIT) → 必要な列だけ取り出して結合(JOIN)
- タグ文字列を分割して並び替え → 再結合
- フォーム回答の自由記述欄を単語分割 → 条件に合うものだけ結合
SPLITとJOINをセットで使うと、データクレンジングの小さなETLパイプラインが作れます。
CONCAT・CONCATENATEとの違いと使い分け
単純に文字列を連結したいならCONCAT関数やCONCATENATE関数が候補になります。違いは区切り文字の扱いです。
| 関数 | 区切り文字 | 配列対応 | 空白スキップ | 主な用途 |
|---|---|---|---|---|
| JOIN | 指定できる | 可 | 不可 | 区切り付きリスト化 |
| TEXTJOIN | 指定できる | 可 | 可(オプション) | 区切り付き+空白対応 |
| CONCAT | なし | 可(一部) | – | 2値の単純連結 |
| CONCATENATE | なし | 不可 | – | 旧版の単純連結 |
選び方の早見表
- 区切り文字入り、空白なしデータ → JOIN
- 区切り文字入り、空白混じり → TEXTJOIN
- 区切りなしの単純連結 → CONCAT
- 古いスプレッドシートで互換性重視 → CONCATENATE
CONCATは =CONCAT(A1, B1) のような2値の連結が中心で、JOIN/TEXTJOINのように区切り文字を一括指定できません。リスト化にはJOIN系を選ぶのが定石です。
JOIN関数でよくあるエラーと対処法
JOIN関数で発生しやすいエラーと落とし穴をまとめます。
| エラー・症状 | 原因 | 対処法 |
|---|---|---|
| 区切り文字が連続する(”, ,”) | 空白セルが含まれている | TEXTJOIN関数に切り替えて第2引数をTRUEに |
| #N/A エラー | FILTER関数が条件に合うデータを見つけられない | FILTER結果をIFERROR関数で囲む |
| #VALUE! エラー | 第2引数以降を指定していない | 結合対象を必ず1つ以上指定 |
| 数値がシリアル値になる | 日付セルをそのまま渡した | TEXT関数で書式変換してから結合 |
| 結果が空になる | 指定範囲のセルがすべて空 | データの入力範囲を確認する |
| 改行が表示されない | CHAR(10)を使ったが折り返し未設定 | 表示形式→折り返し→「折り返す」を設定 |
| 文字化けする | タブやNULL文字が混じる | CLEAN関数でクリーンアップしてから結合 |
| パフォーマンスが劣化 | 大量行(1万以上)を一気に処理 | QUERY/FILTERで事前に絞り込む |
いちばん多いのが「区切り文字が連続する」ケースです。JOIN関数には空白セルをスキップする機能がありません。データに空白が混じるときはTEXTJOIN関数を使ってくださいね。
FILTER結果が空になるときの対処(サンプル)
条件に一致するデータがないとFILTERは #N/A を返します。JOINの外側でIFERRORを使うのが定番です。
=IFERROR(JOIN(", ", FILTER(A2:A100, B2:B100="広報部")), "該当なし")
同じ要領でIFNA関数を使ってもOKです。
=IFNA(JOIN(", ", FILTER(A2:A100, B2:B100="広報部")), "該当なし")
日付書式を保持するサンプル
日付セルをそのまま渡すと、内部のシリアル値(例: 46021)が結合されてしまいます。TEXT関数で書式変換してから渡しましょう。
=JOIN(" / ", TEXT(A1:A3, "yyyy/mm/dd"))
→ 「2026/03/21 / 2026/03/22 / 2026/03/23」
TEXT関数に配列を渡すときはARRAYFORMULAを挟むと安定する場面があります。動かないときは =ARRAYFORMULA(JOIN(" / ", TEXT(A1:A3, "yyyy/mm/dd"))) を試してくださいね。
パフォーマンス劣化への対処
1万行を超えるような大きな範囲をJOINで処理すると、数式の再計算が遅くなります。事前にFILTERやQUERYで範囲を絞り込む、あるいは必要な範囲だけを引数に渡すのが基本です。
# NG: 広すぎる範囲を全部渡す
=JOIN(", ", A1:A10000)
# OK: 必要な条件で絞ってから渡す
=JOIN(", ", FILTER(A1:A10000, B1:B10000="対象"))
まとめ
スプレッドシートのJOIN関数の使い方を振り返りましょう。
| 項目 | 内容 |
|---|---|
| 読み方 | ジョイン |
| 機能 | 配列やセル範囲を区切り文字で結合して1つの文字列にする |
| 構文 | =JOIN(区切り文字, 値または配列1, [値または配列2, …]) |
| TEXTJOIN との違い | JOINは空白スキップ機能なし。シンプルな引数構造 |
| 対になる関数 | SPLIT(分割) |
| 注意点 | Excelには非搭載(スプレッドシート独自関数) |
配列やFILTER関数の結果を手早くテキストにまとめたいなら、JOINがいちばんシンプルです。区切り文字ひとつを指定するだけで、カンマ区切りリストもセル内改行も自在に作れますよ。
空白セルが混じるデータにはTEXTJOIN関数、逆に文字列を分割したいときはSPLIT関数も合わせてチェックしてみてください。区切り文字なしで単純に結合したい場合はCONCAT関数やCONCATENATE関数もおすすめです。
JOIN・TEXTJOIN・SPLIT・CONCATの4つをセットで覚えれば、スプレッドシートでの文字列操作はほぼカバーできます。用途に合わせて使い分けてくださいね。
