<?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>QUERY関数 &#8211; biz-tactics</title>
	<atom:link href="https://mashukabu.com/tag/query%E9%96%A2%E6%95%B0/feed/" rel="self" type="application/rss+xml" />
	<link>https://mashukabu.com</link>
	<description></description>
	<lastBuildDate>Sat, 13 Jun 2026 01:09:43 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0.2</generator>

<image>
	<url>https://mashukabu.com/wp-content/uploads/2022/04/cropped-site-icon-32x32.png</url>
	<title>QUERY関数 &#8211; biz-tactics</title>
	<link>https://mashukabu.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>スプレッドシートで行・列削除後にFILTER/QUERYが崩れる原因と修正法</title>
		<link>https://mashukabu.com/spreadsheet-filter-query-row-column-delete-fix/</link>
					<comments>https://mashukabu.com/spreadsheet-filter-query-row-column-delete-fix/#respond</comments>
		
		<dc:creator><![CDATA[まっしゅ]]></dc:creator>
		<pubDate>Sat, 13 Jun 2026 01:09:43 +0000</pubDate>
				<category><![CDATA[Googleスプレッドシート]]></category>
		<category><![CDATA[FILTER関数]]></category>
		<category><![CDATA[QUERY関数]]></category>
		<category><![CDATA[列削除]]></category>
		<category><![CDATA[行削除]]></category>
		<category><![CDATA[関数エラー]]></category>
		<guid isPermaLink="false">https://mashukabu.com/?p=7939</guid>

					<description><![CDATA[Googleスプレッドシートで行・列を削除した後にFILTER関数やQUERY関数が崩れる原因を解説。#REF!エラーや列ずれの修正方法と、INDIRECT関数・名前付き範囲を使った予防策を具体的な数式例付きで紹介。]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">「昨日まで普通に動いていたFILTERが、列を1本消しただけで真っ赤なエラー」「QUERYの結果が突然ズレて、商品名のはずの列に単価が表示される」。こんな経験、ありませんか。</p>



<p class="wp-block-paragraph">スプレッドシートでデータ集計の自動化を進めるほど、行や列の削除1つで関数が連鎖的に壊れてしまうリスクは大きくなります。特に FILTER関数と QUERY関数は、参照範囲を絶対位置で指定するため、データ構造の変更にとても弱い関数です。</p>



<p class="wp-block-paragraph">この記事では、FILTER と QUERY が「行・列削除によって崩れる3つのパターン」を整理し、それぞれの原因の見分け方、具体的な修正手順、IMPORTRANGE 経由のケースの対処、そして二度と同じトラブルに巻き込まれないための予防策まで、ビフォー・アフター形式の数式例を使って解説します。</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">FILTERやQUERYが崩れる3つのパターン</a><ol><li><a href="#toc2" tabindex="0">パターン1：参照先が空欄になる・#REF!が表示される</a></li><li><a href="#toc3" tabindex="0">パターン2：「FILTERの範囲サイズが一致しません」エラー</a></li><li><a href="#toc4" tabindex="0">パターン3：エラーは出ないが意図しない列が表示される</a></li></ol></li><li><a href="#toc5" tabindex="0">原因の診断方法（どこが壊れているかの特定）</a><ol><li><a href="#toc6" tabindex="0">ステップ1：エラーセルを選択して数式バーを確認する</a></li><li><a href="#toc7" tabindex="0">ステップ2：エラーメッセージのバリエーションで切り分ける</a></li><li><a href="#toc8" tabindex="0">ステップ3：参照先のデータを別の場所に展開して確認する</a></li></ol></li><li><a href="#toc9" tabindex="0">FILTER関数の修正方法</a><ol><li><a href="#toc10" tabindex="0">修正例1：#REF!が条件式に出ている場合</a></li><li><a href="#toc11" tabindex="0">修正例2：範囲サイズが一致しないエラーの場合</a></li><li><a href="#toc12" tabindex="0">修正例3：列指定が「意図しない列」になっている場合</a></li><li><a href="#toc13" tabindex="0">修正のチェックリスト</a></li></ol></li><li><a href="#toc14" tabindex="0">QUERY関数の修正方法（Col番号のずれ対策含む）</a><ol><li><a href="#toc15" tabindex="0">修正例1：SELECT句のアルファベット指定がずれた場合</a></li><li><a href="#toc16" tabindex="0">修正例2：Col番号指定のずれを修正する</a></li><li><a href="#toc17" tabindex="0">QUERY独自のチェックポイント</a></li></ol></li><li><a href="#toc18" tabindex="0">IMPORTRANGEを使っている場合の対処</a><ol><li><a href="#toc19" tabindex="0">IMPORTRANGE経由でずれる典型パターン</a></li><li><a href="#toc20" tabindex="0">対処の手順</a></li><li><a href="#toc21" tabindex="0">アクセス許可エラーが混ざるケース</a></li></ol></li><li><a href="#toc22" tabindex="0">今後のための予防策</a><ol><li><a href="#toc23" tabindex="0">予防策1：名前付き範囲を活用する</a></li><li><a href="#toc24" tabindex="0">予防策2：INDIRECT関数で参照を文字列化する</a></li><li><a href="#toc25" tabindex="0">予防策3：列全体指定・テーブル構造で運用する</a></li><li><a href="#toc26" tabindex="0">予防策4：データ構造を「テーブル形式」で固定する</a></li><li><a href="#toc27" tabindex="0">予防策の組み合わせ早見表</a></li></ol></li><li><a href="#toc28" tabindex="0">修正後の確認方法</a><ol><li><a href="#toc29" tabindex="0">確認1：抽出件数と元データの突き合わせ</a></li><li><a href="#toc30" tabindex="0">確認2：列順・列内容のサンプリング</a></li><li><a href="#toc31" tabindex="0">確認3：依存している他の数式・グラフへの影響</a></li><li><a href="#toc32" tabindex="0">確認4：実際に行・列を追加して再テストする</a></li></ol></li><li><a href="#toc33" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">FILTERやQUERYが崩れる3つのパターン</span></h2>



<p class="wp-block-paragraph">「数式を直したいのに、そもそも何が壊れているのか分からない」。これがこの問題のいちばん厄介なところです。</p>



<p class="wp-block-paragraph">行・列を削除したあとに FILTER や QUERY が崩れる現象は、見た目こそ似ていますが、内部的には大きく3つのパターンに分類できます。まずはそれぞれの症状を把握しておきましょう。</p>



<h3 class="wp-block-heading"><span id="toc2">パターン1：参照先が空欄になる・#REF!が表示される</span></h3>



<p class="wp-block-paragraph">もっとも分かりやすい崩れ方が、セルに <code>#REF!</code> という赤いエラーが表示されるケースです。</p>



<p class="wp-block-paragraph"><code>#REF!</code> は「参照先がもう存在しません」というスプレッドシートからのメッセージで、数式が参照していたセル・範囲が削除されたときに発生します。たとえば C列を参照していた数式があったとして、その C列を削除すると、数式の中の <code>C2:C100</code> という部分が <code>#REF!</code> という文字列に置き換わってしまいます。</p>



<pre class="wp-block-code"><code>[削除前] =FILTER(A2:D100, C2:C100=&quot;東京&quot;)
[削除後] =FILTER(A2:D100, #REF!=&quot;東京&quot;)    ← C列を消した結果</code></pre>



<p class="wp-block-paragraph">数式バーを見ると <code>#REF!</code> という文字がそのまま埋め込まれているので、原因の特定自体は比較的かんたんです。</p>



<h3 class="wp-block-heading"><span id="toc3">パターン2：「FILTERの範囲サイズが一致しません」エラー</span></h3>



<p class="wp-block-paragraph">FILTER関数特有のエラーで、数式が壊れているように見えるのに <code>#REF!</code> ではなく「範囲サイズが一致しません」というメッセージが返るケースです。</p>



<p class="wp-block-paragraph">このエラーは、絞り込み対象の範囲（行数または列数）と、条件式が評価する範囲のサイズが一致しないときに発生します。列を削除した影響で、範囲指定と条件式の対応関係がずれてしまうことが原因です。</p>



<pre class="wp-block-code"><code>[削除前] =FILTER(A2:D100, B2:B100=&quot;東京&quot;)    ← A〜D（4列）×100行に対し条件はB列
[削除後] =FILTER(A2:C100, B2:B100=&quot;東京&quot;)    ← データ範囲は3列に縮んだが条件範囲はそのまま</code></pre>



<p class="wp-block-paragraph">この場合はエラーメッセージこそ出ますが、参照先の文字列としては正しい範囲が残っているため、<code>#REF!</code> のような分かりやすい印は残りません。</p>



<h3 class="wp-block-heading"><span id="toc4">パターン3：エラーは出ないが意図しない列が表示される</span></h3>



<p class="wp-block-paragraph">実はいちばん怖いのが、この「無言で壊れる」パターンです。</p>



<p class="wp-block-paragraph">QUERY関数で <code>SELECT A, C, D</code> のようにアルファベット指定をしているとき、間にある列を削除すると、列の繰り上がりが起きてしまいます。SELECT 句の文字列自体は変わらないため、エラーは出ませんが、取り出している列は元の意図とは別のものになります。</p>



<pre class="wp-block-code"><code>[削除前] =QUERY(A1:E100, &quot;SELECT A, C, D&quot;)    ← A=日付, C=商品名, D=単価
[C列削除] =QUERY(A1:D100, &quot;SELECT A, C, D&quot;)   ← C列削除で単価がC列に繰り上がり、DはもとのE列</code></pre>



<p class="wp-block-paragraph">C列（商品名）を削除すると、もともと D列にあった単価が C列に繰り上がります。SELECT 句で <code>C</code> を指定しているので、結果として「商品名のつもりだったセル」に単価が表示されることになります。</p>



<p class="wp-block-paragraph">集計結果が間違っていることに気づかないまま、レポートやダッシュボードに流してしまうリスクがあるので、特に注意したいパターンです。</p>



<h2 class="wp-block-heading"><span id="toc5">原因の診断方法（どこが壊れているかの特定）</span></h2>



<p class="wp-block-paragraph">崩れの3パターンを頭に入れたら、次は「目の前の数式がどれに該当するか」を素早く見極めましょう。</p>



<p class="wp-block-paragraph">ここでは「数式を読む順番」と「チェックすべきポイント」を紹介します。直すよりも先に、原因の切り分けが重要です。</p>



<h3 class="wp-block-heading"><span id="toc6">ステップ1：エラーセルを選択して数式バーを確認する</span></h3>



<p class="wp-block-paragraph">最初にやるべきは、エラーが出ているセルをクリックして数式バーを開くことです。</p>



<p class="wp-block-paragraph">スプレッドシート上のセル表示だけを見て直そうとすると、隣接する別の数式の影響と混ざってしまうことがあります。必ず数式バーで「いまの数式の中身」を確認しましょう。</p>



<p class="wp-block-paragraph">確認するポイントは次の3つです。</p>



<ol class="wp-block-list"><li>数式の中に <code>#REF!</code> という文字列が含まれているか</li><li>範囲指定（例: <code>A2:D100</code>）が、いま見えているデータの範囲と合っているか</li><li>QUERYの SELECT 句や ORDER BY 句に書かれた列記号が、現在の列構成と一致しているか</li></ol>



<p class="wp-block-paragraph">これだけで、パターン1〜3のどれに該当するかがほぼ判別できます。</p>



<h3 class="wp-block-heading"><span id="toc7">ステップ2：エラーメッセージのバリエーションで切り分ける</span></h3>



<p class="wp-block-paragraph">スプレッドシートが返すエラーや警告には種類があります。代表的なものを整理しておきましょう。</p>



<figure class="wp-block-table"><table><thead><tr><th>表示されているもの</th><th>想定される原因</th><th>該当パターン</th></tr></thead><tbody><tr><td><code>#REF!</code> がセル全体に表示</td><td>数式内の参照（範囲・列・セル）が削除された</td><td>パターン1</td></tr><tr><td>「FILTERの範囲サイズが一致しません」</td><td>範囲と条件の行数または列数が違う</td><td>パターン2</td></tr><tr><td><code>#N/A</code>（該当データなし）</td><td>条件に合致する行が存在しないだけ</td><td>削除と無関係なケースもあり</td></tr><tr><td>エラーなしだが値がズレている</td><td>列削除により SELECT の列記号が別データを指している</td><td>パターン3</td></tr><tr><td>「数式の解析エラーです」</td><td>SELECT 句などの文法ミス、またはデータ範囲外の列を指定している</td><td>パターン3の一種</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">「エラーが出ていないから大丈夫」ではなく、「結果の中身が想定どおりか」まで確認するのがポイントです。</p>



<h3 class="wp-block-heading"><span id="toc8">ステップ3：参照先のデータを別の場所に展開して確認する</span></h3>



<p class="wp-block-paragraph">QUERY や IMPORTRANGE のように内部で配列を扱う関数は、何列・何行のデータが返ってきているか直感的に分かりにくい場合があります。</p>



<p class="wp-block-paragraph">このときは、いったん空きセルに次のような確認用の数式を置いてみるのが有効です。</p>



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



<p class="wp-block-paragraph"><code>SELECT *</code> で全列をそのまま表示させると、現在の列構成を一目で確認できます。何列目に何のデータが入っているかが見えれば、SELECT 句で何を指定すべきかも明確になります。</p>



<h2 class="wp-block-heading"><span id="toc9">FILTER関数の修正方法</span></h2>



<p class="wp-block-paragraph">「とりあえず動かしたい」と思っても、慌てて修正するとさらに壊してしまうことがあります。</p>



<p class="wp-block-paragraph">ここでは、パターンごとの具体的な修正手順を、ビフォー・アフター形式で見ていきましょう。FILTER関数の基本構文を確認したい方は <a href="https://mashukabu.com/spreadsheet-filter-function/">FILTER関数の使い方</a> もあわせてご覧ください。</p>



<h3 class="wp-block-heading"><span id="toc10">修正例1：#REF!が条件式に出ている場合</span></h3>



<p class="wp-block-paragraph">C列（都道府県）を誤って削除してしまったケースを想定します。</p>



<pre class="wp-block-code"><code>[崩れた状態]
=FILTER(A2:D100, #REF!=&quot;東京&quot;)

[修正後]
=FILTER(A2:C100, C2:C100=&quot;東京&quot;)</code></pre>



<p class="wp-block-paragraph">修正の流れは次のとおりです。</p>



<ol class="wp-block-list"><li>削除した「都道府県」のデータを別の列に復元する（バックアップから貼り直す・元データから再取得する）</li><li>データの新しい配置で、対象範囲を <code>A2:C100</code> のように書き直す</li><li>条件式の参照を、新しい列の位置（例: <code>C2:C100</code>）に修正する</li><li>入力後に Enter を押し、抽出結果が想定どおりか確認する</li></ol>



<p class="wp-block-paragraph">「削除した列をそのまま復元せず、別の列に置き直す」ケースもあります。その場合は条件式の参照先を、実際にデータが置かれた列に変更してください。</p>



<h3 class="wp-block-heading"><span id="toc11">修正例2：範囲サイズが一致しないエラーの場合</span></h3>



<p class="wp-block-paragraph">「FILTERの範囲サイズが一致しません」エラーが出ているケースです。</p>



<pre class="wp-block-code"><code>[崩れた状態]
=FILTER(A2:C100, B2:B500=&quot;東京&quot;)    ← データは100行までしかないのに条件は500行まで

[修正後]
=FILTER(A2:C100, B2:B100=&quot;東京&quot;)    ← 範囲と条件の行数を揃える</code></pre>



<p class="wp-block-paragraph">このエラーは、行の削除や挿入、行範囲のコピーミスでよく発生します。修正のポイントは「範囲と条件の行数（または列数）を完全に揃える」ことです。</p>



<p class="wp-block-paragraph">可能であれば、行数を厳密に指定せず列全体で指定する書き方に変えると、行の増減に対しても強くなります。</p>



<pre class="wp-block-code"><code>=FILTER(A2:C, B2:B=&quot;東京&quot;)    ← 行数指定を外し、列全体を対象に</code></pre>



<p class="wp-block-paragraph">ただし、列全体指定にすると下に空行が大量にある場合に処理が重くなったり、空行が結果に混ざることがあります。データ量や運用に合わせて使い分けましょう。</p>



<h3 class="wp-block-heading"><span id="toc12">修正例3：列指定が「意図しない列」になっている場合</span></h3>



<p class="wp-block-paragraph"><code>#REF!</code> は出ていないのに、抽出結果の列が想定とずれているケースです。</p>



<pre class="wp-block-code"><code>[崩れた状態]
=FILTER(A2:C100, B2:B100=&quot;東京&quot;)    ← 期待は「氏名・都道府県・売上」だが、実は「氏名・売上・備考」

[修正後]
=FILTER({A2:A100, C2:C100, E2:E100}, C2:C100=&quot;東京&quot;)</code></pre>



<p class="wp-block-paragraph">FILTER関数では、抽出対象の範囲を波括弧 <code>{}</code> を使って組み立て直すことで、必要な列だけを取り出すことができます。列の並びが変わってしまった環境でも、「ほしい列を明示的に指定する」スタイルに変えることで、意図しないデータを表示してしまう事故を防げます。</p>



<h3 class="wp-block-heading"><span id="toc13">修正のチェックリスト</span></h3>



<p class="wp-block-paragraph">修正後は必ず以下を確認してください。</p>



<ul class="wp-block-list"><li>抽出された行数が、手動で数えた件数と一致しているか</li><li>抽出されたデータの列順が想定どおりか</li><li>条件に該当しないはずのデータが混ざっていないか</li><li>元データに新しい行を追加したとき、結果に反映されるか</li></ul>



<p class="wp-block-paragraph">特に1番目の「件数の一致」は、見落としに気づくための最重要チェックポイントです。</p>



<h2 class="wp-block-heading"><span id="toc14">QUERY関数の修正方法（Col番号のずれ対策含む）</span></h2>



<p class="wp-block-paragraph">QUERYは強力ですが、SELECT 句の中身が「文字列」のため、列削除に対して特に弱い関数です。</p>



<p class="wp-block-paragraph">ここでは、アルファベット指定で壊れたパターンと、<code>Col1, Col2…</code> のような相対番号指定のずれを、それぞれ修正していきましょう。QUERY関数そのものの使い方を復習したい方は <a href="https://mashukabu.com/spreadsheet-query-function/">QUERY関数の使い方</a> を参照してください。</p>



<h3 class="wp-block-heading"><span id="toc15">修正例1：SELECT句のアルファベット指定がずれた場合</span></h3>



<p class="wp-block-paragraph">D列（商品名）を削除して、E列以降が繰り上がったケースを想定します。</p>



<pre class="wp-block-code"><code>[崩れた状態]
=QUERY(A1:E100, &quot;SELECT A, D, E&quot;)
→ Aは日付（OK）、DはもともとEだった単価、Eはもう存在しない

[修正後]
=QUERY(A1:D100, &quot;SELECT A, C, D&quot;)
→ A=日付, C=単価, D=数量 のように、現在の列構成に合わせて書き直す</code></pre>



<p class="wp-block-paragraph">修正手順は次のとおりです。</p>



<ol class="wp-block-list"><li>元データの何列目に何があるかを <code>SELECT *</code> で確認する</li><li>ほしいデータが何列目（A・B・C…）にあるかを把握する</li><li>SELECT 句の列記号を、現在の列構成に合わせて書き直す</li><li>WHERE 句・ORDER BY 句・GROUP BY 句にも同じ列記号が含まれていないか確認する</li></ol>



<p class="wp-block-paragraph">特に WHERE 句・ORDER BY 句は見落としやすいポイントです。たとえば <code>SELECT A, D WHERE D > 1000 ORDER BY D</code> のように同じ列を3か所で参照している場合、3か所すべてを修正する必要があります。</p>



<h3 class="wp-block-heading"><span id="toc16">修正例2：Col番号指定のずれを修正する</span></h3>



<p class="wp-block-paragraph"><code>Col1, Col2, Col3…</code> という相対番号指定は、IMPORTRANGE を組み合わせた場合や、データ範囲が動的に変わる場合に使われます。</p>



<p class="wp-block-paragraph">Col番号はデータ範囲の「一番左の列を1とした相対位置」を表します。たとえば <code>A1:F100</code> を対象にしている場合、Col1 はA列、Col6 はF列を意味します。</p>



<pre class="wp-block-code"><code>[崩れた状態]
=QUERY(A1:F100, &quot;SELECT Col1, Col3, Col5 WHERE Col2='東京'&quot;)
→ B列を削除したため、もともとCol3だった商品名が今はCol2に繰り上がっている

[修正後]
=QUERY(A1:E100, &quot;SELECT Col1, Col2, Col4 WHERE Col1='東京'&quot;)
→ B列削除で列が1つずつ前にずれたので、それに合わせて番号を1つずつ前にずらす</code></pre>



<p class="wp-block-paragraph">Col番号は「データ範囲内での相対位置」なので、データ範囲そのものが変わった場合は、SELECT 句の番号も連動して変更が必要です。</p>



<h3 class="wp-block-heading"><span id="toc17">QUERY独自のチェックポイント</span></h3>



<p class="wp-block-paragraph">QUERYを修正したあとは、次の項目も確認しておきましょう。</p>



<ul class="wp-block-list"><li>集計関数（SUM, AVG, COUNT）の対象列が正しいか</li><li>WHERE 句の比較値が、列のデータ型と一致しているか（数値列に文字列を指定していないか）</li><li>ORDER BY 句のソート列が、SELECT 句に含まれているか（必須ではないが、含まれていないと並び順の意図が分かりにくくなる）</li><li>LABEL 句で付けた列名が、修正後の列に対して妥当か</li></ul>



<p class="wp-block-paragraph">これらをまとめてチェックすると、「動くけど結果がおかしい」状態を見逃しにくくなります。</p>



<h2 class="wp-block-heading"><span id="toc18">IMPORTRANGEを使っている場合の対処</span></h2>



<p class="wp-block-paragraph">別ファイルからデータを取り込んでいる場合、崩れたときの調査がさらに複雑になります。</p>



<p class="wp-block-paragraph">IMPORTRANGE 経由のFILTER/QUERYは、自分のファイルだけを見ても原因がわからないため、参照元シートも合わせて確認する必要があります。IMPORTRANGE関数の基本については <a href="https://mashukabu.com/spreadsheet-importrange-complete-guide/">IMPORTRANGEの完全ガイド</a> を参考にしてください。</p>



<h3 class="wp-block-heading"><span id="toc19">IMPORTRANGE経由でずれる典型パターン</span></h3>



<p class="wp-block-paragraph">QUERYとIMPORTRANGEを組み合わせた書式は次のようになります。</p>



<pre class="wp-block-code"><code>=QUERY(
  IMPORTRANGE(&quot;スプレッドシートURL&quot;, &quot;Sheet1!A:F&quot;),
  &quot;SELECT Col1, Col3, Col5 WHERE Col2='東京'&quot;
)</code></pre>



<p class="wp-block-paragraph">このとき、参照元のスプレッドシートでB列を削除すると、IMPORTRANGEが返す配列の列構成も変わります。元の Col3（商品名）が Col2 に繰り上がる、といった現象が起こります。</p>



<p class="wp-block-paragraph">QUERY側の SELECT 句は文字列なので変わらず、結果として「商品名が表示されるはずの列に単価が出る」といったパターン3の事故が発生します。</p>



<h3 class="wp-block-heading"><span id="toc20">対処の手順</span></h3>



<p class="wp-block-paragraph">IMPORTRANGE経由の崩れを直すときは、次の順番で確認しましょう。</p>



<ol class="wp-block-list"><li><strong>参照元のシートを開く</strong>：実際の列構成を <code>SELECT *</code> 相当で確認する</li><li><strong>IMPORTRANGEだけで取得結果を確認</strong>：いったん <code>=IMPORTRANGE("URL", "Sheet1!A:F")</code> だけを別セルに置き、現在何列・どんなデータが返ってくるかを見る</li><li><strong>Col番号と実列の対応をマッピング</strong>：「いまの Col1 は何のデータか」を一覧化する</li><li><strong>QUERYの SELECT 句を書き直す</strong>：現在の列構成に合わせて Col番号を修正する</li></ol>



<p class="wp-block-paragraph">参照元のシートでよく列の追加・削除が発生する場合は、IMPORTRANGE で取得する範囲を <code>A:Z</code> のように広めにとっておき、QUERY側で <code>SELECT Col1, Col5…</code> と必要な列だけ取り出すスタイルにしておくと、追加には強くなります（ただし削除には依然として弱いので、後述の予防策も併用してください）。</p>



<h3 class="wp-block-heading"><span id="toc21">アクセス許可エラーが混ざるケース</span></h3>



<p class="wp-block-paragraph">崩れと同時にアクセス許可エラーが出ている場合は、まず許可エラーの解消が先です。</p>



<p class="wp-block-paragraph">IMPORTRANGE のアクセス許可は、参照元シートの所有者が変わったり、共有設定が変更されたりすると外れることがあります。詳しい対処は <a href="https://mashukabu.com/sheets-importrange-access-error/">IMPORTRANGEのアクセス許可エラー対処</a> を参照してください。</p>



<p class="wp-block-paragraph">許可エラーを解消したうえで、改めて Col番号のマッピングを行うのが安全な進め方です。</p>



<h2 class="wp-block-heading"><span id="toc22">今後のための予防策</span></h2>



<p class="wp-block-paragraph">「直しても、また誰かが列を削除して壊れる」。これは多くのチーム運用で発生する悩みです。</p>



<p class="wp-block-paragraph">最後の砦として、ここでは数式そのものを「行・列削除に強い書き方」へ変える方法を3つ紹介します。</p>



<h3 class="wp-block-heading"><span id="toc23">予防策1：名前付き範囲を活用する</span></h3>



<p class="wp-block-paragraph">スプレッドシートには「データ → 名前付き範囲」というメニューがあり、特定の範囲に名前を付けて関数から参照できます。</p>



<p class="wp-block-paragraph">名前付き範囲のメリットは、範囲内で行を挿入・削除しても、スプレッドシートが自動的に範囲定義を更新してくれる点です。</p>



<pre class="wp-block-code"><code>[名前付き範囲を使わない場合]
=FILTER(顧客マスタ!A2:D1000, 顧客マスタ!C2:C1000=&quot;東京&quot;)

[名前付き範囲を使う場合]
=FILTER(顧客データ, 都道府県列=&quot;東京&quot;)</code></pre>



<p class="wp-block-paragraph">名前付き範囲の登録手順は次のとおりです。</p>



<ol class="wp-block-list"><li>範囲指定したいセルをドラッグで選択する</li><li>メニューの「データ」→「名前付き範囲」をクリック</li><li>範囲に分かりやすい名前を付ける（例: <code>顧客データ</code>、<code>都道府県列</code>）</li><li>「完了」を押して登録する</li></ol>



<p class="wp-block-paragraph">数式の読みやすさも上がるため、チームで共有するスプレッドシートには特におすすめです。ただし、名前付き範囲そのものを削除すると参照している数式が一斉にエラーになるため、命名と削除のルールはチームで合意しておきましょう。</p>



<h3 class="wp-block-heading"><span id="toc24">予防策2：INDIRECT関数で参照を文字列化する</span></h3>



<p class="wp-block-paragraph"><a href="https://mashukabu.com/spreadsheet-indirect-function/">INDIRECT関数の使い方</a> は、文字列で指定したセル番地を参照に変換する関数です。</p>



<p class="wp-block-paragraph">文字列はセルの移動や行・列の削除では変化しないため、INDIRECT を介した参照は「位置が固定される」性質を持ちます。</p>



<pre class="wp-block-code"><code>[通常の参照]
=QUERY(Sheet1!A1:E100, &quot;SELECT A, C, D&quot;)

[INDIRECT経由]
=QUERY(INDIRECT(&quot;Sheet1!A1:E100&quot;), &quot;SELECT A, C, D&quot;)</code></pre>



<p class="wp-block-paragraph">通常の参照では、シート内で行を挿入すると <code>A1:E100</code> が自動的にずれてしまいます。一方 INDIRECT で文字列指定にすれば、<code>A1:E100</code> という位置は変わらず、常に同じ番地を参照し続けます。</p>



<p class="wp-block-paragraph">注意点として、INDIRECTは「揮発性関数」と呼ばれる種類の関数で、シート内の何かが変わるたびに再計算が走ります。大量に使うと、ファイル全体の動作が重くなることがあります。</p>



<ul class="wp-block-list"><li>データ件数が数千行以下：問題なく使える</li><li>データ件数が数万行・複数シートにまたがる：パフォーマンス劣化に注意</li><li>数十のセルで INDIRECT を多用する：他の方法（名前付き範囲・テーブル構造）の併用を検討</li></ul>



<p class="wp-block-paragraph">「行削除で位置がずれない」というメリットと、「再計算負荷が大きい」というデメリットを天秤にかけて使い分けるのがポイントです。</p>



<h3 class="wp-block-heading"><span id="toc25">予防策3：列全体指定・テーブル構造で運用する</span></h3>



<p class="wp-block-paragraph">データ範囲を「列全体」で指定する方法もあります。</p>



<pre class="wp-block-code"><code>[行数まで指定]
=FILTER(A2:D100, B2:B100=&quot;東京&quot;)

[列全体で指定]
=FILTER(A2:D, B2:B=&quot;東京&quot;)</code></pre>



<p class="wp-block-paragraph"><code>A2:D</code> のように行数を省略すると、A〜D列のヘッダー行を除く全データが対象になります。行が増えても自動的に範囲が広がるため、行の増減に対して堅牢です。</p>



<p class="wp-block-paragraph">ただし、これは「行」の増減には強い一方で、「列」の削除には依然として弱いので注意しましょう。列削除に対しては、上の名前付き範囲・INDIRECTと組み合わせる必要があります。</p>



<h3 class="wp-block-heading"><span id="toc26">予防策4：データ構造を「テーブル形式」で固定する</span></h3>



<p class="wp-block-paragraph">そもそも、行・列の削除がしょっちゅう発生するスプレッドシートは「データ構造として弱い」状態です。</p>



<p class="wp-block-paragraph">長く運用するスプレッドシートでは、データ構造を以下のように整えるとトラブルが激減します。</p>



<ul class="wp-block-list"><li><strong>1行目はヘッダー固定</strong>：列の意味（日付・氏名・売上 など）をヘッダー行に明記する</li><li><strong>列を消さない運用</strong>：使わなくなった列も削除せず「非表示」にする、または「アーカイブ列」として残す</li><li><strong>集計用シートと入力用シートを分離</strong>：入力するシートと集計するシートを分けることで、構造変更の影響範囲を限定する</li><li><strong>テンプレートを文書化</strong>：「この列は削除厳禁」「列の挿入は右端のみ」といったルールをシート内に記載する</li></ul>



<p class="wp-block-paragraph">技術的な工夫よりも、まずは「壊れにくいデータ構造で運用する」ことを最初に検討してください。</p>



<h3 class="wp-block-heading"><span id="toc27">予防策の組み合わせ早見表</span></h3>



<p class="wp-block-paragraph">それぞれの予防策の特性を表にまとめておきます。</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>△（範囲内のみ）</td><td>なし</td></tr><tr><td>INDIRECT</td><td>○</td><td>◎</td><td>×</td><td>あり（揮発性）</td></tr><tr><td>列全体指定</td><td>◎</td><td>◎</td><td>×</td><td>大データ時に注意</td></tr><tr><td>テーブル構造ルール</td><td>◎</td><td>◎</td><td>◎</td><td>なし</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">完全な防止策は存在しません。複数の予防策を組み合わせて、運用に合った形に整えるのが現実的な解です。</p>



<h2 class="wp-block-heading"><span id="toc28">修正後の確認方法</span></h2>



<p class="wp-block-paragraph">「直したつもりが、別の場所が静かに壊れている」。これも自動化スプレッドシートで起こりがちな事故です。</p>



<p class="wp-block-paragraph">数式の修正は、それ自体が新しい変更行為です。最後に、修正後の確認手順をまとめておきます。</p>



<h3 class="wp-block-heading"><span id="toc29">確認1：抽出件数と元データの突き合わせ</span></h3>



<p class="wp-block-paragraph">まず、FILTER や QUERY が返す件数が、元データの該当件数と一致するかをチェックします。</p>



<pre class="wp-block-code"><code>[確認用]
=COUNTIF(B2:B100, &quot;東京&quot;)</code></pre>



<p class="wp-block-paragraph"><code>COUNTIF</code> で「東京」の件数を数え、FILTER の結果と一致していれば、抽出条件は正しく動いていると判断できます。QUERY で集計をしている場合は、<code>SELECT COUNT(A) WHERE B='東京'</code> のような簡易クエリと結果を見比べると確実です。</p>



<h3 class="wp-block-heading"><span id="toc30">確認2：列順・列内容のサンプリング</span></h3>



<p class="wp-block-paragraph">抽出結果の上から数行を目視で確認し、列順が想定どおりか・データ型が混ざっていないかを見ましょう。</p>



<p class="wp-block-paragraph">特に、もともと「文字列だった列」と「数値だった列」が入れ替わっていないかは、見た目では気づきにくいポイントです。セルの右寄せ・左寄せの違いを利用すると、ざっと識別できます。</p>



<h3 class="wp-block-heading"><span id="toc31">確認3：依存している他の数式・グラフへの影響</span></h3>



<p class="wp-block-paragraph">FILTER や QUERY の結果を、別のセルや別シートで参照しているケースは多いはずです。</p>



<p class="wp-block-paragraph">修正後は、次の点もあわせて確認しましょう。</p>



<ol class="wp-block-list"><li>FILTER/QUERY の結果を <code>SUM</code>・<code>AVERAGE</code> などで集計しているセルの値が妥当か</li><li>FILTER/QUERY の結果を元にしているグラフが、想定どおり描画されているか</li><li>FILTER/QUERY の結果を IMPORTRANGE で別ファイルから読み込んでいる場合、そのファイルでも値が正しく表示されているか</li></ol>



<p class="wp-block-paragraph">スプレッドシートは1か所の変更が広範囲に波及します。「点」ではなく「線」で動作確認するのがコツです。</p>



<h3 class="wp-block-heading"><span id="toc32">確認4：実際に行・列を追加して再テストする</span></h3>



<p class="wp-block-paragraph">最後に、修正後の数式が「次の変更」にも耐えられるかを軽くテストしておくと安心です。</p>



<ol class="wp-block-list"><li>元データに新しい行を1行追加してみる → FILTER/QUERY の結果が増えるか</li><li>該当しないデータを1行追加してみる → 結果に混ざらないか</li><li>ヘッダーは触らず、不要な列を非表示にしてみる → 結果に変化がないか</li></ol>



<p class="wp-block-paragraph">「変更しても壊れないこと」を確認できれば、その数式は実務運用に十分に耐えうる品質と言えます。</p>



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



<p class="wp-block-paragraph">FILTER関数と QUERY関数が行・列削除によって崩れる現象は、見た目こそ似ていても、原因と対処はそれぞれ違います。</p>



<p class="wp-block-paragraph">この記事のポイントを最後にまとめます。</p>



<ul class="wp-block-list"><li>崩れ方は大きく3パターン：①<code>#REF!</code> エラー、②範囲サイズ不一致、③エラーなしで列がずれる</li><li>原因の特定は「数式バーで参照を確認」「エラーメッセージで切り分け」「SELECT * で元データを確認」の3ステップ</li><li>FILTER関数の修正は、削除後の列構成に合わせて「範囲」と「条件式」の両方を書き直す</li><li>QUERY関数の修正は、SELECT 句・WHERE 句・ORDER BY 句のすべての列記号を見直す</li><li>IMPORTRANGE経由のケースは、参照元シートの状態確認と、Col番号の再マッピングが必須</li><li>予防策は「名前付き範囲」「INDIRECT」「列全体指定」「テーブル構造ルール」の組み合わせで対応する</li><li>修正後は、件数の一致・列順・依存先・追加テストの4段階で確認する</li></ul>



<p class="wp-block-paragraph">特に「エラーが出ていないのに値が間違っている」パターン3は、業務データの信頼性に直結する重大なリスクです。日々の数式運用に、ぜひ予防策まで含めて取り入れてみてください。</p>



<p class="wp-block-paragraph">数式は一度組み立てたら終わりではなく、「壊れにくい形に育てていく」ものです。今回紹介した修正と予防のテクニックが、毎日のスプレッドシート運用の助けになれば幸いです。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://mashukabu.com/spreadsheet-filter-query-row-column-delete-fix/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>スプレッドシートのTRANSPOSE関数の使い方｜行列入れ替え</title>
		<link>https://mashukabu.com/spreadsheet-transpose-function/</link>
					<comments>https://mashukabu.com/spreadsheet-transpose-function/#respond</comments>
		
		<dc:creator><![CDATA[まっしゅ]]></dc:creator>
		<pubDate>Sat, 21 Mar 2026 11:29:34 +0000</pubDate>
				<category><![CDATA[Googleスプレッドシート]]></category>
		<category><![CDATA[ARRAYFORMULA関数]]></category>
		<category><![CDATA[QUERY関数]]></category>
		<category><![CDATA[TRANSPOSE関数]]></category>
		<category><![CDATA[行列入れ替え]]></category>
		<category><![CDATA[配列操作]]></category>
		<guid isPermaLink="false">https://mashukabu.com/?p=4741</guid>

					<description><![CDATA[スプレッドシートのTRANSPOSE関数で行と列を入れ替える方法を解説。「貼り付け→行列を入れ替え」との違い、QUERY関数やARRAYFORMULA関数との組み合わせ技、よくあるエラーの対処法まで、実務で使えるテクニックを紹介します。]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">スプレッドシートで表の縦と横を入れ替えたいとき、「貼り付けオプションで転置」を使っている方は多いですよね。でもこの方法だと、元データを修正しても入れ替え先には反映されません。</p>



<p class="wp-block-paragraph">TRANSPOSE関数を使えば、行と列を数式で入れ替えられます。元データが変わると自動で更新されるのが最大のメリットです。</p>



<p class="wp-block-paragraph">この記事では、TRANSPOSE関数の基本から、QUERY関数との組み合わせや「貼り付け→転置」との違いまでわかりやすく解説します。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-2" checked><label class="toc-title" for="toc-checkbox-2">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">スプレッドシートのTRANSPOSE関数とは？</a><ol><li><a href="#toc2" tabindex="0">TRANSPOSE関数の基本構文</a></li></ol></li><li><a href="#toc3" tabindex="0">TRANSPOSE関数の基本的な使い方</a><ol><li><a href="#toc4" tabindex="0">サンプルデータ</a></li><li><a href="#toc5" tabindex="0">数式を入力する</a></li><li><a href="#toc6" tabindex="0">単一行・単一列の転置</a></li></ol></li><li><a href="#toc7" tabindex="0">「貼り付け→行列を入れ替え」との違い</a></li><li><a href="#toc8" tabindex="0">TRANSPOSE関数の実務活用パターン</a><ol><li><a href="#toc9" tabindex="0">パターン1: 横持ちデータを縦持ちに変換する</a></li><li><a href="#toc10" tabindex="0">パターン2: QUERY関数と組み合わせてデータを抽出・転置する</a></li><li><a href="#toc11" tabindex="0">パターン3: SORT関数・FILTER関数と組み合わせる</a></li><li><a href="#toc12" tabindex="0">パターン4: ARRAYFORMULA関数と組み合わせて一括変換する</a></li><li><a href="#toc13" tabindex="0">パターン5: 複数列のデータを転置してカード形式にする</a></li></ol></li><li><a href="#toc14" tabindex="0">よくあるエラーと対処法</a><ol><li><a href="#toc15" tabindex="0">TRANSPOSE関数の結果は編集できない</a></li></ol></li><li><a href="#toc16" tabindex="0">ExcelのTRANSPOSE関数との違い</a></li><li><a href="#toc17" tabindex="0">まとめ</a><ol><li><a href="#toc18" tabindex="0">この記事で紹介した関数・関連記事</a></li></ol></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">スプレッドシートのTRANSPOSE関数とは？</span></h2>



<p class="wp-block-paragraph">TRANSPOSE関数（読み方: トランスポーズ関数）は、セル範囲の<strong>行と列を入れ替える</strong>関数です。英語の「transpose」は「転置する・入れ替える」という意味があります。</p>



<p class="wp-block-paragraph">たとえば、縦3行 x 横4列の表を、横4行 x 縦3列に変換できます。元のデータと数式でつながっているため、元データを変更すると入れ替え先も自動で更新されますよ。</p>



<p class="wp-block-paragraph">TRANSPOSE関数にできることをまとめると、次のとおりです。</p>



<ul class="wp-block-list"><li>セル範囲の行と列を入れ替える（転置する）</li><li>元データとリアルタイムに連動する</li><li>他の関数（QUERY、SORT、FILTERなど）の結果も転置できる</li><li>横持ちデータと縦持ちデータの相互変換に使える</li></ul>



<h3 class="wp-block-heading"><span id="toc2">TRANSPOSE関数の基本構文</span></h3>



<pre class="wp-block-code"><code>=TRANSPOSE(配列またはセル範囲)</code></pre>



<p class="wp-block-paragraph">カッコの中に、行列を入れ替えたい範囲を指定します。</p>



<figure class="wp-block-table"><table><thead><tr><th>引数</th><th>必須/任意</th><th>説明</th></tr></thead><tbody><tr><td>配列またはセル範囲</td><td>必須</td><td>行と列を入れ替えたいセル範囲。元の行が新しい列に、元の列が新しい行になる</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">引数は1つだけなので覚えやすい関数です。結果は自動でスピル展開されるため、出力先の範囲を事前に選択する必要はありません。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>NOTE</strong></p><p>Googleスプレッドシートでは、TRANSPOSE関数の結果は常に自動展開（スピル）されます。Excelの旧バージョンのようにCtrl+Shift+Enterで配列数式として入力する必要はありません。</p></blockquote>



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



<p class="wp-block-paragraph">ここでは、社員名簿のような縦長の表をTRANSPOSE関数で横方向に変換する例を紹介します。</p>



<h3 class="wp-block-heading"><span id="toc4">サンプルデータ</span></h3>



<p class="wp-block-paragraph">A1:D4に以下のデータが入っているとします。</p>



<figure class="wp-block-table"><table><thead><tr><th>&nbsp;</th><th>A</th><th>B</th><th>C</th><th>D</th></tr></thead><tbody><tr><td>1</td><td>名前</td><td>部署</td><td>入社年</td><td>等級</td></tr><tr><td>2</td><td>田中</td><td>営業</td><td>2018</td><td>A</td></tr><tr><td>3</td><td>佐藤</td><td>総務</td><td>2020</td><td>B</td></tr><tr><td>4</td><td>鈴木</td><td>経理</td><td>2019</td><td>A</td></tr></tbody></table></figure>



<h3 class="wp-block-heading"><span id="toc5">数式を入力する</span></h3>



<p class="wp-block-paragraph">出力先の左上セル（たとえばA7）に以下の数式を入力して、Enterを押します。</p>



<pre class="wp-block-code"><code>=TRANSPOSE(A1:D4)</code></pre>



<p class="wp-block-paragraph">元の4行が4列に、元の4列が4行に変換されます。</p>



<figure class="wp-block-table"><table><thead><tr><th>&nbsp;</th><th>A</th><th>B</th><th>C</th><th>D</th></tr></thead><tbody><tr><td>7</td><td>名前</td><td>田中</td><td>佐藤</td><td>鈴木</td></tr><tr><td>8</td><td>部署</td><td>営業</td><td>総務</td><td>経理</td></tr><tr><td>9</td><td>入社年</td><td>2018</td><td>2020</td><td>2019</td></tr><tr><td>10</td><td>等級</td><td>A</td><td>B</td><td>A</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">元データ（A1:D4）を変更すると、転置先（A7:D10）も自動で更新されますよ。</p>



<h3 class="wp-block-heading"><span id="toc6">単一行・単一列の転置</span></h3>



<p class="wp-block-paragraph">1行のデータを1列に変換することもできます。</p>



<pre class="wp-block-code"><code>=TRANSPOSE(A1:D1)</code></pre>



<p class="wp-block-paragraph">横1行x4列の「名前, 部署, 入社年, 等級」が、縦4行x1列に変換されます。逆に、縦1列のデータを横1行に展開したいときも同じように使えます。</p>



<h2 class="wp-block-heading"><span id="toc7">「貼り付け→行列を入れ替え」との違い</span></h2>



<p class="wp-block-paragraph">スプレッドシートには、コピー後に「特殊貼り付け→転置して貼り付け」を選ぶ方法もあります。TRANSPOSE関数とどちらを使うべきか、比較表で整理しました。</p>



<figure class="wp-block-table"><table><thead><tr><th>比較項目</th><th>TRANSPOSE関数</th><th>貼り付けの転置</th></tr></thead><tbody><tr><td>元データとの連動</td><td>あり（自動更新）</td><td>なし（静的コピー）</td></tr><tr><td>操作方法</td><td>数式を入力</td><td>コピー → 右クリック → 特殊貼り付け → 転置して貼り付け</td></tr><tr><td>元データの追加</td><td>参照範囲を広げれば自動対応</td><td>再度コピー＆貼り付けが必要</td></tr><tr><td>書式の引き継ぎ</td><td>なし（値のみ）</td><td>あり（書式も含めてコピー）</td></tr><tr><td>結果の編集</td><td>不可（数式の結果のため）</td><td>可能（独立したデータ）</td></tr></tbody></table></figure>



<p class="wp-block-paragraph"><strong>使い分けの目安はこうです。</strong></p>



<ul class="wp-block-list"><li><strong>元データが更新される場合</strong> → TRANSPOSE関数（連動して自動更新される）</li><li><strong>一度きりの変換で書式も残したい場合</strong> → 貼り付けの転置</li></ul>



<p class="wp-block-paragraph">月次データや日報のように継続的に更新される表では、TRANSPOSE関数のほうが便利です。一方、レイアウトを整えた最終版の表をコピーしたいだけなら、貼り付けの転置で十分ですよ。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>TIP</strong></p><p>貼り付けの転置はショートカットでも操作できます。範囲をコピーした後、Ctrl+Shift+V（特殊貼り付け）で「転置して貼り付け」にチェックを入れてください。</p></blockquote>



<h2 class="wp-block-heading"><span id="toc8">TRANSPOSE関数の実務活用パターン</span></h2>



<h3 class="wp-block-heading"><span id="toc9">パターン1: 横持ちデータを縦持ちに変換する</span></h3>



<p class="wp-block-paragraph">月別の売上が横方向に並んでいる表を、縦方向に変換する場面はよくあります。</p>



<pre class="wp-block-code"><code>=TRANSPOSE(B1:M1)</code></pre>



<p class="wp-block-paragraph">横1行x12列の月名データを、縦12行x1列に変換できます。グラフの元データやピボットテーブルとして使いやすい形になりますよ。</p>



<h3 class="wp-block-heading"><span id="toc10">パターン2: QUERY関数と組み合わせてデータを抽出・転置する</span></h3>



<p class="wp-block-paragraph"><a href="https://mashukabu.com/spreadsheet-query-function/">QUERY関数</a>で抽出した結果を、そのままTRANSPOSEで転置できます。</p>



<p class="wp-block-paragraph">たとえば、売上データから営業部のデータだけを抽出して横方向に展開する数式です。</p>



<pre class="wp-block-code"><code>=TRANSPOSE(QUERY(A1:D10, &quot;SELECT B WHERE A='営業'&quot;))</code></pre>



<p class="wp-block-paragraph">QUERY関数が縦方向に抽出した結果を、TRANSPOSEで横方向に並べ替えます。ダッシュボードで複数部署のデータを横並びに表示したいときに便利なパターンです。</p>



<p class="wp-block-paragraph">もう少し複雑な例として、QUERY関数のPIVOT句と組み合わせることもできます。</p>



<pre class="wp-block-code"><code>=TRANSPOSE(QUERY(A1:C10, &quot;SELECT A, SUM(C) GROUP BY A&quot;))</code></pre>



<p class="wp-block-paragraph">グループ集計の結果を転置して、横方向に並べたレポート形式にできます。</p>



<h3 class="wp-block-heading"><span id="toc11">パターン3: SORT関数・FILTER関数と組み合わせる</span></h3>



<p class="wp-block-paragraph"><a href="https://mashukabu.com/spreadsheet-sort-sortn-sortby/">SORT関数</a>や<a href="https://mashukabu.com/spreadsheet-filter-function/">FILTER関数</a>の結果を転置することもできます。</p>



<pre class="wp-block-code"><code>=TRANSPOSE(SORT(A2:A10))</code></pre>



<p class="wp-block-paragraph">縦方向に並べ替えたデータを、横方向に展開します。ランキングを横一列に表示したいときに使えるテクニックです。</p>



<pre class="wp-block-code"><code>=TRANSPOSE(FILTER(B2:B10, A2:A10=&quot;東京&quot;))</code></pre>



<p class="wp-block-paragraph">FILTER関数で絞り込んだ結果を横方向に展開します。特定条件のデータを横並びで見たい場面で活躍しますよ。</p>



<h3 class="wp-block-heading"><span id="toc12">パターン4: ARRAYFORMULA関数と組み合わせて一括変換する</span></h3>



<p class="wp-block-paragraph"><a href="https://mashukabu.com/spreadsheet-arrayformula-function/">ARRAYFORMULA関数</a>と組み合わせると、転置した結果に対して一括で計算を適用できます。</p>



<pre class="wp-block-code"><code>=ARRAYFORMULA(TRANSPOSE(B2:B10) * 1.1)</code></pre>



<p class="wp-block-paragraph">縦方向の売上データを横方向に転置しつつ、すべての値に1.1（税込み換算）を掛けています。転置と計算を1つの数式でまとめられるのがポイントです。</p>



<h3 class="wp-block-heading"><span id="toc13">パターン5: 複数列のデータを転置してカード形式にする</span></h3>



<p class="wp-block-paragraph">個人の情報が横一列に並んでいるデータを、縦型のプロフィールカード形式に変換する使い方です。</p>



<pre class="wp-block-code"><code>=TRANSPOSE(A2:F2)</code></pre>



<p class="wp-block-paragraph">A2:F2に「田中, 営業部, 東京, 2018年入社, A等級, 内線1234」と横並びのデータがあれば、縦6行の一覧に変換できます。</p>



<p class="wp-block-paragraph">ヘッダー行も一緒に転置すると、さらに見やすくなります。</p>



<pre class="wp-block-code"><code>=TRANSPOSE({A1:F1; A2:F2})</code></pre>



<p class="wp-block-paragraph">「{}」で配列を作り、ヘッダー行とデータ行を結合してから転置しています。ラベルとデータが横並びになるので、カード形式のレイアウトに最適ですよ。</p>



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



<p class="wp-block-paragraph">TRANSPOSE関数自体はシンプルですが、使い方によってはエラーが発生します。</p>



<figure class="wp-block-table"><table><thead><tr><th>エラー</th><th>原因</th><th>対処法</th></tr></thead><tbody><tr><td><code>#REF!</code></td><td>転置先のセルに既にデータがある</td><td>転置先の範囲を空にしてください</td></tr><tr><td><code>#REF!</code></td><td>参照先の行や列が削除された</td><td>参照先セルが存在するか確認してください</td></tr><tr><td><code>#ERROR!</code></td><td>配列の展開先がシートの端を超える</td><td>出力先をシートの左上寄りに移動してください</td></tr><tr><td><code>#N/A</code></td><td>他の関数と組み合わせた際に空セルが含まれる</td><td>IFERROR関数で空文字に置換してください</td></tr><tr><td>結果が1セルだけ</td><td>単一セルを指定している</td><td>範囲（例: A1:D4）を指定してください</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">特に注意したいのが「転置先のセルに既にデータがある」ケースです。スプレッドシートのスピル展開は、出力先にデータがあると <code>#REF!</code> エラーになります。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>TIP</strong></p><p>転置後のサイズがわからないときは、空白の多いエリアにTRANSPOSE関数を入力してみてください。元データが3行x5列なら、転置後は5行x3列になります。行数と列数が入れ替わるルールを覚えておけば迷いません。</p></blockquote>



<h3 class="wp-block-heading"><span id="toc15">TRANSPOSE関数の結果は編集できない</span></h3>



<p class="wp-block-paragraph">TRANSPOSE関数の結果はスピル展開された配列です。結果の一部のセルだけを編集・削除することはできません。変更したい場合は、元データを修正するか、貼り付けの転置に切り替えてください。</p>



<h2 class="wp-block-heading"><span id="toc16">ExcelのTRANSPOSE関数との違い</span></h2>



<p class="wp-block-paragraph">ExcelにもTRANSPOSE関数がありますが、スプレッドシート版との違いがいくつかあります。</p>



<figure class="wp-block-table"><table><thead><tr><th>項目</th><th>スプレッドシート</th><th>Excel（Microsoft 365）</th><th>Excel（2019以前）</th></tr></thead><tbody><tr><td>入力方法</td><td>Enterのみ（自動スピル）</td><td>Enterのみ（自動スピル）</td><td>Ctrl+Shift+Enter（配列数式）</td></tr><tr><td>出力先の事前選択</td><td>不要</td><td>不要</td><td>必要（サイズを正確に合わせる）</td></tr><tr><td>結果の自動展開</td><td>あり</td><td>あり（スピル）</td><td>なし</td></tr><tr><td>出力先にデータがある場合</td><td><code>#REF!</code> エラー</td><td><code>#SPILL!</code> エラー</td><td>上書きされる</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">スプレッドシートとMicrosoft 365のExcelでは、ほぼ同じ感覚で使えます。Excel 2019以前を使っている方が移行する場合は、Ctrl+Shift+Enterが不要になる分、スプレッドシートのほうがシンプルですよ。</p>



<p class="wp-block-paragraph">ExcelのTRANSPOSE関数の詳しい使い方は「<a href="https://mashukabu.com/excel-function-howto-use-transpose/">ExcelのTRANSPOSE関数の使い方</a>」で解説しています。</p>



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



<p class="wp-block-paragraph">TRANSPOSE関数は、セル範囲の行と列を入れ替えるシンプルな関数です。元データとリアルタイムに連動するため、更新頻度の高い表の変換に最適です。</p>



<p class="wp-block-paragraph">この記事のポイントをおさらいしておきましょう。</p>



<ul class="wp-block-list"><li>TRANSPOSE関数は <code>=TRANSPOSE(範囲)</code> で、行と列を入れ替える（Enterだけで自動展開）</li><li>「貼り付け→転置」は静的コピー、TRANSPOSE関数は元データと連動する</li><li>QUERY関数と組み合わせれば、抽出結果の転置も1つの数式で完結する</li><li>SORT・FILTER・ARRAYFORMULAとの組み合わせで活用の幅が広がる</li><li>転置先のセルを空にしておかないと <code>#REF!</code> エラーが出るので注意</li></ul>



<p class="wp-block-paragraph">まずは <code>=TRANSPOSE(A1:D4)</code> のシンプルな使い方から試してみてください。QUERY関数との組み合わせを覚えれば、データの見せ方がグッと柔軟になりますよ。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc18">この記事で紹介した関数・関連記事</span></h3>



<ul class="wp-block-list"><li><a href="https://mashukabu.com/excel-function-howto-use-transpose/">ExcelのTRANSPOSE関数の使い方</a></li><li><a href="https://mashukabu.com/spreadsheet-query-function/">スプレッドシートのQUERY関数の使い方</a></li><li><a href="https://mashukabu.com/spreadsheet-arrayformula-function/">スプレッドシートのARRAYFORMULA関数の使い方</a></li><li><a href="https://mashukabu.com/spreadsheet-filter-function/">スプレッドシートのFILTER関数の使い方</a></li><li><a href="https://mashukabu.com/spreadsheet-sort-sortn-sortby/">スプレッドシートのSORT関数の使い方</a></li><li><a href="https://mashukabu.com/spreadsheet-unique-function/">スプレッドシートのUNIQUE関数の使い方</a></li><li><a href="https://mashukabu.com/spreadsheet-index-function/">スプレッドシートのINDEX関数の使い方</a></li></ul>
]]></content:encoded>
					
					<wfw:commentRss>https://mashukabu.com/spreadsheet-transpose-function/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>スプレッドシートのFILTER関数の使い方｜条件抽出を自動化する実務7パターン</title>
		<link>https://mashukabu.com/spreadsheet-filter-function/</link>
					<comments>https://mashukabu.com/spreadsheet-filter-function/#respond</comments>
		
		<dc:creator><![CDATA[まっしゅ]]></dc:creator>
		<pubDate>Mon, 16 Mar 2026 14:29:59 +0000</pubDate>
				<category><![CDATA[Googleスプレッドシート]]></category>
		<category><![CDATA[ARRAYFORMULA]]></category>
		<category><![CDATA[FILTER関数]]></category>
		<category><![CDATA[QUERY関数]]></category>
		<category><![CDATA[SORT関数]]></category>
		<category><![CDATA[UNIQUE関数]]></category>
		<category><![CDATA[スプレッドシート]]></category>
		<category><![CDATA[データ抽出]]></category>
		<category><![CDATA[動的レポート]]></category>
		<category><![CDATA[条件抽出]]></category>
		<guid isPermaLink="false">https://mashukabu.com/?p=3920</guid>

					<description><![CDATA[GoogleスプレッドシートのFILTER関数の使い方を基本から解説。AND/ORの複数条件の指定方法、SORT・UNIQUE・COUNTIFとの組み合わせ、プルダウン連動の動的レポート、Excel版との違い、QUERY・ARRAYFORMULAとの使い分けまで、実務でそのまま使えるサンプル付きで紹介します。`#N/A` や `#REF!` などのエラー対処、表記揺れで0行になる場合のデバッグ手順もまとめています。]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">「売上データから東京支店だけ抜き出したい」「今月の受注だけ別シートに一覧化したい」。事務の現場でよくある作業ですよね。</p>



<p class="wp-block-paragraph">メニューの <strong>フィルター機能</strong> で手動で絞り込む方法もあります。ただ、条件が変わるたびにポチポチ操作するのは面倒ですし、元データに手を加えると共有メンバーに迷惑がかかることもあります。</p>



<p class="wp-block-paragraph">そんなときに使いたいのが <strong>FILTER関数</strong> です。元データはそのままに、条件に一致する行だけを別のセル範囲に自動で吐き出してくれます。プルダウンと組み合わせれば、選んだ条件で表示が切り替わる「動的レポート」もコードなしで作れますよ。</p>



<p class="wp-block-paragraph">この記事ではFILTER関数の基本構文から、AND/ORの複数条件、プルダウン連動・期間絞り込み・SORTやUNIQUEとの組み合わせなど、実務でそのまま使える7パターンを紹介します。<code>#N/A</code> や <code>#REF!</code> などのエラー対処、Excel版との違い、<a href="https://mashukabu.com/spreadsheet-query-function/">QUERY関数</a>・<a href="https://mashukabu.com/spreadsheet-arrayformula-function/">ARRAYFORMULA</a>との使い分けまで整理しますよ。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-3" checked><label class="toc-title" for="toc-checkbox-3">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">スプレッドシートのFILTER関数とは？条件に合う行をまるごと取り出す関数</a><ol><li><a href="#toc2" tabindex="0">FILTER関数で何ができる？</a></li><li><a href="#toc3" tabindex="0">メニューの「フィルター機能」との違い</a></li></ol></li><li><a href="#toc4" tabindex="0">FILTER関数の構文と引数</a><ol><li><a href="#toc5" tabindex="0">基本構文</a></li><li><a href="#toc6" tabindex="0">引数の説明</a></li><li><a href="#toc7" tabindex="0">FILTER関数の動作イメージ早見表</a></li></ol></li><li><a href="#toc8" tabindex="0">FILTER関数の基本的な使い方</a></li><li><a href="#toc9" tabindex="0">FILTER関数で複数条件を指定する（AND・OR）</a><ol><li><a href="#toc10" tabindex="0">AND条件（すべて満たす）</a></li><li><a href="#toc11" tabindex="0">OR条件（いずれかを満たす）</a></li><li><a href="#toc12" tabindex="0">AND/OR を組み合わせる</a></li></ol></li><li><a href="#toc13" tabindex="0">FILTER関数の実務テンプレ7パターン</a><ol><li><a href="#toc14" tabindex="0">パターン1: プルダウン連動の動的レポート</a></li><li><a href="#toc15" tabindex="0">パターン2: 期間で絞り込む（今月・先月・直近30日）</a></li><li><a href="#toc16" tabindex="0">パターン3: FILTER + SORT で抽出結果を並べ替え</a></li><li><a href="#toc17" tabindex="0">パターン4: 特定の列だけを取り出す（配列リテラル / CHOOSECOLS）</a></li><li><a href="#toc18" tabindex="0">パターン5: FILTER + UNIQUE で重複を除く</a></li><li><a href="#toc19" tabindex="0">パターン6: FILTER + COUNTA / SUM で集計</a></li><li><a href="#toc20" tabindex="0">パターン7: 条件セルが空のとき全件表示</a></li></ol></li><li><a href="#toc21" tabindex="0">よくあるエラーと対処法</a><ol><li><a href="#toc22" tabindex="0">データがあるのに0行になるケース（デバッグ手順）</a></li></ol></li><li><a href="#toc23" tabindex="0">FILTERとQUERY・ARRAYFORMULAの違い・使い分け</a><ol><li><a href="#toc24" tabindex="0">FILTER と QUERY の選び分けフロー</a></li><li><a href="#toc25" tabindex="0">FILTER と XLOOKUP・XMATCH の違い</a></li><li><a href="#toc26" tabindex="0">Excel版FILTERとの違い</a></li></ol></li><li><a href="#toc27" tabindex="0">まとめ</a><ol><li><a href="#toc28" tabindex="0">この記事を書いた人</a></li><li><a href="#toc29" tabindex="0">関連記事</a></li></ol></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">スプレッドシートのFILTER関数とは？条件に合う行をまるごと取り出す関数</span></h2>



<p class="wp-block-paragraph">FILTER関数（読み方: フィルター関数）は、<strong>指定した範囲の中から条件に一致する行（または列）だけを抜き出して別の場所に出力する関数</strong>です。関数名は英語の「filter（ろ過する・選別する）」に由来していて、データの中から必要なものだけをすくい上げるイメージで覚えると分かりやすいですね。</p>



<p class="wp-block-paragraph">たとえば社員リストから「営業部の人だけ」を抜き出したり、売上表から「100万円以上の案件だけ」を取り出したりできます。元のデータには触れずに別シートへレポートを自動生成できるので、共有ファイルで安全に使えるのも嬉しいポイントです。</p>



<h3 class="wp-block-heading"><span id="toc2">FILTER関数で何ができる？</span></h3>



<p class="wp-block-paragraph">FILTER関数が活躍するのは、おもに次のような場面です。</p>



<ul class="wp-block-list"><li>売上一覧から <strong>特定の支店・部署・担当者だけ</strong> を取り出したいとき</li><li>受注台帳から <strong>「今月」「今週」など期間で絞った行だけ</strong> を別シートに展開したいとき</li><li>申請一覧から <strong>ステータスが「承認待ち」の行だけ</strong> をダッシュボードに表示したいとき</li><li>プルダウンと連動させて <strong>選んだ条件で表示が切り替わる動的レポート</strong> を作りたいとき</li><li>元データを壊さずに、<strong>別シートで集計用の中間テーブル</strong> を作りたいとき</li></ul>



<p class="wp-block-paragraph">NOTE: FILTER関数はGoogleスプレッドシートの全バージョンで使えます。Excelでも Microsoft 365 / Excel 2021 以降で対応していますが、引数の仕様が一部異なります（後述の「Excel版との違い」を参照）。古いExcel（2019以前）と互換性が必要なファイルでは使えないので、その場合はオートフィルターやIF＋配列数式で代用してください。</p>



<h3 class="wp-block-heading"><span id="toc3">メニューの「フィルター機能」との違い</span></h3>



<p class="wp-block-paragraph">スプレッドシートにはメニュー > データ > 「フィルタを作成」というUI操作のフィルター機能もありますが、関数版とは性格が大きく異なります。</p>



<figure class="wp-block-table"><table><thead><tr><th>比較項目</th><th>FILTER関数</th><th>フィルター機能（UI）</th></tr></thead><tbody><tr><td>元データへの影響</td><td>一切変更しない（別セルに出力）</td><td>表示を直接絞り込む（裏では全行残る）</td></tr><tr><td>結果の出力先</td><td>任意の別セル・別シート</td><td>元データの行を非表示にして再描画</td></tr><tr><td>条件変更</td><td>数式やプルダウンを変えるだけで再計算</td><td>毎回メニュー操作が必要</td></tr><tr><td>共有ファイル</td><td>他人の表示に影響しない</td><td>フィルタ表示モードを使わないと他人の表示まで変わる</td></tr><tr><td>レポート自動化</td><td>得意（数式で完結）</td><td>不向き（手動操作前提）</td></tr><tr><td>抽出結果の再利用</td><td>そのまま参照・集計可能</td><td>コピペが必要</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">ざっくり言うと、<strong>一度きりの確認ならUI、繰り返し見るレポートなら関数</strong>と覚えておくと使い分けがラクです。</p>



<h2 class="wp-block-heading"><span id="toc4">FILTER関数の構文と引数</span></h2>



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



<pre class="wp-block-code"><code>=FILTER(範囲, 条件1, [条件2, ...])</code></pre>



<p class="wp-block-paragraph">最初に抽出したい「範囲」を指定し、その後にTRUE / FALSEを返す「条件」を1つ以上書きます。条件を複数並べるとすべてAND条件として適用されます。</p>



<h3 class="wp-block-heading"><span id="toc6">引数の説明</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>A2:D100</code>）。1列だけでも複数列でもOK</td></tr><tr><td>条件1</td><td>必須</td><td>TRUE / FALSEを返す配列の条件式（例: <code>B2:B100="東京"</code>）。範囲の行数と一致させる</td></tr><tr><td>条件2, &#8230;</td><td>任意</td><td>追加の条件。複数指定するとすべてAND条件で適用される</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">ポイントは <strong>条件式が「TRUE / FALSEの配列」を返す</strong> という点です。たとえば <code>B2:B6="東京"</code> と書くと、B2〜B6の各セルが「東京」かどうかを判定し、<code>{TRUE; FALSE; TRUE; FALSE; FALSE}</code> のような配列が作られます。FILTER関数はこの配列を受け取り、TRUEの行だけを抜き出す仕組みです。</p>



<p class="wp-block-paragraph">TIP: 条件式の範囲の行数は、必ず第1引数の範囲と揃えてください。<code>A2:D6</code>（5行）に対して条件を <code>B2:B100</code>（99行）にすると <code>#VALUE!</code> エラーになります。後述の「よくあるエラーと対処法」で詳しく説明します。</p>



<h3 class="wp-block-heading"><span id="toc7">FILTER関数の動作イメージ早見表</span></h3>



<figure class="wp-block-table"><table><thead><tr><th>数式の例</th><th>やりたいこと</th><th>戻り値</th></tr></thead><tbody><tr><td><code>=FILTER(A2:D6, B2:B6="東京")</code></td><td>B列が「東京」の行を全列抽出</td><td>東京の全行</td></tr><tr><td><code>=FILTER(A2:A6, B2:B6="東京")</code></td><td>B列が「東京」の行のうちA列だけ抽出</td><td>東京の日付列のみ</td></tr><tr><td><code>=FILTER(A2:D6, B2:B6="東京", D2:D6>=10000)</code></td><td>東京かつ金額1万以上をAND抽出</td><td>該当行のみ</td></tr><tr><td><code>=FILTER(A2:D6, (B2:B6="東京")+(B2:B6="大阪"))</code></td><td>東京または大阪をOR抽出</td><td>該当行のみ</td></tr><tr><td><code>=IFERROR(FILTER(A2:D6, B2:B6="福岡"), "該当なし")</code></td><td>該当なしのときメッセージ表示</td><td>&#8220;該当なし&#8221;</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">これだけ覚えれば実務の8割はカバーできます。あとは応用例で組み合わせのバリエーションを増やしていきましょう。</p>



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



<p class="wp-block-paragraph">ここからは、次のような売上データを使って実例で説明します。</p>



<figure class="wp-block-image"><img decoding="async" src="https://mashukabu.com/wp-content/uploads/2026/03/spreadsheet-sumif-function_01_data_sample-table.png" alt="01 data sample table" /></figure>



<p class="wp-block-paragraph"><strong>やりたいこと</strong>: B列が「東京」の行だけを抽出する。</p>



<p class="wp-block-paragraph">空いているセル（たとえばF2）に次の数式を入力します。</p>



<pre class="wp-block-code"><code>=FILTER(A2:D6, B2:B6=&quot;東京&quot;)</code></pre>



<figure class="wp-block-image"><img decoding="async" src="https://mashukabu.com/wp-content/uploads/2026/03/02_formula_filter-basic.png" alt="02 formula filter basic" /></figure>



<p class="wp-block-paragraph">結果はこうなります。</p>



<figure class="wp-block-image"><img decoding="async" src="https://mashukabu.com/wp-content/uploads/2026/03/03_result_filter-basic.png" alt="03 result filter basic" /></figure>



<p class="wp-block-paragraph">B列が「東京」の行だけが自動で出力されました。元のデータはまったく変わりません。条件に合う行が <strong>まるごとコピーされる</strong> のがFILTER関数の特徴です。VLOOKUPが「1つの値を返す」のと対照的に、FILTERは「行全体」を返します。</p>



<p class="wp-block-paragraph">TIP: FILTER関数の結果は複数行に <strong>自動で展開（スピル）</strong> されます。出力先のセルに他のデータがあると <code>#REF!</code> エラーになるので、下方向・右方向に十分な空きスペースを確保しておいてください。誰かが下のセルに値を入力すると関数全体がエラーになるので、共有ファイルでは出力先に色を付けておくと事故防止になります。</p>



<h2 class="wp-block-heading"><span id="toc9">FILTER関数で複数条件を指定する（AND・OR）</span></h2>



<p class="wp-block-paragraph">FILTER関数では、複数の条件を組み合わせて絞り込めます。書き方はAND条件とOR条件で異なるので、ここで一気に押さえておきましょう。</p>



<h3 class="wp-block-heading"><span id="toc10">AND条件（すべて満たす）</span></h3>



<p class="wp-block-paragraph">AND条件は、条件を引数として <strong>カンマで区切る</strong> か、<code>*</code>（掛け算）演算子で結合します。</p>



<pre class="wp-block-code"><code>=FILTER(A2:D6, B2:B6=&quot;東京&quot;, D2:D6&gt;=10000)</code></pre>



<figure class="wp-block-image"><img decoding="async" src="https://mashukabu.com/wp-content/uploads/2026/03/04_result_filter-and.png" alt="04 result filter and" /></figure>



<p class="wp-block-paragraph">この数式は「支店が東京」<strong>かつ</strong>「金額が10,000円以上」の行を返します。</p>



<p class="wp-block-paragraph"><code>*</code> 演算子を使う書き方もあります。結果はまったく同じです。</p>



<pre class="wp-block-code"><code>=FILTER(A2:D6, (B2:B6=&quot;東京&quot;)*(D2:D6&gt;=10000))</code></pre>



<p class="wp-block-paragraph">カンマ区切りのほうが読みやすいので普段はそちらで十分ですが、後述のOR条件と混在させたいときには <code>*</code> の書き方が必要になります。</p>



<h3 class="wp-block-heading"><span id="toc11">OR条件（いずれかを満たす）</span></h3>



<p class="wp-block-paragraph">OR条件は <code>+</code>（足し算）演算子で条件をつなぎます。カンマ区切りはOR条件としては使えないので注意してください。</p>



<pre class="wp-block-code"><code>=FILTER(A2:D6, (B2:B6=&quot;東京&quot;)+(B2:B6=&quot;大阪&quot;))</code></pre>



<p class="wp-block-paragraph">この数式は「支店が東京」<strong>または</strong>「支店が大阪」の行を返します。</p>



<p class="wp-block-paragraph">NOTE: <code>*</code> と <code>+</code> が使える理由は、条件式が TRUE=1 / FALSE=0 の数値配列として扱われるためです。掛け算は「両方1のときだけ1」=AND、足し算は「どちらかが1以上なら1以上」=OR の動きになります。OR条件で同じ行が両方に該当することは原理的にないので、足し算の結果が2以上になる心配はありません。</p>



<h3 class="wp-block-heading"><span id="toc12">AND/OR を組み合わせる</span></h3>



<p class="wp-block-paragraph">ANDとORを混在させたい場合は、OR条件のかたまりを <code>()</code> で囲んでから <code>*</code> で他の条件と結合します。</p>



<pre class="wp-block-code"><code>=FILTER(A2:D6, ((B2:B6=&quot;東京&quot;)+(B2:B6=&quot;大阪&quot;))*(D2:D6&gt;=10000))</code></pre>



<p class="wp-block-paragraph">「東京または大阪」<strong>かつ</strong>「金額10,000円以上」の行が返ります。括弧の付け方を間違えると意図しない結果になりやすいので、複雑な条件は <strong>OR部分を先に書く</strong> と整理しやすいです。</p>



<p class="wp-block-paragraph">TIP: 条件が3つ以上になる場合は、いったん別のセルに <code>=B2:B6="東京"</code> のような中間配列を出してみると、TRUE/FALSEの並びを目で確認できてデバッグがラクになります。中間配列がそろったところでFILTER関数に組み込み直すのがおすすめです。</p>



<h2 class="wp-block-heading"><span id="toc13">FILTER関数の実務テンプレ7パターン</span></h2>



<p class="wp-block-paragraph">ここからは、実務でよく出てくる7パターンを順に紹介します。コピペして使えるサンプル数式付きなので、自分のシートに合わせて範囲だけ書き換えてください。</p>



<h3 class="wp-block-heading"><span id="toc14">パターン1: プルダウン連動の動的レポート</span></h3>



<p class="wp-block-paragraph">プルダウンと組み合わせると、選択した条件のデータだけを動的に抽出できます。月次レポートやダッシュボードでよく使う構成です。</p>



<p class="wp-block-paragraph">たとえば、F1セルにプルダウンで支店名を選べるようにしておき、F3セルに次の数式を入力します。</p>



<pre class="wp-block-code"><code>=FILTER(A2:D6, B2:B6=F1)</code></pre>



<p class="wp-block-paragraph">F1で「大阪」を選べば大阪のデータだけが、「名古屋」を選べば名古屋のデータだけが表示されます。条件セルを切り替えるだけで結果が自動で変わるので、毎月の支店別チェックがワンクリックで終わります。</p>



<p class="wp-block-paragraph">プルダウン自体の作り方は <a href="https://mashukabu.com/spreadsheet-pulldown/">スプレッドシートのプルダウン作り方｜色付け・連動まで解説</a> を参考にしてください。「全件表示」もしたい場合は、後述のパターン7「条件セルが空のとき全件表示」を組み合わせると便利です。</p>



<h3 class="wp-block-heading"><span id="toc15">パターン2: 期間で絞り込む（今月・先月・直近30日）</span></h3>



<p class="wp-block-paragraph">日付列がある場合、特定の期間だけを抽出できます。月次レポートの定番パターンです。</p>



<p class="wp-block-paragraph">たとえば「2026年3月のデータだけ」を取り出したい場合は次のように書きます。</p>



<pre class="wp-block-code"><code>=FILTER(A2:E100, E2:E100&gt;=DATE(2026,3,1), E2:E100&lt;=DATE(2026,3,31))</code></pre>



<p class="wp-block-paragraph">DATE関数で開始日と終了日を指定し、2つの条件をカンマで区切ります。AND条件で「3月1日以降 かつ 3月31日以前」になるので、3月中のデータだけが抽出されます。</p>



<p class="wp-block-paragraph">「今月」や「直近30日」を自動で取りたい場合は TODAY関数を組み合わせます。</p>



<pre class="wp-block-code"><code>=FILTER(A2:E100, E2:E100&gt;=EOMONTH(TODAY(),-1)+1, E2:E100&lt;=EOMONTH(TODAY(),0))</code></pre>



<p class="wp-block-paragraph"><code>EOMONTH(TODAY(),-1)+1</code> は「今月の1日」、<code>EOMONTH(TODAY(),0)</code> は「今月末」を意味します。これでシートを開くたびに今月分が自動で表示されるレポートが完成します。</p>



<h3 class="wp-block-heading"><span id="toc16">パターン3: FILTER + SORT で抽出結果を並べ替え</span></h3>



<p class="wp-block-paragraph">FILTERで抽出した結果を金額順や日付順に並べ替えたいときは、<a href="https://mashukabu.com/spreadsheet-sort-sortn-sortby/">SORT関数</a> で囲みます。</p>



<pre class="wp-block-code"><code>=SORT(FILTER(A2:D6, B2:B6=&quot;東京&quot;), 4, FALSE)</code></pre>



<figure class="wp-block-image"><img decoding="async" src="https://mashukabu.com/wp-content/uploads/2026/03/05_result_filter-sort.png" alt="05 result filter sort" /></figure>



<p class="wp-block-paragraph">SORT関数の第2引数 <code>4</code> は「4列目（金額）で並べ替え」、第3引数 <code>FALSE</code> は「降順」を意味します。これで東京支店のデータを金額が大きい順に表示できます。</p>



<p class="wp-block-paragraph">TIP: SORT関数の列番号は <strong>FILTER結果の中での列番号</strong> です。元データのシート上の列番号ではないので、列を絞って抽出している場合はFILTER結果側で数え直してください。<code>=SORT(FILTER(A2:A6, B2:B6="東京"), 1, TRUE)</code> のように、抽出が1列だけなら列番号は必ず1になります。</p>



<h3 class="wp-block-heading"><span id="toc17">パターン4: 特定の列だけを取り出す（配列リテラル / CHOOSECOLS）</span></h3>



<p class="wp-block-paragraph">FILTER結果から一部の列だけ取り出したい場合は、配列リテラル <code>{}</code> で列を指定します。</p>



<pre class="wp-block-code"><code>={FILTER(A2:A6, B2:B6=&quot;東京&quot;), FILTER(D2:D6, B2:B6=&quot;東京&quot;)}</code></pre>



<p class="wp-block-paragraph">A列（日付）とD列（金額）だけが抽出されます。レポートに見せたい項目を絞れるので、社外共有用の表を作るときに便利です。</p>



<p class="wp-block-paragraph">5列以上の元データから3〜4列だけ抜き出したい場合は、CHOOSECOLS関数と組み合わせる書き方もあります。</p>



<pre class="wp-block-code"><code>=CHOOSECOLS(FILTER(A2:E100, B2:B100=&quot;東京&quot;), 1, 2, 5)</code></pre>



<p class="wp-block-paragraph">これでFILTER結果の1・2・5列目だけが残ります。配列リテラルの書き方より見通しがよく、列番号を変えるだけで取り出す列を調整できるのが利点です。</p>



<h3 class="wp-block-heading"><span id="toc18">パターン5: FILTER + UNIQUE で重複を除く</span></h3>



<p class="wp-block-paragraph">FILTERで抽出した結果に重複がある場合、UNIQUE関数で囲むとユニーク値だけを残せます。</p>



<pre class="wp-block-code"><code>=UNIQUE(FILTER(B2:C100, D2:D100&gt;=10000))</code></pre>



<p class="wp-block-paragraph">たとえば「金額1万円以上の案件に登場した支店・担当者の組み合わせ」だけを一覧化したいときに使えます。生データから関係者リストを作るような場面で重宝します。</p>



<p class="wp-block-paragraph">担当者だけのユニーク一覧が欲しい場合は、列を1つに絞ってからUNIQUEにかけます。</p>



<pre class="wp-block-code"><code>=UNIQUE(FILTER(C2:C100, D2:D100&gt;=10000))</code></pre>



<h3 class="wp-block-heading"><span id="toc19">パターン6: FILTER + COUNTA / SUM で集計</span></h3>



<p class="wp-block-paragraph">FILTER単体では合計や件数を出せませんが、COUNTAやSUM系の関数で囲めば簡単に集計できます。</p>



<pre class="wp-block-code"><code>=COUNTA(FILTER(A2:A6, B2:B6=&quot;東京&quot;))</code></pre>



<p class="wp-block-paragraph">これで「東京支店のデータ件数」が出ます。同じ要領で合計も書けます。</p>



<pre class="wp-block-code"><code>=SUM(FILTER(D2:D6, B2:B6=&quot;東京&quot;))</code></pre>



<p class="wp-block-paragraph">「東京支店の金額合計」が一発で出ます。SUMIFやCOUNTIFと違って、条件式を <code>*</code> / <code>+</code> で自由に組み合わせられるのがFILTERを噛ませる利点です。ただし純粋に1条件の合計だけならSUMIFのほうがシンプルなので、用途に応じて使い分けてください。</p>



<h3 class="wp-block-heading"><span id="toc20">パターン7: 条件セルが空のとき全件表示</span></h3>



<p class="wp-block-paragraph">プルダウン連動レポートで「条件を選んでいないときは全件表示したい」というニーズはよくあります。IF関数と組み合わせて条件を切り替えると実現できます。</p>



<pre class="wp-block-code"><code>=IF(F1=&quot;&quot;, A2:D6, FILTER(A2:D6, B2:B6=F1))</code></pre>



<p class="wp-block-paragraph">F1が空のときはA2:D6をそのまま表示し、F1に値があるときだけFILTERで絞り込みます。プルダウンの選択肢に「（すべて）」を入れておき、その項目を選んだら全件表示する設計にすると、利用者の操作感がぐっと良くなりますよ。</p>



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



<figure class="wp-block-table"><table><thead><tr><th>エラー / 症状</th><th>原因</th><th>対処法</th></tr></thead><tbody><tr><td><code>#N/A</code></td><td>条件に一致するデータがない</td><td><code>=IFERROR(FILTER(...), "該当データなし")</code> で空結果時のメッセージを設定</td></tr><tr><td><code>#REF!</code></td><td>出力先のセルに既にデータがある（スピル先がふさがっている）</td><td>出力先の下方向・右方向を空けるか、出力位置を変更する</td></tr><tr><td><code>#VALUE!</code></td><td>条件式の範囲サイズが元データと合っていない</td><td>範囲の行数を揃える（例: <code>A2:D100</code> と <code>B2:B100</code>）</td></tr><tr><td><code>#NAME?</code></td><td>関数名のタイポ（<code>FILTR</code> 等）</td><td>スペルを確認する</td></tr><tr><td><code>#ERROR!</code></td><td>引数の区切り（カンマ）の前後に不要な文字が混入</td><td>全角カンマや余分なスペースを削除</td></tr><tr><td>結果が0行になる</td><td>条件の文字列に全角/半角・スペースの違いがある</td><td>TRIM関数（前後空白除去）やASC関数（半角化）でデータを統一する</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">特に注意したいのが <code>#N/A</code> エラーです。ExcelのFILTER関数には第3引数（該当なしの場合に返す値）がありますが、<strong>スプレッドシートのFILTER関数にはこの引数がありません</strong>。IFERRORで囲むのが定番の対処法です。</p>



<pre class="wp-block-code"><code>=IFERROR(FILTER(A2:D6, B2:B6=&quot;福岡&quot;), &quot;該当データなし&quot;)</code></pre>



<p class="wp-block-paragraph">TIP: <code>#VALUE!</code> エラーは範囲サイズの不一致が原因です。<code>A2:D6</code>（5行）に対して条件を <code>B2:B100</code>（99行）のように行数が違う範囲にすると発生します。データ件数が増減する可能性がある場合は、両方とも <code>A2:D</code> のように <strong>列まるごと指定</strong> にしておくと不一致が起きにくくなります。</p>



<h3 class="wp-block-heading"><span id="toc22">データがあるのに0行になるケース（デバッグ手順）</span></h3>



<p class="wp-block-paragraph">条件は正しそうなのに結果が表示されないときは、データの表記揺れが原因のことがほとんどです。代表的な揺れと対処は次の3つです。</p>



<ul class="wp-block-list"><li><strong>全角と半角</strong>: 「東京」と「東京」（全角半角混在）は別文字として扱われる</li><li><strong>前後のスペース</strong>: 「東京 」（末尾に空白）と「東京」は別扱い</li><li><strong>大文字小文字</strong>: アルファベットは区別される（例: &#8220;ABC&#8221; と &#8220;abc&#8221;）</li></ul>



<p class="wp-block-paragraph">対処手順は次のとおりです。</p>



<ol class="wp-block-list"><li>別のセルに <code>=B2=F1</code> のように <strong>単純な等号比較</strong> を書いて、TRUE / FALSEを目視確認する</li><li>FALSEが返るセルがあれば、その値を <code>=LEN(B2)</code> と <code>=LEN(F1)</code> で文字数比較する</li><li>文字数が違えばスペース混入、同じなら全角半角混在を疑う</li><li>元データを <code>=TRIM(ASC(B2))</code> で整形した補助列を作り、その補助列を条件範囲に指定する</li></ol>



<p class="wp-block-paragraph">この4ステップで、ほぼすべての「0行になる問題」は解決できます。共有ファイルでは入力規則やプルダウンを使って <strong>そもそも揺れさせない</strong> 設計にしておくと、後々のトラブルが激減します。</p>



<h2 class="wp-block-heading"><span id="toc23">FILTERとQUERY・ARRAYFORMULAの違い・使い分け</span></h2>



<p class="wp-block-paragraph">スプレッドシートには、FILTER以外にもデータを操作する強力な関数があります。それぞれ得意分野が異なるので、用途に応じて使い分けましょう。</p>



<figure class="wp-block-table"><table><thead><tr><th>比較項目</th><th>FILTER関数</th><th>QUERY関数</th><th>ARRAYFORMULA</th></tr></thead><tbody><tr><td>主な用途</td><td>条件に一致する行の抽出</td><td>抽出+集計+並べ替えを一括</td><td>既存の関数を全行に一括適用</td></tr><tr><td>構文の難易度</td><td>やさしい</td><td>やや難（SQL風の構文）</td><td>関数による</td></tr><tr><td>複数条件</td><td><code>*</code> / <code>+</code> 演算子で対応</td><td>WHERE句に条件を列挙</td><td>関数内でIF等を組み合わせ</td></tr><tr><td>集計（合計・平均）</td><td>単体では不可。SUMと組み合わせる</td><td>SELECT句でSUM/AVGが使える</td><td>SUM等を配列で適用</td></tr><tr><td>グループ化（部署別合計など）</td><td>不可</td><td>GROUP BY で対応</td><td>不可（ピボットテーブル推奨）</td></tr><tr><td>並べ替え</td><td>SORT関数で囲む</td><td>ORDER BY で対応</td><td>SORT関数で囲む</td></tr><tr><td>結果の見出し列</td><td>付かない</td><td>LABEL句で付けられる</td><td>付かない</td></tr><tr><td>向いている場面</td><td>シンプルな条件抽出</td><td>複雑な集計レポート</td><td>列ごとの計算を一括処理</td></tr></tbody></table></figure>



<p class="wp-block-paragraph"><strong>ざっくりまとめると</strong>:</p>



<ul class="wp-block-list"><li><strong>「条件に合う行を取り出すだけ」</strong> → FILTER関数がシンプルで最適</li><li><strong>「集計やグループ化もしたい」</strong> → QUERY関数が強力</li><li><strong>「全行に同じ計算をかけたい」</strong> → ARRAYFORMULAの出番</li></ul>



<h3 class="wp-block-heading"><span id="toc24">FILTER と QUERY の選び分けフロー</span></h3>



<p class="wp-block-paragraph">どちらを使うか迷ったら、次の順番で判断するとブレません。</p>



<ol class="wp-block-list"><li><strong>集計が必要か？</strong> → 必要なら QUERY（SELECT句でSUM/AVG/COUNTが書ける）</li><li><strong>グループ化が必要か？</strong> → 必要なら QUERY（GROUP BYで部署別集計などが可能）</li><li><strong>見出し列も自動で付けたい？</strong> → 必要なら QUERY（LABEL句で列名を整えられる）</li><li><strong>並べ替えも一緒にしたい？</strong> → どちらでも対応可能。シンプルさ重視ならFILTER+SORT</li><li><strong>上記すべてNOで、条件で行を絞り込むだけ？</strong> → FILTER が一番読みやすく保守もしやすい</li></ol>



<p class="wp-block-paragraph">迷ったらまずFILTER関数を試してみてください。シンプルな条件抽出ならFILTERが圧倒的にわかりやすく、後から条件を増減するメンテナンスもラクです。</p>



<h3 class="wp-block-heading"><span id="toc25">FILTER と XLOOKUP・XMATCH の違い</span></h3>



<p class="wp-block-paragraph">検索系の新関数との違いも気になるかもしれません。</p>



<ul class="wp-block-list"><li><strong>XLOOKUP</strong>: 1つの値を検索して <strong>対応する1行（または1列）だけ</strong> を返す</li><li><strong>XMATCH</strong>: 1つの値が <strong>何行目（何番目）にあるか</strong> を返す</li><li><strong>FILTER</strong>: 条件に一致する <strong>すべての行</strong> を返す</li></ul>



<p class="wp-block-paragraph">「商品コードから商品名を引きたい」ような1対1の検索はXLOOKUPの出番です。「東京支店の全データを出したい」ような複数行抽出はFILTERの得意分野です。検索値の位置だけ知りたいならXMATCHを使います。</p>



<p class="wp-block-paragraph">XLOOKUP・XMATCHの詳しい使い方は <a href="https://mashukabu.com/spreadsheet-xlookup/">スプレッドシートのXLOOKUP関数の使い方</a> と <a href="https://mashukabu.com/spreadsheet-xmatch-function/">スプレッドシートのXMATCH関数の使い方</a> もあわせてご覧ください。</p>



<h3 class="wp-block-heading"><span id="toc26">Excel版FILTERとの違い</span></h3>



<p class="wp-block-paragraph">Excel（Microsoft 365 / Excel 2021以降）にもFILTER関数がありますが、引数仕様が少し異なります。スプレッドシートとファイル連携する場合は要注意です。</p>



<figure class="wp-block-table"><table><thead><tr><th>比較項目</th><th>スプレッドシート版</th><th>Excel版</th></tr></thead><tbody><tr><td>引数の数</td><td>2〜（範囲 + 条件×複数）</td><td>3（範囲 + 条件 + 該当なし時の値）</td></tr><tr><td>該当なしの返し方</td><td>IFERROR で囲む</td><td>第3引数で指定可能</td></tr><tr><td>複数条件のAND</td><td>カンマ区切り または <code>*</code></td><td><code>*</code> のみ</td></tr><tr><td>複数条件のOR</td><td><code>+</code></td><td><code>+</code></td></tr><tr><td>列方向の抽出</td><td>可能（条件式の方向で決まる）</td><td>可能（条件式の方向で決まる）</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">スプレッドシートで作ったブックをExcelで開くと、複数条件をカンマ区切りで書いた数式は <strong>動作しません</strong>。Excelと共有する可能性がある場合は、最初から <code>*</code> で書いておくと安全です。</p>



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



<p class="wp-block-paragraph">この記事では、GoogleスプレッドシートのFILTER関数の使い方を解説しました。</p>



<ul class="wp-block-list"><li><strong>基本</strong>: <code>=FILTER(範囲, 条件)</code> で条件に一致する行を自動抽出</li><li><strong>AND条件</strong>: カンマ区切りまたは <code>*</code> 演算子</li><li><strong>OR条件</strong>: <code>+</code> 演算子で条件をつなぐ</li><li><strong>実務テンプレ</strong>: プルダウン連動 / 期間絞り込み / SORT連携 / 列抽出 / UNIQUE / 集計 / 全件切替</li><li><strong>空結果対策</strong>: <code>=IFERROR(FILTER(...), "メッセージ")</code> で <code>#N/A</code> を回避</li><li><strong>デバッグ</strong>: 0行になるときは等号比較 → LEN比較 → TRIM/ASC整形の4ステップ</li><li><strong>使い分け</strong>: シンプルな抽出はFILTER、集計込みならQUERY、全行計算ならARRAYFORMULA</li></ul>



<p class="wp-block-paragraph">FILTER関数は一度覚えてしまえば本当に使い勝手のいい関数です。まずは自分の手元のデータに <code>=FILTER(A2:D, B2:B="東京")</code> のような数式を当ててみてください。元データを壊さずに「欲しい行だけ」を取り出せる安心感を、ぜひ体感してもらえたら嬉しいです。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc28">この記事を書いた人</span></h3>



<p class="wp-block-paragraph">biz-tactics編集部。事務職の現場で本当に使えるExcel・スプレッドシート・AIの技を発信しています。</p>



<h3 class="wp-block-heading"><span id="toc29">関連記事</span></h3>



<ul class="wp-block-list"><li><a href="https://mashukabu.com/spreadsheet-sort-sortn-sortby/">スプレッドシートのSORT・SORTN・SORTBY関数の使い方｜データを自動で並べ替える</a></li><li><a href="https://mashukabu.com/spreadsheet-xlookup/">スプレッドシートのXLOOKUP関数の使い方｜VLOOKUPとの違いも解説</a></li><li><a href="https://mashukabu.com/spreadsheet-xmatch-function/">スプレッドシートのXMATCH関数の使い方</a></li><li><a href="https://mashukabu.com/spreadsheet-switch-function/">スプレッドシートのSWITCH関数の使い方</a></li><li><a href="https://mashukabu.com/spreadsheet-pulldown/">スプレッドシートのプルダウン作り方｜色付け・連動まで解説</a></li><li><a href="https://mashukabu.com/spreadsheet-query-function/">スプレッドシートのQUERY関数の使い方</a></li><li><a href="https://mashukabu.com/spreadsheet-arrayformula-function/">スプレッドシートのARRAYFORMULAの使い方</a></li><li><a href="https://mashukabu.com/spreadsheet-gemini-ai-function/">スプレッドシートでGemini（AI関数）を使う方法</a></li></ul>
]]></content:encoded>
					
					<wfw:commentRss>https://mashukabu.com/spreadsheet-filter-function/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
