Google SheetsのQUERY関数とIMPORTRANGEで発生する「NO_COLUMN: A」エラーの修正方法

beginner📗 Google Sheets2026-04-13| Google Sheets (Web / クラウド)

Error Message

Error: Unable to parse query string for Function QUERY parameter 2: NO_COLUMN: A
#google-sheets#query関数#importrange#スプレッドシートのヒント

問題の概要

数式は一見完璧に見えるのに、Google Sheetsが NO_COLUMN: A エラーを返し続けることがあります。これは、QUERY 関数を IMPORTRANGE や波括弧 {} で囲まれたデータと組み合わせた際によく発生します。

エラーの内容は簡潔です:Error: Unable to parse query string... NO_COLUMN: A。参照元のシートには明らかに列Aが存在するため、混乱を招くかもしれません。しかし、Google Sheetsがデータを解釈する方法は、関数や配列を介した瞬間に変化します。

失敗する数式の典型例

外部のリードトラッカーから500行の売上データを取得する場合を考えてみましょう:

=QUERY(IMPORTRANGE("https://docs.google.com/spreadsheets/d/1abc123", "Leads!A:C"), "SELECT A WHERE B = 'Closed'")

たとえ IMPORTRANGE 部分が単独で完璧に動作していても、QUERY でラップすると失敗します。「A」や「B」を有効な列識別子として認識しなくなるためです。

原因:範囲(Range)と配列(Array)の違い

これを修正するには、QUERY エンジンがデータをどのように識別するかを理解する必要があります。ソースに応じて2つの異なる「言語」を使用します。

  • 範囲コンテキスト(Range Context): A1:C10 のように直接範囲を参照する場合、Google Sheetsは物理的なグリッドを認識します。「A」が最初の列であることを理解しています。
  • 配列コンテキスト(Array Context): IMPORTRANGEFILTER、または波括弧 {Sheet1!A:B} などの関数は、データを配列に変換します。この状態では、データは単なる値の浮遊ブロックとなり、スプレッドシートの列文字との接続が失われます。

QUERY エンジンは、配列の中に「列A」を見つけることができません。配列自体は、自分がスプレッドシートから来たことを知らないからです。わかるのは、1番目、2番目、3番目の列があるということだけです。

解決策:ColX 構文への切り替え

QUERY のソースが関数や配列である場合は常に、列文字(A, B, C)を Col1, Col2, Col3 という参照に置き換える必要があります。

修正後の数式

先ほどの失敗例を修正すると、以下のようになります:

=QUERY(IMPORTRANGE("https://docs.google.com/spreadsheets/d/1abc123", "Leads!A:C"), "SELECT Col1 WHERE Col2 = 'Closed'")

ColX 構文の厳格なルール

Google Sheetsでは、これらの参照の書き方が厳密に定められています。小さなタイポ(打ち間違い)一つで別のエラーが発生します。

  • 大文字と小文字の区別: 必ず Col1 を使用してください。col1COL1 と書くと構文エラーになります。
  • 相対的なインデックス: Col1 は、選択した範囲内の最初の列を指します。範囲が C:E の場合、Col1 は実際にはC列を指します。
  • 引用符は不要: Col1 は予約語として扱います。クエリ文字列内でシングルクォーテーションで囲まないでください。

エラーが発生する主なシナリオ

1. IMPORTRANGEの使用

これが最大の原因です。IMPORTRANGE は常に配列を出力するため、列文字を使用することはできません。

-- これは失敗します
=QUERY(IMPORTRANGE("URL", "A:Z"), "SELECT A, C")

-- これは動作します
=QUERY(IMPORTRANGE("URL", "A:Z"), "SELECT Col1, Col3")

2. 複数の範囲の結合

波括弧を使用して2つのシートからデータを結合する場合、仮想的な配列を作成していることになります。

-- これは失敗します
=QUERY({North_Sales!A:B; South_Sales!A:B}, "SELECT A WHERE B > 5000")

-- これは動作します
=QUERY({North_Sales!A:B; South_Sales!A:B}, "SELECT Col1 WHERE Col2 > 5000")

クイック検証チェックリスト

数式がまだ機能しない場合は、次の3つの項目を確認してください:

  • 権限の確認: #REF! エラーが表示される場合は、セルにカーソルを合わせてください。シート間で通信を行うために「アクセスを許可」をクリックする必要がある場合があります。
  • 列数のカウント: 範囲が A:B(2列)なのに、クエリで Col3 を要求している場合、数式は壊れます。
  • ソースのテスト: QUERY() 部分を削除し、IMPORTRANGE() 単独で実行してみてください。生データが表示されない場合は、クエリ構文ではなく、ソースのURLや範囲に問題があります。

結論

列文字(A, B, C)は、A1:D100 のような単純で直接的な範囲にのみ使用してください。関数、波括弧、インポートを含むそれ以外のすべてのケースでは、常に Col1Col2 形式を使用しましょう。これにより、数式の堅牢性が高まり、データソースが変化しても NO_COLUMN エラーの発生を防ぐことができます。

Related Error Notes