問題の概要
数式は一見完璧に見えるのに、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):
IMPORTRANGE、FILTER、または波括弧{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を使用してください。col1やCOL1と書くと構文エラーになります。 - 相対的なインデックス:
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 のような単純で直接的な範囲にのみ使用してください。関数、波括弧、インポートを含むそれ以外のすべてのケースでは、常に Col1、Col2 形式を使用しましょう。これにより、数式の堅牢性が高まり、データソースが変化しても NO_COLUMN エラーの発生を防ぐことができます。

