いきなり答える備忘録

Google Workspace・Microsoft 365・LibreOfficeなどに関するメモ

(Gスプレッドシート)文字列を結合する方法

 Googleスプレッドシートで、文字列を結合(連結)する各種の方法についてです。

  • &演算子を使う方法のほか、各種の関数を使って文字列を結合することができます。
  • 関数で便利なのはCONCATENATEとTEXTJOIN関数です。後者では区切り文字を入れることができます。
  • JOIN関数も十分使えますがちょっとした制約があります。CONCAT関数は2つの文字列を結合するしかできず、実用的ではありません。

単純に結合する場合

&演算子で結合する

 画像ではE3セルに次のように入力することで、B3セルとC3セルに入っている2つの文字列を結合しています。

=B3&C3

 このように2つの「&」でつなぐことで、文字列を結合した1つの文字列を得ることができます。



 ここではB3セルの文字列と、直接指定した文字列(「 様」という2文字)を結合しています。

=B3&" 様"

 式の中で文字列を直接指定するときは「" "」(ダブルクォーテーション)で囲みます。



 3つ以上の文字列を結合するときはそれらをすべて「&」でつなげばOKです。
 対象となる文字列が3つ4つ程度なら後述する関数よりこちらの方が簡単といえます。



 ところで、数値を「&」でつなぐと(足し算ではなく)見たまま結合したような文字列となります。
 また、日付や時刻をつないだ場合はいったんシリアル値(日付時刻に対応する数値)に変換されたのちに見たまま結合したような文字列となります。

 画像の例の場合、「44949.75」ならシリアル値として間違ってはいないのですが結果は「449490.75」となっているので正しくありません。
 なお日付と時刻をつなぐ正しい方法は「+」でつなぐことです。詳しくは次の記事で紹介しています。

www.officeisyours.com


CONCATENATE関数で結合する

 次の画像ではCONCATENATE関数を使って3つの文字列を結合しています。

 F3セル

=CONCATENATE(B3:D3)

 対象となるセルを1つ1つ指定するのではなく、1つの範囲として「B3:D3」と指定することで、含まれるすべての文字列を結合した結果を得ることができます。



 次の画像ではB3:D6の範囲の12個の文字列を結合しています。
 対象となる文字列が多くなるほど、このような関数を使った結合の方が便利になります。



 対象となる範囲が飛び飛びの場合はカンマで区切って指定します。これは後述のJOIN関数やTEXTJOIN関数でも同様です。



 ちょっとした応用ですが、次の画像ではTRANSPOSE関数を使って範囲を転置(行列を入れ替える)したうえで結合しています。
 1つ上の例では、上の行にある文字列から順に(A,B,C…)結合されていましたが、転置した効果により左の列にある文字列から順に(A,D,G,J…)結合されます。

 F3セル

=CONCATENATE(TRANSPOSE(B3:D6))


区切り文字を入れる場合

JOIN関数で結合する

 JOIN関数を使うと、結合するそれぞれの文字列の間に区切り文字を入れることができます。

 F3セル

=JOIN("・",B3:D3)

 区切り文字は第1引数で指定します。
 区切り文字として2文字以上の文字列を指定することもできます。



 区切り文字を省略する(カンマだけ入れる)か空文字列("")を指定すれば区切り文字を入れないこともできます。
 関数名の短いJOINを使いたいという理由でこうしている例がたまに見られます。



 ところでJOIN関数では、1行または1列の範囲しか結合することができず、複数行複数列の範囲を結合しようとするとエラーになります。
 この場合は「=JOIN("・",B3:D3,B4:D4)」とすれば結合できますが、そこまでするなら次のTEXTJOIN関数を使った方がいいです。



 JOIN関数のもう1つの弱点として、空白セルを無視できません。
 つまり対象となるセルに空白セルがある場合、結合した文字列の先頭や末尾に区切り文字が入ったり、連続する区切り文字が入ったりします。
 これも次のTEXTJOIN関数では対処が可能です。

TEXTJOIN関数で結合する

 TEXTJOIN関数を使えばJOIN関数と同様に区切り文字を入れることができ、複数行複数列の範囲を対象にすることも可能です。

 F3セル

=TEXTJOIN("・",,B3:D4)

 区切り文字は第1引数で、対象範囲は第3引数で指定します。



 第2引数を「TRUE」と指定することにより、JOIN関数ではできなかった「空白セルを無視する」ということが可能です。
 つまり空白セルがあっても結合後の文字列の先頭や末尾に区切り文字が入ることはありませんし、連続する区切り文字が入ることもありません。

 F3セル

=TEXTJOIN("・",TRUE,B3:D4)

 第2引数に指定できる値はFALSE(既定値)とTRUEの2種です。
 FALSEだとJOIN関数のように空白セルを無視しない結果となります。

CONCAT関数について

 上記のほかにCONCAT関数というものがあります。
 Excelだと多用される関数(GoogleスプレッドシートのCONCATENATEに相当)なのですが、Googleスプレッドシートでは2つの文字列を連結することしかできません。この辺りがとても紛らわしいです。



 次のように3つ以上のセルを指定するとエラーになります。「=CONCAT(B3,C3,D3)」としてもダメです。
 機能的には&と同じと言えますが3つ以上の文字列を結合しようとするとネスト(入れ子)するしかなく、明らかに&を使った方が簡単です。