タグ: 連結

  • CONCATENATE関数の使い方|&演算子との違いと使い分け

    CONCATENATEは、複数の文字列をつなげる関数です。

    「姓」と「名」を結合してフルネームにする、住所の各項目をつなげる、といった処理に使います。

    ただし実務では、& 演算子か TEXTJOIN を使うほうが多いのが実情です。この記事では使い分けまで整理します。

    書式

    =CONCATENATE(文字列1, [文字列2], ...)

    基本の使い方

    A B
    1 山田 太郎
    =CONCATENATE(A1, B1)      → 山田太郎
    =CONCATENATE(A1, " ", B1) → 山田 太郎

    区切り文字を入れたいときは、間に文字列を挟みます。

    &演算子との違い

    同じことが & でも書けます。

    =A1 & B1
    =A1 & " " & B1

    結果はまったく同じです。 どちらを使うかは好みの問題ですが、実務では次のような使い分けが一般的です。

    CONCATENATE &
    短い連結 冗長 簡潔
    項目が多い 見やすい & だらけで読みにくい
    数式内での可読性 括弧が必要 直感的

    2〜3個なら &、それ以上なら関数、というのが目安です。

    範囲を渡したときの挙動

    ここが最大の注意点です。

    =CONCATENATE(A1:A5)

    この書き方は、期待通りに動きません。 スプレッドシートでは範囲を渡すと、最初のセルだけ、または配列として展開されるなど、環境によって挙動が不安定です。

    範囲をまとめて連結したいなら、TEXTJOIN を使ってください。

    =TEXTJOIN(", ", TRUE, A1:A5)

    区切り文字を指定でき、空欄を無視でき、範囲をそのまま渡せます。CONCATENATEの上位互換と考えて構いません。

    CONCATとの違い

    CONCAT という似た関数もあります。

    =CONCAT(A1, B1)

    引数を2つしか取れません。 3つ以上つなげたい場合はCONCATENATEか & を使ってください。

    Excelでは CONCAT が範囲に対応していますが、スプレッドシートの CONCAT は2引数専用です。同名でも挙動が違うので注意してください。

    日付や数値が崩れる原因

    日付をそのまま連結すると、内部の数値(シリアル値)が出てしまいます。

    =CONCATENATE("更新日:", A1)   → 更新日:46113

    TEXT で書式を指定してから連結してください。

    =CONCATENATE("更新日:", TEXT(A1, "yyyy/m/d"))   → 更新日:2026/4/1

    金額も同様です。

    =CONCATENATE("合計:", TEXT(A1, "¥#,##0"))   → 合計:¥1,234,567

    桁区切りやゼロ埋めは、連結すると消えます。 表示形式はセルの設定であって、値そのものではないためです。ここは実務で頻繁に起きるトラブルです。

    改行を入れる

    CHAR(10) が改行です。

    =CONCATENATE(A1, CHAR(10), B1)

    セルの書式で「折り返し」を有効にしないと、改行が見えません。 数式は正しくても表示されないので、書式を確認してください。

    全行に適用する

    ARRAYFORMULA と組み合わせられますが、& のほうが確実に動きます。

    =ARRAYFORMULA(IF(A2:A="", "", A2:A & " " & B2:B))

    CONCATENATEは配列に対する挙動が安定しないため、ARRAYFORMULA の中では & を使ってください。

    使い分けのまとめ

    やりたいこと 使うもの
    2〜3個のセルをつなぐ &
    項目が多く、可読性を上げたい CONCATENATE
    範囲をまとめて連結 TEXTJOIN
    区切り文字を入れて連結 TEXTJOIN
    空欄を飛ばして連結 TEXTJOIN
    ARRAYFORMULA の中 &

    迷ったら TEXTJOIN を検討してください。 CONCATENATEでしかできないことは、実質ありません。

    Excelとの違い

    CONCATENATE・&TEXTJOIN はすべて共通です。

    違いは CONCAT です。

    Excel スプレッドシート
    CONCAT の引数 範囲も可 2つまで
    CONCATENATE 非推奨(CONCAT 推奨) 現役

    ExcelではCONCATENATEは互換性のために残されている扱いですが、スプレッドシートでは普通に使えます。ただしどちらの環境でも、&TEXTJOIN を使うのが現代的です。

    まとめ

    • – 書式は =CONCATENATE(文字列1, 文字列2, ...)
    • & とまったく同じ結果。2〜3個なら & が簡潔
    • 範囲を渡すと期待通りに動かないTEXTJOIN を使う
    • – 日付・金額は TEXT で書式を指定してから連結する
    • – 改行は CHAR(10)。セルの折り返し設定も必要
    • ARRAYFORMULA の中では & を使う

    関連する関数

    • TEXTJOIN — 区切り文字付き・空欄無視で範囲を連結
    • TEXT — 日付や数値の書式を指定する
    • SPLIT — 逆に文字列を分割する
    • SUBSTITUTE — 文字列を置き換える
    • 関数一覧に戻る
  • TEXTJOIN関数の使い方|区切り文字を入れて範囲をまとめて連結

    TEXTJOINは、区切り文字を入れながら、複数のセルをまとめて連結する関数です。

    CONCATENATE& と違い、範囲をそのまま渡せて、空欄を自動で飛ばせます。 文字列連結の場面では、まずこれを検討してください。

    書式

    =TEXTJOIN(区切り文字, 空欄を無視するか, 文字列1, [文字列2], ...)
    引数 内容
    区切り文字 間に入れる文字。不要なら ""
    空欄を無視するか TRUE=空欄を飛ばす / FALSE=空欄も区切り文字を入れる
    文字列 セル、範囲、直接入力のいずれも可

    第2引数はほぼ TRUE で使います。

    基本の使い方

    A
    1 東京
    2 大阪
    3 (空欄)
    4 名古屋
    =TEXTJOIN(", ", TRUE, A1:A4)

    結果:東京, 大阪, 名古屋

    空欄が飛ばされているので、東京, 大阪, , 名古屋 のような区切り文字の連続が起きません。

    第2引数を FALSE にすると空欄も1件として扱われます。

    =TEXTJOIN(", ", FALSE, A1:A4)   → 東京, 大阪, , 名古屋

    列の位置を揃えたいときだけ FALSE を使ってください。

    CONCATENATEとの違い

    CONCATENATE TEXTJOIN
    範囲をそのまま渡す 不安定 できる
    区切り文字 手で挟む 引数で指定
    空欄を飛ばす できない できる

    TEXTJOINで置き換えられない場面はほぼありません。

    条件に合うものだけ連結する

    TEXTJOINが最も活きる使い方です。FILTER と組み合わせます。

    A B
    1 東京 山田
    2 大阪 鈴木
    3 東京 佐藤

    東京の担当者だけを並べます。

    =TEXTJOIN("、", TRUE, FILTER(B1:B3, A1:A3="東京"))

    結果:山田、佐藤

    「1対多」の関係を1セルにまとめられるのがこの組み合わせの価値です。VLOOKUP は1件しか返せませんが、これなら該当を全部つなげられます。

    支店ごとに一覧を作るなら、UNIQUE と組み合わせます。

    E2:  =UNIQUE(FILTER(A1:A100, A1:A100<>""))
    F2:  =TEXTJOIN("、", TRUE, FILTER($B$1:$B$100, $A$1:$A$100=E2))

    F2を下にコピーすれば、支店別の担当者一覧が完成します。

    改行で連結する

    CHAR(10) を区切り文字にします。

    =TEXTJOIN(CHAR(10), TRUE, A1:A10)

    セルの書式で「折り返し」を有効にしないと、改行が見えません。 数式が正しくても1行に見えるので、まず書式を確認してください。

    重複を除いて連結する

    UNIQUE を挟みます。

    =TEXTJOIN("、", TRUE, UNIQUE(FILTER(A1:A100, A1:A100<>"")))

    並べ替えてから連結する

    SORT を挟みます。

    =TEXTJOIN("、", TRUE, SORT(FILTER(A1:A100, A1:A100<>"")))

    FILTER → UNIQUE → SORT → TEXTJOIN の順で重ねると、「条件に合うものを、重複なしで、並べ替えて、1セルにまとめる」が1本の数式で書けます。

    =TEXTJOIN("、", TRUE, SORT(UNIQUE(FILTER(B1:B100, A1:A100="東京"))))

    日付や数値を連結する

    そのまま渡すと内部の数値が出ます。TEXT で書式を指定してください。

    =TEXTJOIN("、", TRUE, ARRAYFORMULA(TEXT(A1:A10, "m/d")))

    ARRAYFORMULA で包むことで、範囲の全要素に TEXT が効きます。

    注意点

    結果の文字数に上限があります。 1セルに入る文字数(約5万文字)を超えるとエラーになります。数千件を連結するような使い方はできません。

    元データが変わると結果も変わります。 これは利点でもありますが、「その時点の一覧」を保存したいなら、結果をコピーして値貼り付けしてください。

    エラーの対処

    #VALUE! が出る

    • – 区切り文字が指定されていない("" でも必ず書く)
    • – 第2引数が抜けている

    引数が3つ必要な点を確認してください。

    空欄が飛ばされない

    第2引数が FALSE になっています。TRUE にしてください。

    なお、数式が返した ""(空文字)は空欄として扱われるので、TRUE なら飛ばされます。

    結果が長すぎて切れる

    文字数の上限に達しています。FILTER で件数を絞るか、複数セルに分割してください。

    Excelとの違い

    TEXTJOINはExcelにもあります(Microsoft 365 / Excel 2019以降)。書式・挙動ともに同じです。

    Excel 2016以前では使えません。その場合は CONCATENATE& で書くか、作業列を使った方法になります。

    条件付き連結(FILTER との組み合わせ)は、ExcelでもFILTER関数が使える環境(365/2021以降)なら同じ書き方ができます。

    まとめ

    • – 書式は =TEXTJOIN(区切り文字, TRUE, 範囲)
    • 範囲をそのまま渡せて、空欄を自動で飛ばせる
    • CONCATENATE の上位互換。基本はこちらを使う
    • FILTER と組み合わせると条件付き連結ができる
    • FILTER → UNIQUE → SORT → TEXTJOIN で1対多の一覧が1本の数式に
    • – 改行は CHAR(10)。セルの折り返し設定も必要

    関連する関数