ADVERTISEMENT

【Googleスプレッドシート】QUERY関数のLIMIT/OFFSET!ページング処理の実装

【Googleスプレッドシート】QUERY関数のLIMIT/OFFSET!ページング処理の実装
🛡️ 超解決

大量のデータをスプレッドシートで管理していると、一度にすべての行を表示するのではなく、必要な分だけを分割して表示したくなることがあります。QUERY関数のLIMIT句とOFFSET句を使えば、簡単にページング処理を実装できます。この記事では、QUERY関数でLIMITとOFFSETを使用する方法を、具体的な構文から動的なページ指定のテクニックまで詳しく解説します。

【要点】QUERY関数のLIMIT/OFFSETを使って効率的にページングを実装する

  • =QUERY(データ範囲, “SELECT * LIMIT 10”): 最初の10行だけを取得する基本構文で、大量データの先頭部分だけを表示したいときに使います。
  • =QUERY(データ範囲, “SELECT * LIMIT 10 OFFSET 10”): 11行目から20行目を取得する構文で、OFFSETでスキップする行数を指定します。
  • セル参照を使って動的にページ番号を指定: “LIMIT “&D1&” OFFSET “&(D2-1)*D1 のように組み立てることで、任意のページを切り替えられます。

ADVERTISEMENT

QUERY関数のLIMIT句とOFFSET句の基本

QUERY関数はデータベースのようにスプレッドシートのデータを操作できる強力な関数です。LIMIT句は取得する行数を制限し、OFFSET句は先頭から何行スキップするかを指定します。これらを組み合わせることで、指定したページのデータだけを抽出できます。構文は「=QUERY(データ範囲, “SELECT 列名 WHERE 条件 LIMIT 行数 OFFSET スキップ行数”)」の形です。OFFSETを省略すると先頭からの取得になります。LIMITだけの場合は単純な行数制限、LIMITとOFFSETの両方を使うとページングが実現します。

QUERY関数でページングを実装する手順

固定の行数で最初のページを表示する

  1. データ範囲を用意する
    シート1のA1からD100にデータが入っているとします。ヘッダー行は1行目にあると想定します。
  2. QUERY関数を入力する
    別のセルに次の数式を入力します。=QUERY(Sheet1!A1:D100, “SELECT * LIMIT 10”)。これで1〜10行目(ヘッダーを含む)が表示されます。
  3. ヘッダーを除外する場合
    ヘッダー行をスキップするには、データ範囲をA2:D100に変更するか、QUERYのオプションで「headers」を指定します。=QUERY(Sheet1!A1:D100, “SELECT * LIMIT 10”, 1)とすればヘッダー行を含む最初の11行目まで表示されます。

OFFSETを使って次のページを表示する

  1. 2ページ目のデータを取得する
    =QUERY(Sheet1!A1:D100, “SELECT * LIMIT 10 OFFSET 10”)。これで11行目から20行目が取得されます。
  2. 3ページ目以降
    OFFSETの値を10ずつ増やします。3ページ目はOFFSET 20、4ページ目はOFFSET 30と続きます。
  3. 総行数を超えないように注意
    QUERYは範囲内のデータしか返しません。OFFSETが範囲を超えた場合は結果が空になります。

セル参照を使ってページ番号を動的に指定する

  1. ページ番号とページサイズを入力するセルを用意する
    たとえばD1にページサイズ(例:10)、D2に表示したいページ番号(例:2)を入力します。
  2. 動的なQUERY数式を組み立てる
    =QUERY(Sheet1!A1:D100, “SELECT * LIMIT “&D1&” OFFSET “&(D2-1)*D1)。これでD1とD2の値を変更するだけで任意のページが表示できます。
  3. エラーハンドリングを追加する
    D2が1未満や範囲外の場合、IFERRORで空文字を返すようにします。=IFERROR(QUERY(Sheet1!A1:D100, “SELECT * LIMIT “&D1&” OFFSET “&(D2-1)*D1), “”)。

INDIRECT関数と組み合わせてシート名を動的にする

  1. シート名をセル参照にする
    E1にシート名(例:”Sheet1″)を入力します。
  2. INDIRECTで範囲を指定する
    =QUERY(INDIRECT(E1&”!A1:D100″), “SELECT * LIMIT 10”)。これでシート名を変更しても自動で追従します。
  3. ページングと組み合わせる
    =QUERY(INDIRECT(E1&”!A1:D100″), “SELECT * LIMIT “&D1&” OFFSET “&(D2-1)*D1) とすれば、シート名も動的に変更可能です。

ページング実装時の注意点とよくあるエラー

OFFSETの値が大きすぎると結果が空になる

QUERY関数はデータ範囲の行数より大きなOFFSETを指定すると、何も返しません。回避するために、事前に総行数をCOUNTAなどで取得し、ページ番号が適切かどうかをチェックするロジックを追加してください。

LIMIT句とOFFSET句の順序に注意する

QUERYのSQLライクな構文では、LIMITの前にOFFSETを書くこともできますが、一般的には「LIMIT 10 OFFSET 20」の順序が推奨されます。どちらでも動作しますが、混乱を避けるために統一しましょう。

データに行の追加・削除があった場合

ページングの基準は行番号(データの順序)です。データが追加されたり削除されたりすると、同じページ番号でも表示内容が変わることがあります。安定したページングを行うには、ORDER BY句を使って並び替えを固定することを検討してください。

大規模データでのパフォーマンス

QUERY関数はLIMITとOFFSETを指定しても、内部的に全データを読み込んでから切り出すため、データが非常に多いと処理が遅くなることがあります。10万行を超える場合は、FILTER関数とROW関数を使った別のページング方法を検討するか、Google Apps Scriptで処理することをおすすめします。

ADVERTISEMENT

QUERYのLIMIT/OFFSETと他のページング方法の比較

方法 メリット デメリット
QUERY + LIMIT/OFFSET シンプルな構文で実装しやすい 大規模データで速度が遅くなりがち
FILTER + ROW関数 条件を柔軟に指定できる 数式が複雑になりがち
Google Apps Script 高速でカスタマイズ自由 トリガー設定などが必要
ピボットテーブル 集計とページングを同時に行える 元データの構造変更が必要な場合あり

まとめ

QUERY関数のLIMIT句とOFFSET句を使うと、スプレッドシート上で簡単にページング処理を実装できます。固定の行数指定から、セル参照を使った動的なページ番号指定まで、基本的なテクニックを紹介しました。さらに、INDIRECT関数と組み合わせてシート名も動的にすることで、より柔軟なデータ表示が可能です。大量データの場合はパフォーマンスに注意し、必要に応じてFILTER関数やApps Scriptの利用を検討してみてください。QUERY関数は他にも多くの応用ができますので、ぜひマスターしてデータ操作を効率化してください。


ADVERTISEMENT

この記事の監修者
✍️

超解決 第一編集部

疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。