クイック解決策 (TL;DR)
ダッシュボードを台無しにする最大の要因は、大量のエラーメッセージです。この特定のエラーは、QUERY の構文は正しいものの、WHERE 句に一致する行がゼロであることを意味します。スプレッドシートの見栄えを保つために、数式を IFERROR 関数で囲み、エラーの代わりにカスタムメッセージを表示するようにしましょう:
=IFERROR(QUERY(A:C, "SELECT A, B WHERE C = 'Paid'", 1), "No matching records")
データが確実に存在しているのにエラーが解消されない場合は、データ型の不一致、不適切な日付形式、または隠れた空白が原因である可能性が高いです。
主な原因と解決方法
1. データ型の不一致 (51%ルール)
Google スプレッドシートの QUERY 関数は、Google Visualization API を利用しています。この API は非常に厳格です。列の最初の100行をスキャンして、データ型(数値、文字列、または日付)を推測します。もしそのうち90行が数値で10行がテキストだった場合、QUERY 関数はしばしばその10行のテキストを null 値として扱います。これは、データがいつの間にか消えてしまう「サイレント・データキラー」です。
解決策: クエリを実行する前に、ARRAYFORMULA と TO_TEXT を使用して、範囲全体を強制的にテキスト形式に変換します。これにより、すべてのデータが同じ条件で扱われるようになります。
=QUERY(ARRAYFORMULA(TO_TEXT(A:C)), "SELECT Col1, Col2 WHERE Col3 = 'Active'", 1)
ヒント:範囲を ARRAYFORMULA で囲む場合は、列文字(A, B)からインデックス番号(Col1, Col2)に切り替える必要があります。
2. 日付形式の壁
「12/31/2023」のような標準的な日付形式はセル内では機能しますが、クエリ文字列内では失敗します。QUERY 関数は、date キーワードを前に付けた ISO 形式(yyyy-mm-dd)を要求します。日付が含まれる E1 のようなセルを参照する場合、単にセルを指定するだけでなく、書式を設定する必要があります。
失敗する理由:
=QUERY(A:C, "SELECT A WHERE B > '01/01/2024'")
正しい構文:
数式に日付を直接入力する場合:
=QUERY(A:C, "SELECT A WHERE B > date '2024-01-01'", 1)
セル E1 から日付を取得する場合:
=QUERY(A:C, "SELECT A WHERE B > date '"&TEXT(E1, "yyyy-mm-dd")&"'", 1)
3. 大文字・小文字の区別
コンピュータは文字通りに解釈します。Google スプレッドシートのクエリにとって、「Apple」と「apple」は完全に別物です。データに大文字と小文字が混在している場合、標準的な WHERE 句では半分のエントリを見逃してしまい、結果が空になる可能性があります。
解決策: 比較の際に lower() 関数を使用して、すべてを小文字に変換します。これにより、大文字・小文字を区別せずに検索できるようになります。
=QUERY(A:C, "SELECT A, B WHERE lower(C) = 'shipped'", 1)
4. 隠れた空白 (見えない原因)
データが完璧に見えても、セルに「Paid」ではなく「Paid 」(末尾にスペース)が含まれていることがあります。そのわずか1つの空白だけで、出力が空になるエラーが発生します。これは、会計ソフトや CRM からエクスポートしたデータでよく起こります。
解決策: 等号(=)の代わりに contains 演算子を使用します。これにより、空白に対してより柔軟に対応できます。
=QUERY(A:C, "SELECT A, B WHERE C contains 'Paid'", 1)
5. ヘッダー行のカウントミス
QUERY 関数の第3引数は、ヘッダーが何行あるかを Google に伝えます。ここを空白にすると、スプレッドシートが推測します。もし推測が外れると、唯一の実際のデータ行をヘッダーの一部として誤認してしまい、結果に表示するものが何も残らなくなることがあります。
解決策: ソフトウェアに推測させないようにしましょう。明示的に 1(ヘッダーがない場合は 0)を設定してください。
=QUERY(A:E, "SELECT * WHERE A IS NOT NULL", 1)
修正を確認する方法
データが正しく返されるか確認するために、以下の手順を試してください:
- ホバーして確認: エラーのあるセルの上にマウスを置きます。赤い三角形が消えていれば、構文は修正されています。
- 範囲を広げる: 一時的に
WHERE句を削除してみてください。データが表示される場合、問題はデータ範囲ではなく、フィルタ条件にあります。 - データ型をテストする: 元のデータに対して
=TYPE(A2)を使用します。同じ列に 1(数値)と 2(テキスト)が混在している場合は、ステップ1で説明したTO_TEXTの修正を適用してください。
トラブルシューティング・クイックリファレンス
問題の状況
考えられる原因
適用する修正:
結果がゼロ
制限の厳しいフィルタ
`IFERROR()` で囲む
特定の行が表示されない
データ型の混在
`ARRAYFORMULA(TO_TEXT())` を使用
日付フィルタが機能しない
無効な日付文字列
`date 'yyyy-mm-dd'` を使用
テキストの一致が機能しない
大文字・小文字または空白
`lower()` または `contains` を使用

