Excel関数 逆引き集 | SQL文生成 → TEXTJOIN

Excel
スポンサーリンク

概要

Excelで「SQL文を手でポチポチ書く」のは正直しんどいですよね。

  • IN句用の 'A','B','C' をリストから自動生成したい
  • カラム名のカンマ区切り col1, col2, col3 をシートから作りたい
  • INSERT文の (値1, 値2, 値3) の並びを行データから作りたい

こういうときにめちゃくちゃ使えるのが TEXTJOIN 関数です。

TEXTJOIN は
「区切り文字を指定して、複数セルの文字列をまとめて結合する」関数です。
SQLは「カンマ区切り」「クォート付き」「AND区切り」などのパターンの塊なので、
TEXTJOINと少しの工夫だけで、SQL文の大量生成がグッと楽になります。

ここでは、プログラミング初心者でもわかるように、
SQL文生成に特化したTEXTJOINの使い方を、テンプレートと例題で丁寧に解説します。


TEXTJOINの基本

基本構文

=TEXTJOIN(区切り文字, 空白セル無視, 結合したい範囲や文字列...)

例えば、A2:A4 に

A2:A
A3:B
A4:C

が入っているとして、

=TEXTJOIN(",", TRUE, A2:A4)

と書くと結果は

A,B,C

になります。

SQL生成では、この「区切り文字」の部分に

  • ","(カンマ)
  • " AND "(スペース入りAND)
  • "," & CHAR(10)(カンマ+改行) など

を使っていきます。


パターン1:IN句用の値リストを生成する

基本形:’A’,’B’,’C’ のようなリストを作る

A2:A4 に

A2:A
A3:B
A4:C

が入っているとして、

IN ('A','B','C')

の中身部分 'A','B','C' をExcelで生成したいとします。

この場合、1つ1つの値を「クォート付き文字列」にしておき、
それらをTEXTJOINでカンマ区切りにします。

B2に次の式を入れて下までコピー(A2を参照):

="'" & A2 & "'"

すると、B2:B4は

B2:’A’
B3:’B’
B4:’C’

になります。

あとは、どこかのセルに

=TEXTJOIN(",", TRUE, B2:B4)

と書けば、結果は

'A','B','C'

SQLとしては、

SELECT *
FROM テーブル名
WHERE カラム名 IN ('A','B','C');

の中身部分がExcelで簡単に作れます。


パターン2:カラム名一覧をカンマ区切りで生成する

SELECT句・INSERT句のカラムリストを作る

A2:A5 にカラム名が入っているとします。

A2:id
A3:name
A4:email
A5:created_at

これを

id, name, email, created_at

のような形で出したい場合、次のようにします。

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

結果:

id, name, email, created_at

これをSELECT文やINSERT文のカラム部分に貼り付ければOKです。


パターン3:WHERE句の条件をANDでつなぐ

条件を行で管理して、AND区切りのWHERE句を作る

A2:A4 に条件文字列を入れておきます。

A2:status = ‘ACTIVE’
A3:deleted = 0
A4:type = ‘USER’

これらを

status = 'ACTIVE' AND deleted = 0 AND type = 'USER'

のようにつなぎたい場合、次のようにします。

=TEXTJOIN(" AND ", TRUE, A2:A4)

結果:

status = 'ACTIVE' AND deleted = 0 AND type = 'USER'

あとは、

SELECT *
FROM users
WHERE status = 'ACTIVE' AND deleted = 0 AND type = 'USER';

のWHERE部分として使えます。

条件を追加したいときは、A列に1行足してあげるだけで、式の範囲を広げればOKです。


パターン4:INSERT文のVALUES部分を生成する

1行分のVALUESを作る

A2:D2 に

A2:1
B2:’Yamada’
C2:’yamada@example.com’
D2:’2026-01-06′

のような内容を想定します(実際にはセルには数値や日付が入っていてOK)。

まず、1つ1つの値を「SQL用の表記」に整えます。
簡単のため、すべて「文字列としてシングルクォートで囲む」例を見ます。

E2に次の式を入れて右へコピー(A2を参照):

="'" & A2 & "'"

同様にB2,C2,D2にもコピーされて、

E2:’1′
F2:’Yamada’
G2:’yamada@example.com’
H2:’2026-01-06′

となります。

このE2:H2をカンマ区切りでつなぎます。

=TEXTJOIN(", ", TRUE, E2:H2)

結果:

'1', 'Yamada', 'yamada@example.com', '2026-01-06'

これをINSERT文に組み込むと、

INSERT INTO users (id, name, email, created_at)
VALUES ('1', 'Yamada', 'yamada@example.com', '2026-01-06');

が作れます。

実務では、数値はクォート無し、文字列だけクォートあり、などもう少し条件分けが必要ですが、
「SQL用に整形したセル群をTEXTJOINでつなぐ」という発想が基本になります。


パターン5:複数行のVALUESを一気に生成するイメージ

TEXTJOIN自体は「1つの行(または1つの範囲)」に対して使うことが多いですが、
「行ごとに1個のINSERT文(またはVALUES行)」を作る、という使い方も定番です。

例:

  • 各行に1件分のデータ(id, name, email…)を入力
  • 各行の末尾のセルに、
    TEXTJOINを使って (値1, 値2, 値3, …) の形の文字列を生成
  • その列だけをコピーして、SQLエディタに貼り付ける

1行分のVALUES部分を作るテンプレート例:

="(" & TEXTJOIN(", ", TRUE, E2:H2) & "),"

結果:

('1', 'Yamada', 'yamada@example.com', '2026-01-06'),

これを複数行分作って並べれば、複数VALUESのINSERT文を一気に作ることができます。


SQL文生成用TEXTJOINテンプレートまとめ

SQLのIN句用値リスト

=TEXTJOIN(",", TRUE, B2:B10)  ' B列に 'A' 形式を作っておく

SELECT/INSERTのカラムリスト

=TEXTJOIN(", ", TRUE, A2:A20)

AND区切りのWHERE条件

=TEXTJOIN(" AND ", TRUE, A2:A20)

1行分VALUESの中身

=TEXTJOIN(", ", TRUE, E2:H2)

括弧付きVALUES行

="(" & TEXTJOIN(", ", TRUE, E2:H2) & "),"

例題

問題1

A2:A4 に
A2:A
A3:B
A4:C
が入っています。

これらをカンマ区切りの
A,B,C
という1つの文字列にしたいです。TEXTJOINを使った式を書いてください。

=TEXTJOIN(",", TRUE, A2:A4)

問題2

B2:B4 に
B2:’A’
B3:’B’
B4:’C’
が入っています。

これらを
'A','B','C'
という文字列にしたいです。TEXTJOINを使った式を書いてください。

=TEXTJOIN(",", TRUE, B2:B4)

問題3

A2:A5 に
A2:id
A3:name
A4:email
A5:created_at
が入っています。

これらを
id, name, email, created_at
というカンマ区切りのカラムリストにしたいです。TEXTJOINを使った式を書いてください。

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

問題4

A2:A4 に
A2:status = ‘ACTIVE’
A3:deleted = 0
A4:type = ‘USER’
が入っています。

これらを
status = 'ACTIVE' AND deleted = 0 AND type = 'USER'
というWHERE句用の文字列にしたいです。TEXTJOINを使った式を書いてください。

=TEXTJOIN(" AND ", TRUE, A2:A4)

問題5

E2:H2 に
E2:’1′
F2:’Yamada’
G2:’yamada@example.com’
H2:’2026-01-06′
が入っています。

これらを
('1', 'Yamada', 'yamada@example.com', '2026-01-06'),
というVALUES行の1行分にしたいです。TEXTJOINを使った式を書いてください。

="(" & TEXTJOIN(", ", TRUE, E2:H2) & "),"

TEXTJOINは、
「セルにバラバラに並んだパーツを、SQLの形にまとめ直すための“糊(のり)”」だと思ってください。
区切り文字をどうするかさえ決めてしまえば、SQL文の大量生成が一気に現実的になります。

Excel
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました