GoogleスプレッドシートのQUERY関数は、SQLライクな構文でデータを抽出できる強力な関数です。特に日付を条件に指定する機会は多いものの、正しく抽出できずに困った経験がある方も少なくありません。日付が文字列として扱われていたり、QUERY内の記法が適切でないと、期待した結果が得られません。この記事では、QUERY関数で日付条件が機能しない原因を切り分け、具体的な確認手順と修正方法をわかりやすく解説します。
【要点】この記事で確認すること
- 最初に見る場所: 抽出対象の日付列が「日付」として認識されているか(書式設定とデータ型)
- 切り分けの軸: データが文字列か日付か、QUERYの日付指定構文が正しいか、セル参照を使うときに変換が必要か
- 注意点: 会社の共有スプレッドシートではスクリプトの実行権限に注意。また、日付形式のローカライズに依存しない書き方を推奨します
ADVERTISEMENT
目次
1. 日付条件が機能しない主な原因
QUERY関数で日付を条件にしたとき、何も抽出されない、エラーになる、あるいはすべての行が返されるなどの現象が発生します。原因は大きく分けて以下の3つに分類できます。
1-1. 日付データが文字列として保存されている
スプレッドシートにデータをインポートしたり手入力した際、日付が文字列(例: “2025/3/1” のように左寄せ)として保存されていることがあります。QUERY関数は日付型の列にのみ `date ‘yyyy-mm-dd’` の条件を適用できるため、文字列列に対しては比較が機能しません。まずは `=ISDATE(セル)` でTRUEになるか確認しましょう。
1-2. 日付の書式が統一されていない
同じ列内に “2025/3/1” と “2025-03-01” や “3/1/2025” など複数の書式が混在している場合、QUERYは日付として正しく解釈できなくなります。Googleスプレッドシートは表示書式と実際のデータ型が異なる場合があるため、見た目が日付に見えても内部でシリアル値になっていないケースがあります。
1-3. QUERY内での日付の記述方法が間違っている
QUERYの `WHERE` 句で日付を指定するには、`date ‘yyyy-mm-dd’` という特別な構文を使います。単に引用符で囲んだ文字列(例: `’2025/3/1’`)を書いてしまうと、日付リテラルとして認識されず、文字列比較になります。また、日付をセル参照する場合も適切に変換する必要があります。
2. 問題を切り分けるための確認手順
以下の手順を順に実行することで、原因を特定できます。手順には具体的な関数を使った確認方法を含めています。
- 対象の日付列を選択し、メニュー「表示形式」→「数字」→「日付」が選択されているか確認します。表示形式が「自動」や「テキスト」になっていると、データが文字列の可能性があります。
- 空いているセルに `=ISDATE(対象セル)` を入力し、結果がTRUEかFALSEか確認します。FALSEの場合はそのセルが日付として認識されていません。
- 数式バーで日付セルの値を確認します。日付がシリアル値(例: 45678)として表示される場合は日付型、文字列そのまま(例: 2025/3/1)なら文字列です。
- もし文字列だった場合、近くの列に `=DATEVALUE(文字列セル)` を入力してシリアル値を取得し、その列をQUERYの参照範囲に含めることで回避できます。
- QUERY関数のWHERE句を `WHERE A = date ‘2025-03-01’` のように記述し、日付リテラルを使った正しい構文に修正します。
- セル参照を使う場合は、`=QUERY(A1:C,”WHERE A = date ‘”&TEXT(D1,”yyyy-mm-dd”)&”‘”)` のようにTEXT関数でISO形式に変換してから結合します。
3. 正しいQUERY関数の日付条件の書き方
正しい書き方を理解するために、よくある間違いと正しい例を比較表にまとめました。
| タイプ | 間違った例 | 正しい例 |
|---|---|---|
| 日付直接指定 | `=QUERY(A1:C,”where A=’2025/3/1′”)` | `=QUERY(A1:C,”where A=date ‘2025-03-01′”)` |
| セル参照(日付セルがシリアル値) | `=QUERY(A1:C,”where A=”&D1)` ※D1が日付表示でもエラーになる | `=QUERY(A1:C,”where A=”&D1)` ※シリアル値ならOK、ただし書式は日付でなくても内部は数値 |
| セル参照(文字列日付を変換) | `=QUERY(A1:C,”where A=date ‘”&D1&”‘”)` ※D1が”2025/3/1″など | `=QUERY(A1:C,”where A=date ‘”&TEXT(D1,”yyyy-mm-dd”)&”‘”)` |
3-1. 日付を直接指定する場合
QUERYの中で固定的な日付を指定する場合は、必ず `date ‘yyyy-mm-dd’` の形式を使います。年は4桁、月と日は2桁(ゼロ埋め)で記述してください。例: `date ‘2025-03-01’`。月や日を1桁で書くとエラーになります。
3-2. セル参照を使う場合
別のセルに入力した日付を条件として使いたい場合は、TEXT関数でISO形式に変換してからQUERY文字列に結合します。例えば `D1` セルに日付が入っている場合、`=QUERY(A1:C,”where A=date ‘”&TEXT(D1,”yyyy-mm-dd”)&”‘”)` と書きます。このときD1の書式は任意の日付形式で構いません。
3-3. 日付シリアル値を使う場合
もし日付列がすでに内部でシリアル値(数値)として保存されているなら、QUERY内で数値として比較することも可能です。列Aがシリアル値の場合、`=QUERY(A1:C,”where A=”&D1)` とできます。ただしD1がシリアル値である必要があります。表示書式が日付でも、内部値がシリアル値であれば問題ありません。
ADVERTISEMENT
4. よくある失敗パターンと対処法
実際に遭遇しやすい失敗例とその解決方法をまとめます。
4-1. 日付の区切り文字がスラッシュやドットのままdateリテラルに使ってしまう
`date ‘2025/03/01’` や `date ‘2025.03.01’` は正しく認識されません。必ずハイフン(-)を使い、yyyy-mm-dd形式にしてください。
4-2. 曜日や文字列が日付に混ざっている
「2025年3月1日(土)」のように曜日が入っていると、QUERYは日付として解釈できません。事前にデータを整形するか、SPLITやREGEXEXTRACTで日付部分のみを取り出しましょう。
4-3. 空白セルが含まれている
日付列に空白があると、QUERYの条件比較でエラーは出ませんが、意図しない行が除外されることがあります。必要に応じてISBLANKで除外条件を追加してください。
4-4. 範囲指定が誤っている
QUERYの第一引数の範囲に日付列が含まれていないケースです。範囲を正しく指定しているか再確認してください。
4-5. 日付を動的に「今日」と比較したい場合
TODAY関数をQUERY内で直接使うことはできません。`=QUERY(A1:C,”where A=date ‘”&TEXT(TODAY(),”yyyy-mm-dd”)&”‘”)` のようにTEXTで変換してから結合します。
5. 管理者に確認すべき情報(組織の共有スプレッドシートの場合)
会社で共有しているスプレッドシートでは、QUERY関数自体に権限の問題はほとんどありません。ただし、以下の点で管理者の設定が影響する可能性があります。
- タイムゾーン設定: Google Workspace管理コンソールのタイムゾーンが異なると、TODAY関数の返す日付がずれることがあります。特にグローバルチームで共有している場合は注意が必要です。
- スクリプトとの連携: QUERY関数単体では問題ありませんが、QUERYの結果を利用するGoogle Apps Scriptがある場合、そのスクリプトの実行権限(承認)が不足していないか確認してください。
- インポート範囲の権限: IMPORTRANGEやQUERYで他のスプレッドシートを参照している場合、アクセス権限が適切に設定されているか管理者に問い合わせてください。
これらの設定は通常のQUERY利用ではあまり関係しませんが、トラブルが解決しない場合の切り分けとして念頭に置いておきましょう。
6. よくある質問(Q&A)
Q1: QUERYで日付を日付として認識させるにはどうすればいいですか?
A: まずデータが文字列かどうか調べます。文字列ならDATEVALUE関数でシリアル値に変換するか、データメニューの「テキストを列に分割」を使って日付型に変換します。その後、QUERY内ではdate ‘yyyy-mm-dd’形式を使います。
Q2: エラー「DATEVALUE パラメータを日付として解釈できません」の対処は?
A: 日付文字列の書式がGoogleスプレッドシートの解釈できる形式(通常はyyyy/mm/ddやyyyy-mm-dd)と異なる場合に発生します。元データを統一された書式に整形してください。REGEXREPLACE関数を使って置き換える方法もあります。
Q3: 抽出条件に「今日から1週間以内」を指定したい
A: QUERYでは直接計算式を入れられないため、`=QUERY(A1:C,”where A >= date ‘”&TEXT(TODAY(),”yyyy-mm-dd”)&”‘ and A <= date '"&TEXT(TODAY()+7,"yyyy-mm-dd")&"'")` のように範囲指定します。
7. まとめ
QUERY関数で日付条件が機能しない場合、まずは日付列が文字列でなく日付型になっているか確認してください。次にQUERY内の記述が `date ‘yyyy-mm-dd’` の形式に従っているか、セル参照時にはTEXT関数でISO形式に変換しているかをチェックします。よくある失敗パターンをあらかじめ把握しておけば、原因を素早く特定できます。日付の扱いはシートの設計にも影響するため、データ入力の段階で統一された書式を徹底することも大切です。適切な手順を踏めば、QUERY関数は日付条件でも安定して動作します。
ADVERTISEMENT
超解決 第一編集部
疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。
Office・仕事術の人気記事ランキング
- 【Word】差し込み印刷で数字の桁を整える!金額にカンマ(桁区切り)を入れる設定
- 【Teams】メッセージを「保存済み」にして後で読む!重要なチャットをブックマークして整理する技
- 【Copilot】「サービスに接続できません」エラーの原因切り分けと対処法
- 【PDF】PDFのサムネイルプレビューが表示されない!エクスプローラーの設定とAcrobat環境設定
- 【Excel】文字がセルの枠からはみ出す・隠れる!「折り返して表示」と「縮小して全体を表示」の使い分け
- 【Outlook】添付ファイルが「Winmail.dat」に化ける!受信側が困らない送信設定
- 【PDF】PDFに入力した文字の「フォント・サイズ・色」を変更するプロパティ設定
- 【Word】校閲機能の基本!赤字(変更履歴)とコメントで修正を見える化する
- 【Outlook】宛先が「オートコンプリート」に出ない・間違っている時の修正手順|履歴の削除と再構築
- 【PDF】結合するPDFの「用紙サイズ」がバラバラな時、すべてを「A4サイズ」に強制リサイズしてから結合する
