いきなり答える備忘録

G Suite・Microsoft 365・LibreOfficeなどに関するメモと日々の実験

(Gスプレッドシート)文字列を結合する関数4種の比較

 Googleスプレッドシートでは文字列を結合する関数がいくつか用意されていますが、名称と機能がまぎらわしく、しかもExcelの同名関数と機能が異なったりもしますので混乱しやすいです。
 そこでそれぞれの機能をまとめ、違いを比べてみました。

手順

機能比較

 4種の関数の機能をまとめました。下に記載しているものほど多機能で強力ですがJOIN関数にはちょっとした制約があります。
 詳しい仕様については下記の実例をご覧ください。

関数名引数区切り
文字
空白無視値として指定できる
セル範囲
CONCAT(値1,値2)不可単一セル
CONCATENATE(値1[,値2,……])不可複数行複数列
JOIN(区切り文字,値1[,値2,……])不可単一列または単一行(混在可)
TEXTJOIN(区切り文字,空白無視,値1[,値2,……])複数行複数列

CONCAT関数

f:id:accs2014:20191126020227p:plain:right:w500

 機能的に最も弱いのがCONCAT関数です。
 引数を2つしか指定できず、しかも基本的にそれぞれ単一のセルしか指定できないため、2つの値を結合することしかできません。

 ここではB7セルに次のように入力してみます。

=CONCAT(B2,C2)

f:id:accs2014:20191126020231p:plain:right:w500

 実行結果です。
 &演算子を使った方が明らかに簡単で、使い道がほとんどない関数です。

CONCATENATE関数

f:id:accs2014:20191126020234p:plain:right:w500

 CONCATENATE関数では複数行複数列の範囲を結合の対象とすることができ、さらに範囲を複数指定できるため、CONCAT関数よりはるかに強力です。
 区切り文字を入れることはできないものの、それ以外はこの関数でこと足ります。 

 ここではB7セルに次のように入力してみます。

=CONCATENATE(B2:E2)

 引数として単一の行を指定しています。

f:id:accs2014:20191126020238p:plain:right:w500

 実行結果です。
 単一のセルしか指定できないCONCAT関数と比べ、これだけでもはるかに使いやすいことが分かります。

f:id:accs2014:20191126032546p:plain:right:w500

 複数行複数列の範囲を指定でき、さらに複数の範囲を指定することができます。
 ここではB7セルに次のように入力してみます。

=CONCATENATE(B2:C3,D2:E3,D4:E4)

f:id:accs2014:20191126020247p:plain:right:w500

 実行結果です。

JOIN関数

f:id:accs2014:20191126020251p:plain:right:w500

 JOIN関数では結合する文字列の間に区切り文字を入れることができます(入れないこともできます)。
 これも便利な関数ですが微妙な制約がありますので注意が必要です。
 ここではB7セルに次のように入力してみます。

=JOIN("☆",B2:E2)

 第1引数で区切り文字「☆」を指定しています。第1引数を空文字("")にするか何も指定しない(カッコ内の1文字目をカンマにする)ことで区切り文字を入れないこともできます。
 第1引数が区切り文字であることを忘れて引数の順番を間違えたりセル範囲だけを指定してしまうとおかしな結果になったりエラーになったりしますので注意が必要です。

f:id:accs2014:20191126020255p:plain:right:w500

 実行結果です。

f:id:accs2014:20191126020258p:plain:right:w500

 JOIN関数は空白セルも結合の対象とみなし、区切り文字で区切ります。
 ここではB7セルに次のように入力してみます。

=JOIN("☆",B3:E3)

f:id:accs2014:20191126020302p:plain:right:w500

 実行結果です。
 空白セルを結合した場合には区切り文字が連続したり、先頭や末尾に区切り文字が残る結果となります。
 これを防ぎたい場合はTEXTJOIN関数を使うしかありません。

f:id:accs2014:20191126020306p:plain:right:w500

 また、JOIN関数では結合の対象として単一の行または単一の列までしか指定できず、複数行複数列の範囲は指定できません。
 ここではB7セルに次のように入力してみます。

=JOIN("☆",B2:C3)

 結合の対象として2行2列の範囲を指定しています。
 

f:id:accs2014:20191126020310p:plain:right:w500

 結果はエラーとなりました。

f:id:accs2014:20191126020314p:plain:right:w500

 ただし複数の範囲を指定する場合に単一行と単一列を混在させることはできます。
 ここでは次のように入力してみます。

=JOIN("☆",B2:D2,C3:C5,D4:E4)

f:id:accs2014:20191126020317p:plain:right:w500

 エラーにはならず結果が返ってきました。

TEXTJOIN関数

f:id:accs2014:20191126020321p:plain:right:w500

 機能的に最も強力なのがTEXTJOIN関数です。
 区切り文字とともに空白無視の設定(空白セルがある場合に、区切り文字が連続したり先頭や末尾に残るのを避ける)ができます。
 さらに対象となるセル範囲も複数行複数列とすることができ、さらにそれらを複数指定できます。

 ここではB7セルに次のように入力してみます。

=TEXTJOIN("☆",TRUE,D2:E3,B4:C5,D4:D5)

 第2引数をTRUEとすることで空白を無視する設定としています。

f:id:accs2014:20191126020325p:plain:right:w500

 実行結果です。
 対象としているセル範囲に空白が2か所(D3とE3)含まれていますが区切り文字が続いてしまうことはなく、空白無視の設定が機能しているのがわかります。