<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>SQL &#8211; biz-tactics</title>
	<atom:link href="https://mashukabu.com/tag/sql/feed/" rel="self" type="application/rss+xml" />
	<link>https://mashukabu.com</link>
	<description></description>
	<lastBuildDate>Sat, 21 Mar 2026 11:31:47 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://mashukabu.com/wp-content/uploads/2022/04/cropped-site-icon-32x32.png</url>
	<title>SQL &#8211; biz-tactics</title>
	<link>https://mashukabu.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>スプレッドシートのQUERY関数の使い方｜SQLライクなデータ操作</title>
		<link>https://mashukabu.com/spreadsheet-query-function/</link>
					<comments>https://mashukabu.com/spreadsheet-query-function/#respond</comments>
		
		<dc:creator><![CDATA[まっしゅ]]></dc:creator>
		<pubDate>Sat, 21 Mar 2026 11:31:47 +0000</pubDate>
				<category><![CDATA[Googleスプレッドシート]]></category>
		<category><![CDATA[Google独自関数]]></category>
		<category><![CDATA[QUERY]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[スプレッドシート]]></category>
		<category><![CDATA[データ抽出]]></category>
		<category><![CDATA[データ集計]]></category>
		<guid isPermaLink="false">https://mashukabu.com/?p=4793</guid>

					<description><![CDATA[GoogleスプレッドシートのQUERY関数の使い方を基本から解説。SELECT・WHERE・ORDER BY・GROUP BYなどの句を実務データで紹介。VLOOKUP・FILTER・SORTとの使い分けも比較表でわかりやすく整理します。]]></description>
										<content:encoded><![CDATA[
<p>「売上データから東京支店だけ抽出して、金額順に並べ替えて、部署ごとの合計も出したい」。こんなふうに、やりたいことが増えてくると関数を何段も重ねることになりますよね。</p>



<p>VLOOKUP・FILTER・SORT を組み合わせれば対応できますが、数式がどんどん長くなって読みにくくなります。</p>



<p>そんなときに使えるのが <strong>QUERY関数</strong> です。SQLに似た命令文を1つの関数にまとめて書けるので、抽出・並べ替え・集計を一発で処理できます。</p>



<p>この記事では、基本の書き方からGROUP BY・PIVOTまで、実務データを使ってわかりやすく解説します。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-1" checked><label class="toc-title" for="toc-checkbox-1">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">QUERY関数とは？</a></li><li><a href="#toc2" tabindex="0">QUERY関数の書き方（構文と引数）</a><ol><li><a href="#toc3" tabindex="0">基本構文</a></li><li><a href="#toc4" tabindex="0">引数の説明</a></li></ol></li><li><a href="#toc5" tabindex="0">QUERY関数の基本的な使い方</a><ol><li><a href="#toc6" tabindex="0">SELECT｜列を選んで取り出す</a></li><li><a href="#toc7" tabindex="0">WHERE｜条件でデータを絞り込む</a></li><li><a href="#toc8" tabindex="0">ORDER BY｜並べ替える</a></li><li><a href="#toc9" tabindex="0">LIMIT｜取得件数を制限する</a></li></ol></li><li><a href="#toc10" tabindex="0">QUERY関数の応用テクニック</a><ol><li><a href="#toc11" tabindex="0">GROUP BY｜グループごとに集計する</a></li><li><a href="#toc12" tabindex="0">PIVOT｜クロス集計する</a></li><li><a href="#toc13" tabindex="0">LABEL｜列見出しを変更する</a></li><li><a href="#toc14" tabindex="0">FORMAT｜表示形式を指定する</a></li><li><a href="#toc15" tabindex="0">複数の句を組み合わせる</a></li><li><a href="#toc16" tabindex="0">セル参照をクエリに埋め込む</a></li></ol></li><li><a href="#toc17" tabindex="0">QUERY関数でよくあるエラーと対処法</a><ol><li><a href="#toc18" tabindex="0">日付をWHEREで使うときの注意</a></li></ol></li><li><a href="#toc19" tabindex="0">VLOOKUP・FILTER・SORTとの使い分け</a></li><li><a href="#toc20" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">QUERY関数とは？</span></h2>



<p>QUERY関数（クエリ関数）は、SQLに似た命令文でデータを操作できるGoogleスプレッドシート専用の関数です。</p>



<p>英語の「query（問い合わせ）」が名前の由来で、データベースに対して「こういうデータをちょうだい」と問い合わせるイメージです。</p>



<p>たとえば、次のようなことが<strong>1つの数式</strong>でできます。</p>



<ul class="wp-block-list"><li>特定の列だけを取り出す（SELECT）</li><li>条件に合う行だけに絞り込む（WHERE）</li><li>データを並べ替える（ORDER BY）</li><li>グループごとに集計する（GROUP BY）</li><li>取得件数を制限する（LIMIT）</li></ul>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>NOTE</strong></p><p>QUERY関数は<strong>Googleスプレッドシート専用</strong>です。Excelには同じ関数は存在しません。ExcelではFILTER関数やピボットテーブルで同様の処理を行います。</p></blockquote>



<h2 class="wp-block-heading"><span id="toc2">QUERY関数の書き方（構文と引数）</span></h2>



<h3 class="wp-block-heading"><span id="toc3">基本構文</span></h3>



<pre class="wp-block-code"><code>=QUERY(データ, クエリ, [見出し])</code></pre>



<h3 class="wp-block-heading"><span id="toc4">引数の説明</span></h3>



<figure class="wp-block-table"><table><thead><tr><th>引数</th><th>必須/任意</th><th>説明</th></tr></thead><tbody><tr><td>データ</td><td>必須</td><td>検索対象のセル範囲（例: <code>A1:E100</code>）</td></tr><tr><td>クエリ</td><td>必須</td><td>SQL風の命令文を文字列で記述（例: <code>"SELECT A, B"</code>）</td></tr><tr><td>見出し</td><td>任意</td><td>データの先頭にある見出し行の数。省略すると自動判定</td></tr></tbody></table></figure>



<p>第2引数の「クエリ」がこの関数のキモです。ダブルクォーテーション <code>" "</code> の中にSQL風の命令を書きます。</p>



<p>列の指定には <strong>A, B, C&#8230;</strong> のアルファベットを使います。データ範囲の左端列が A、2列目が B&#8230;という対応です。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>TIP</strong></p><p>「SQLなんて知らない」と思った方もご安心ください。使う命令は <code>SELECT</code>（選ぶ）・<code>WHERE</code>（絞る）・<code>ORDER BY</code>（並べる）くらいです。英単語の意味そのままなので、すぐ慣れます。</p></blockquote>



<h2 class="wp-block-heading"><span id="toc5">QUERY関数の基本的な使い方</span></h2>



<p>ここでは、次のような売上データ（A1:E6）を使って説明します。</p>



<figure class="wp-block-table"><table><thead><tr><th>担当者</th><th>支店</th><th>部署</th><th>商品</th><th>金額</th></tr></thead><tbody><tr><td>田中</td><td>東京</td><td>営業部</td><td>プランA</td><td>50000</td></tr><tr><td>鈴木</td><td>大阪</td><td>営業部</td><td>プランB</td><td>30000</td></tr><tr><td>佐藤</td><td>東京</td><td>企画部</td><td>プランA</td><td>45000</td></tr><tr><td>山田</td><td>名古屋</td><td>営業部</td><td>プランC</td><td>20000</td></tr><tr><td>高橋</td><td>大阪</td><td>企画部</td><td>プランB</td><td>60000</td></tr></tbody></table></figure>



<h3 class="wp-block-heading"><span id="toc6">SELECT｜列を選んで取り出す</span></h3>



<p>全5列のうち「担当者」と「金額」だけが欲しい場合は次のように書きます。</p>



<pre class="wp-block-code"><code>=QUERY(A1:E6, &quot;SELECT A, E&quot;)</code></pre>



<p>A列（担当者）とE列（金額）だけが取り出されます。見出し行もそのまま含まれるのが便利なポイントです。</p>



<p>全列を取得したい場合は <code>SELECT *</code> と書きます。</p>



<pre class="wp-block-code"><code>=QUERY(A1:E6, &quot;SELECT *&quot;)</code></pre>



<h3 class="wp-block-heading"><span id="toc7">WHERE｜条件でデータを絞り込む</span></h3>



<p>「東京支店だけ」に絞り込むには、WHERE句を使います。</p>



<pre class="wp-block-code"><code>=QUERY(A1:E6, &quot;SELECT * WHERE B = '東京'&quot;)</code></pre>



<p>文字列の条件は<strong>シングルクォーテーション</strong> <code>' '</code> で囲むのがルールです。ダブルクォーテーションではないので注意してください。</p>



<p>数値の条件はそのまま書けます。</p>



<pre class="wp-block-code"><code>=QUERY(A1:E6, &quot;SELECT * WHERE E &gt;= 40000&quot;)</code></pre>



<p>金額が40,000円以上のデータだけが出力されます。</p>



<h4 class="wp-block-heading">複数条件（AND / OR）</h4>



<p>条件を組み合わせるには <code>AND</code> や <code>OR</code> を使います。</p>



<pre class="wp-block-code"><code>=QUERY(A1:E6, &quot;SELECT * WHERE B = '東京' AND E &gt;= 40000&quot;)</code></pre>



<p>東京支店 <strong>かつ</strong> 金額40,000円以上の行だけが返ります。</p>



<pre class="wp-block-code"><code>=QUERY(A1:E6, &quot;SELECT * WHERE B = '東京' OR B = '大阪'&quot;)</code></pre>



<p>東京 <strong>または</strong> 大阪の行が返ります。</p>



<h4 class="wp-block-heading">部分一致（contains / starts with / ends with）</h4>



<p>「プラン」を含む商品を探したい場合は <code>contains</code> を使います。</p>



<pre class="wp-block-code"><code>=QUERY(A1:E6, &quot;SELECT * WHERE D contains 'プラン'&quot;)</code></pre>



<p>前方一致は <code>starts with</code>、後方一致は <code>ends with</code> です。</p>



<h3 class="wp-block-heading"><span id="toc8">ORDER BY｜並べ替える</span></h3>



<p>金額の大きい順に並べたい場合は ORDER BY に <code>DESC</code>（降順）を付けます。</p>



<pre class="wp-block-code"><code>=QUERY(A1:E6, &quot;SELECT * ORDER BY E DESC&quot;)</code></pre>



<p>小さい順（昇順）は <code>ASC</code> です。省略すると昇順になります。</p>



<p>複数列で並べ替えることもできます。</p>



<pre class="wp-block-code"><code>=QUERY(A1:E6, &quot;SELECT * ORDER BY B ASC, E DESC&quot;)</code></pre>



<p>支店名の昇順で並べてから、同じ支店内では金額の降順になります。</p>



<h3 class="wp-block-heading"><span id="toc9">LIMIT｜取得件数を制限する</span></h3>



<p>上位3件だけ取り出したいときは LIMIT を使います。</p>



<pre class="wp-block-code"><code>=QUERY(A1:E6, &quot;SELECT * ORDER BY E DESC LIMIT 3&quot;)</code></pre>



<p>ORDER BY と組み合わせれば「金額トップ3」のような使い方ができます。</p>



<h2 class="wp-block-heading"><span id="toc10">QUERY関数の応用テクニック</span></h2>



<h3 class="wp-block-heading"><span id="toc11">GROUP BY｜グループごとに集計する</span></h3>



<p>支店ごとの売上合計を出すには、GROUP BY と集計関数 <code>sum()</code> を組み合わせます。</p>



<pre class="wp-block-code"><code>=QUERY(A1:E6, &quot;SELECT B, sum(E) GROUP BY B&quot;)</code></pre>



<p>結果はこのようになります。</p>



<figure class="wp-block-table"><table><thead><tr><th>支店</th><th>sum 金額</th></tr></thead><tbody><tr><td>大阪</td><td>90000</td></tr><tr><td>名古屋</td><td>20000</td></tr><tr><td>東京</td><td>95000</td></tr></tbody></table></figure>



<p>使える集計関数は次の5つです。</p>



<figure class="wp-block-table"><table><thead><tr><th>集計関数</th><th>説明</th></tr></thead><tbody><tr><td><code>sum(列)</code></td><td>合計</td></tr><tr><td><code>avg(列)</code></td><td>平均</td></tr><tr><td><code>count(列)</code></td><td>件数</td></tr><tr><td><code>max(列)</code></td><td>最大値</td></tr><tr><td><code>min(列)</code></td><td>最小値</td></tr></tbody></table></figure>



<h4 class="wp-block-heading">WHERE + GROUP BY の組み合わせ</h4>



<p>営業部だけの支店別合計を出したい場合はこう書きます。</p>



<pre class="wp-block-code"><code>=QUERY(A1:E6, &quot;SELECT B, sum(E) WHERE C = '営業部' GROUP BY B&quot;)</code></pre>



<p>WHERE で先に絞り込んでから GROUP BY で集計する流れです。</p>



<h3 class="wp-block-heading"><span id="toc12">PIVOT｜クロス集計する</span></h3>



<p>「支店ごと × 部署ごと」のクロス集計を作るには PIVOT を使います。</p>



<pre class="wp-block-code"><code>=QUERY(A1:E6, &quot;SELECT B, sum(E) GROUP BY B PIVOT C&quot;)</code></pre>



<p>行が支店、列が部署の集計表が一発で出力されます。Excelのピボットテーブルに近い機能を、数式だけで実現できるのが強みです。</p>



<h3 class="wp-block-heading"><span id="toc13">LABEL｜列見出しを変更する</span></h3>



<p>GROUP BY の結果は見出しが <code>sum 金額</code> のようになります。わかりにくい場合は LABEL で書き換えましょう。</p>



<pre class="wp-block-code"><code>=QUERY(A1:E6, &quot;SELECT B, sum(E) GROUP BY B LABEL sum(E) '売上合計'&quot;)</code></pre>



<p><code>LABEL 列指定 '表示名'</code> の形式で指定します。</p>



<h3 class="wp-block-heading"><span id="toc14">FORMAT｜表示形式を指定する</span></h3>



<p>金額にカンマ区切りを付けたい場合は FORMAT を使います。</p>



<pre class="wp-block-code"><code>=QUERY(A1:E6, &quot;SELECT A, E FORMAT E '#,##0'&quot;)</code></pre>



<p>表示形式のコードは、セルの表示形式設定と同じ書き方です。</p>



<h3 class="wp-block-heading"><span id="toc15">複数の句を組み合わせる</span></h3>



<p>QUERY関数の真価は、複数の句を1つの数式にまとめられる点です。</p>



<pre class="wp-block-code"><code>=QUERY(A1:E6, &quot;SELECT B, sum(E) WHERE E &gt;= 30000 GROUP BY B ORDER BY sum(E) DESC LABEL sum(E) '売上合計'&quot;)</code></pre>



<p>この1行で「金額30,000円以上のデータを支店ごとに集計し、合計の大きい順に並べ替え、見出しも整える」ができます。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>NOTE</strong></p><p>句の記述順序は決まっています。<strong>SELECT → WHERE → GROUP BY → PIVOT → ORDER BY → LIMIT → OFFSET → LABEL → FORMAT → OPTIONS</strong> の順に書いてください。順番を間違えるとエラーになります。</p></blockquote>



<h3 class="wp-block-heading"><span id="toc16">セル参照をクエリに埋め込む</span></h3>



<p>条件をセルの値で動的に切り替えたい場合は、文字列結合を使います。</p>



<p>たとえば G1 セルに支店名が入っているとします。</p>



<pre class="wp-block-code"><code>=QUERY(A1:E6, &quot;SELECT * WHERE B = '&quot;&amp;G1&amp;&quot;'&quot;)</code></pre>



<p><code>"SELECT * WHERE B = '"</code> と <code>"'"</code> の間に <code>&G1&</code> を挟む形です。ちょっとむずかしく見えますが、やっていることはシンプルです。クエリ文字列の中にセルの値を差し込んでいるだけです。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>TIP</strong></p><p>プルダウンと組み合わせると、選択した値に応じてデータが自動で切り替わるダッシュボードが作れます。プルダウンの作り方は <a href="https://mashukabu.com/spreadsheet-pulldown/">スプレッドシートのプルダウン作り方｜色付け・連動まで解説</a> を参考にしてください。</p></blockquote>



<h2 class="wp-block-heading"><span id="toc17">QUERY関数でよくあるエラーと対処法</span></h2>



<figure class="wp-block-table"><table><thead><tr><th>エラー</th><th>主な原因</th><th>対処法</th></tr></thead><tbody><tr><td><code>#VALUE!</code></td><td>クエリ文字列の構文エラー</td><td>引用符の閉じ忘れ、句の順序誤りを確認する</td></tr><tr><td><code>#REF!</code></td><td>出力先に既存データがある</td><td>出力先の下方向に空きスペースを確保する</td></tr><tr><td><code>#N/A</code></td><td>該当データが0件</td><td>WHERE条件を確認する。IFERROR で空表示にできる</td></tr><tr><td>ヘッダーが2行出る</td><td>第3引数（見出し）の指定ミス</td><td><code>=QUERY(A1:E6, "...", 1)</code> のように明示指定する</td></tr><tr><td>文字列条件が効かない</td><td>シングルクォーテーション忘れ</td><td>文字列は <code>'値'</code> で囲む（ダブルクォーテーション不可）</td></tr><tr><td>日付の比較が効かない</td><td>日付の書き方が違う</td><td><code>date '2026-01-01'</code> の形式で書く</td></tr></tbody></table></figure>



<h3 class="wp-block-heading"><span id="toc18">日付をWHEREで使うときの注意</span></h3>



<p>日付を条件にする場合は <code>date 'yyyy-MM-dd'</code> という特別な書き方が必要です。</p>



<pre class="wp-block-code"><code>=QUERY(A1:E100, &quot;SELECT * WHERE A &gt; date '2026-01-01'&quot;)</code></pre>



<p>セル参照で日付を指定する場合は TEXT 関数で変換します。</p>



<pre class="wp-block-code"><code>=QUERY(A1:E100, &quot;SELECT * WHERE A &gt; date '&quot;&amp;TEXT(G1,&quot;yyyy-MM-dd&quot;)&amp;&quot;'&quot;)</code></pre>



<h2 class="wp-block-heading"><span id="toc19">VLOOKUP・FILTER・SORTとの使い分け</span></h2>



<p>QUERY関数は万能ですが、シンプルな処理なら他の関数のほうが手軽です。使い分けの目安をまとめました。</p>



<figure class="wp-block-table"><table><thead><tr><th>やりたいこと</th><th>おすすめの関数</th><th>理由</th></tr></thead><tbody><tr><td>1つの値を検索して返す</td><td><a href="https://mashukabu.com/spreadsheet-vlookup-function/">VLOOKUP</a></td><td>構文がシンプルで直感的</td></tr><tr><td>条件に合う行を抽出する</td><td><a href="https://mashukabu.com/spreadsheet-filter-function/">FILTER</a></td><td>配列を返すので一覧表示に向く</td></tr><tr><td>データを並べ替える</td><td><a href="https://mashukabu.com/spreadsheet-sort-sortn-sortby/">SORT / SORTN / SORTBY</a></td><td>並べ替え専用で高速</td></tr><tr><td>重複を除いた一覧を出す</td><td><a href="https://mashukabu.com/spreadsheet-unique-function/">UNIQUE</a></td><td>1つの関数で完結する</td></tr><tr><td>抽出 + 並べ替え + 集計を一括</td><td><strong>QUERY</strong></td><td>複数の処理を1つの数式にまとめられる</td></tr><tr><td>クロス集計表を作りたい</td><td><strong>QUERY（PIVOT句）</strong></td><td>ピボットテーブルを数式で実現できる</td></tr></tbody></table></figure>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>TIP</strong></p><p>迷ったら「やりたいことが2つ以上あるか？」で判断してみてください。抽出だけならFILTER、並べ替えだけならSORT。でも「抽出して並べ替えて集計もしたい」なら、QUERY関数の出番です。</p></blockquote>



<h2 class="wp-block-heading"><span id="toc20">まとめ</span></h2>



<p>QUERY関数は、Googleスプレッドシートで使える最強のデータ操作関数です。</p>



<p>この記事で紹介した句を振り返っておきましょう。</p>



<figure class="wp-block-table"><table><thead><tr><th>句</th><th>役割</th><th>使用例</th></tr></thead><tbody><tr><td>SELECT</td><td>列を選ぶ</td><td><code>SELECT A, B, E</code></td></tr><tr><td>WHERE</td><td>条件で絞る</td><td><code>WHERE B = '東京'</code></td></tr><tr><td>ORDER BY</td><td>並べ替える</td><td><code>ORDER BY E DESC</code></td></tr><tr><td>LIMIT</td><td>件数を制限</td><td><code>LIMIT 10</code></td></tr><tr><td>GROUP BY</td><td>グループ集計</td><td><code>GROUP BY B</code></td></tr><tr><td>PIVOT</td><td>クロス集計</td><td><code>PIVOT C</code></td></tr><tr><td>LABEL</td><td>見出し変更</td><td><code>LABEL sum(E) '合計'</code></td></tr><tr><td>FORMAT</td><td>表示形式</td><td><code>FORMAT E '#,##0'</code></td></tr></tbody></table></figure>



<p>まずは SELECT と WHERE だけで十分です。慣れてきたら GROUP BY や PIVOT にも挑戦してみてください。</p>



<p>データ操作の効率がぐっと上がりますよ。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://mashukabu.com/spreadsheet-query-function/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
