QUERY関数で取得したデータを思い通りに並べ替えたいけれど、ORDER BY句の書き方がわからず困っていませんか。実は、列番号や昇順・降順の指定方法を間違えると、意図しない順序で表示されてしまうケースがよくあります。この記事では、QUERY関数のORDER BY句を使ってデータを正確に並べ替える方法を、具体的な構文と共にわかりやすく解説します。
【要点】QUERY関数のORDER BY句で並べ替えをマスターする
- ORDER BY句の基本構文: 列番号または列ラベルを指定して昇順(ASC)または降順(DESC)に並べ替えます。
- 複数列の並べ替え: カンマ区切りで複数の列を指定し、優先順位を設定します。
- 数値・日付の正しい並べ替え: 数値や日付はデータ型に注意し、必要に応じてCAST関数で変換します。
ADVERTISEMENT
目次
QUERY関数のORDER BY句の基本構文と動作の仕組み
QUERY関数は、指定した範囲に対してSQLライクなクエリを実行し、データを抽出・加工します。ORDER BY句はそのクエリの最後に記述し、取得したデータの並べ替え順序を制御します。構文は「ORDER BY 列番号 [ASC|DESC]」の形式で、列番号は1から始まる数値で指定するか、列ラベルを直接記述することも可能です。昇順はASC、降順はDESCと省略なしで記述し、省略するとデフォルトで昇順になります。
ORDER BY句は、SELECT句で指定した列順とは独立しています。例えば、SELECTでB列とA列の順に取得しても、ORDER BYで2番目の列(元のA列)を指定できます。また、集計関数(SUMやCOUNTなど)の結果も並べ替え可能です。ただし、ORDER BY句はWHERE句やGROUP BY句の後に記述する必要があり、記述順を誤るとエラーになります。
QUERY関数でORDER BYを使う具体的な手順
ここでは、実際のデータを使ってORDER BY句を適用する手順を説明します。例として、売上データのテーブル(A列:日付、B列:商品名、C列:金額)を想定します。
1列を昇順で並べ替える基本手順
- QUERY関数を入力するセルを選択します
結果を表示したいセル(例:E1)をクリックします。 - 基本構文を入力します
=QUERY(A1:C100, "SELECT * ORDER BY C ASC")と入力します。これでC列(金額)が昇順に並び替えられます。 - Enterキーで確定します
指定した範囲のデータが金額の小さい順に表示されます。
降順で並べ替える手順
- 同じ要領でクエリを入力します
=QUERY(A1:C100, "SELECT * ORDER BY C DESC")と入力します。DESCを付けることで降順になります。 - 結果を確認します
金額が大きい順にデータが表示されます。
複数列を組み合わせて並べ替える手順
- 複数の列をカンマで区切って指定します
例えば、商品名で昇順、同じ商品内では金額の降順にしたい場合:=QUERY(A1:C100, "SELECT * ORDER BY B ASC, C DESC")と入力します。 - 優先順位に注意します
最初に指定した列(B)が第一優先、次に指定した列(C)が第二優先で並べ替えられます。
列ラベル(ヘッダー行)を使って並べ替える手順
- 列ラベルを直接指定します
ヘッダー行がある場合、=QUERY(A1:C100, "SELECT * ORDER BY 金額 DESC")のように列名(金額)で指定できます。列名にスペースがある場合はバッククォートで囲みます(例:`売上金額`)。 - 列ラベルの表記に注意します
ヘッダー行のテキストと完全に一致させる必要があります。大文字小文字は区別されません。
ORDER BY使用時の注意点とよくある失敗
ORDER BY句の記述位置を間違えてしまう
ORDER BY句はクエリの最後に記述します。WHERE句やGROUP BY句の前に書くとエラーになります。必ずSELECTとFROMの後、他の句の後に配置してください。
数値が文字列として並べ替えられる
数値列が文字列として保存されていると、昇順で「1,10,100,2」のような順序になります。これを防ぐには、数値列にCAST関数を適用します。=QUERY(A1:C100, "SELECT *, CAST(C AS NUMBER) ORDER BY C ASC")のようにします。ただし、QUERY関数内ではTO_NUMBERの代わりにCAST(C AS NUMBER)が使えます。
日付の並べ替えが正しく行われない
日付列が文字列の場合は、日付型に変換する必要があります。例えば、日付がA列にある場合、=QUERY(A1:C100, "SELECT * ORDER BY DATE(A) ASC")と記述します。スプレッドシートの日付シリアル値に変換された日付列はそのままORDER BYで正しく並びます。
ヘッダー行が並べ替えに含まれてしまう
QUERY関数はデフォルトでヘッダー行をデータとして扱いませんが、範囲にヘッダーを含めている場合は、SELECT句でヘッダーを除外するか、WHERE句で除外条件を追加します。例えば、=QUERY(A1:C100, "SELECT * WHERE A IS NOT NULL ORDER BY A")のようにします。
ADVERTISEMENT
QUERY関数のORDER BYと他の並べ替え方法の違い
| 比較項目 | QUERY関数のORDER BY | 標準の並べ替え機能 |
|---|---|---|
| 動的更新 | 元データが変わると自動で再計算 | 手動で並べ替えをやり直す必要あり |
| 複数条件 | SQLライクに複数列・方向を自由に指定 | ダイアログで複数レベル指定可能 |
| 数値・日付の扱い | 型変換が必要な場合あり | 自動でデータ型を認識 |
| 元データの保護 | 元データは変更されない | 元データの順序が変更される |
QUERY関数のORDER BYは、元データを保持したまま動的に並べ替え結果を表示したい場合に適しています。一方、標準の並べ替え機能は手動で即座に並べ替えたい場合に便利です。
まとめ
QUERY関数のORDER BY句を使うことで、データベースのような柔軟な並べ替えが可能になります。基本は「ORDER BY 列番号 [ASC|DESC]」の形で覚え、複数列や型変換が必要なケースでは追加の記述を行います。このテクニックを活用すれば、売上ランキングや在庫管理など、さまざまなレポート作成が効率的に行えます。次はGROUP BY句と組み合わせて集計結果の並べ替えにも挑戦してみてください。
ADVERTISEMENT
超解決 第一編集部
疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。
Googleスプレッドシートの人気記事ランキング
- 【Googleスプレッドシート】GOOGLEFINANCE関数で株価・為替を取得!リアルタイムデータの呼び出し
- 【Googleスプレッドシート】印刷範囲を指定して印刷!特定範囲だけPDFや紙に出す手順
- 【Googleスプレッドシート】新しいスプレッドシートを作成する3つの方法!ドライブ・URL・テンプレート
- 【Googleスプレッドシート】数値の連続データを自動入力!オートフィルの活用
- 【Googleスプレッドシート】ダークモードを有効にする!目に優しい配色への切替
- 【Googleスプレッドシート】株価APIで株式データを自動取得!GOOGLEFINANCE超え活用
- 【Googleスプレッドシート】共有相手が編集できない時のチェック!権限と許可状態の確認
- 【Googleスプレッドシート】ページ設定で用紙サイズと向きを調整!印刷レイアウトの基本
- 【Googleスプレッドシート】Excelファイルxlsxをインポートする手順!ドラッグ&ドロップで取り込み
- 【Googleスプレッドシート】条件付き書式をコピーする!書式のみペーストの活用
