Accessレポートで並べ替えする方法

概要

この記事の結論
Accessのレポートは、[グループ化と並べ替え]で並べ替えフィールドと昇順・降順を指定します。複数条件では上の段が優先され、同じ値の行を次の条件で並べます。印刷順を安定させるには最後に一意なIDを追加しましょう。元クエリの表示順だけに頼らず、レポート側の設定とデータ型も確認します。

この記事でわかること

  • 既存レポートはグループ化と並べ替えで修正する
  • 上の条件から順に優先される
  • 同じ値の行には一意なIDを最後の条件にする
  • 文字列数値・時刻・グループ設定を確認する

この記事の主な内容

  1.  既存レポートの並び順を変更する
  2. 複数条件とグループの優先順位を理解する
  3. 新しいレポートに並び順を設定する
  4. 思いどおりに並ばない原因と対処
  5. 独自の業務順とVBAによる切り替え
  6. 印刷順を安定させる検証と運用
  7. まとめ
  8. よくある質問

想定読了時間:約12分~14分


既存レポートの並び順を変更する

既にあるレポートの並び順は、[グループ化と並べ替え]で変更できます。元テーブルの表示順を変えるために、データを入れ直す必要はありません。まずレポートのコピーを作り、現在のグループと並べ替えの条件を確認します。

ここで扱う並べ替えは、レポートへ表示・印刷するレコードの順序です。元データの値そのものを変更する処理ではありません。取引先名、売上日、金額など、読者が追いやすい順に帳票を整えるために使います。

デザインビューから設定する手順

1. ナビゲーションウィンドウで対象レポートを右クリックし、デザインビューで開きます。
2. リボンの[グループ化と並べ替え]を選び、画面下部の設定欄を表示します。
3. 既存の並べ替え条件を確認します。なければ[並べ替えの追加]を選びます。
4. 並べ替えるフィールドを選び、昇順または降順を指定します。
5. 保存して印刷プレビューへ切り替え、先頭と末尾のデータを確認します。

既存レポートのグループ化と並べ替えを開き条件を設定する図

リボンの名称はAccessの版やビューによって多少異なることがあります。レイアウトビューから設定できる項目もありますが、この記事では既存構造を確認しやすいデザインビューを中心に説明します。設定を保存した後は、閉じて開き直しても同じ順番になるかを見ます。

昇順と降順の考え方

データの種類昇順降順
数値小さい値から大きい値大きい値から小さい値
日付/時刻古い日時から新しい日時新しい日時から古い日時
文字列照合順序に従う順その逆の順

日付を新しいものから見たいなら降順、番号を小さいものから並べたいなら昇順を選びます。日本語の文字列では、漢字の見た目だけで期待する読み順になるとは限りません。五十音順を安定して使いたい場合は、読み仮名フィールドを用意する方法を検討します。


複数条件とグループの優先順位を理解する

複数の並べ替え条件は、上の段から優先されます。第1条件の値が同じ行を第2条件で並べ、そこも同じなら第3条件を使います。「日付と顧客を両方設定した」というだけでなく、どちらを先にするかを決めることが重要です。

日付と顧客IDを組み合わせる例

教育用の例として、売上ID、売上日、顧客IDを持つレポートを考えます。最初は売上日に時刻が含まれないデータで、日付降順、顧客ID昇順、売上ID昇順を指定します。次の表が、並べ替え後に期待する順序です。

順番売上日顧客ID売上ID
12026/09/261015001
22026/09/261015004
32026/09/261025002
42026/09/251014999

まず9月26日が9月25日より前に来ます。9月26日の中では顧客101が102より前になり、同じ顧客101の2件は売上IDで順番を決めます。条件を上下に移動すると、最初に比較される項目が変わります。

第1条件が同じ行だけを第2条件で並べる考え方を示す図

同じ値の行は最後に一意なIDで確定する

日付と顧客だけでは同じ値になる行が残ることがあります。その場合の順序を明示しないと、読者が期待する固定順を保証できません。帳票の照合や差分確認に使うなら、最後に一意なIDを追加すると順番を説明しやすくなります。

売上IDがヘッダー単位で、同じ売上に複数明細があるデータでは、売上IDだけで明細順は確定しません。明細番号や明細IDを含め、帳票の1行を一意に識別できる組み合わせを使います。画面にそのIDを表示するかどうかと、ソートに利用するかは別に考えます。

日付や顧客が同じ行の順番をIDで確定する図

グループ内の順番と全体の順番

顧客でグループ化したレポートでは、顧客ごとのまとまりを保ちながら、その中の明細を日付順にできます。一方、全顧客を混ぜて最新の売上から並べたいなら、顧客グループを先に置く設計とは目的が異なります。

顧客ごとのグループと各グループ内の日付順を分ける図

例えば顧客Aの9月1日の売上が、顧客Bの9月26日の売上より前に見えても、顧客グループが優先されているなら設定どおりです。全体の日付順を求めるのか、顧客別明細を求めるのかを先に確認します。グループを削除すると、ヘッダー・小計・改ページへも影響するため、コピーで変更してください。


新しいレポートに並び順を設定する

新規作成ならレポートウィザードで、元データ、必要なフィールド、グループ、並べ替えを順に指定できます。完成後も[グループ化と並べ替え]から見直せるため、ウィザードの選択を一度で完成させる必要はありません。

レポートウィザードの流れ

1. [作成]から[レポートウィザード]を開きます。
2. 元になるテーブルまたはクエリを選び、表示項目と並べ替え用の項目を含めます。
3. 顧客別などのまとまりが必要ならグループを指定します。
4. 並べ替え項目と昇順・降順を選びます。
5. レイアウトと用紙方向を決め、レポート名を付けて保存します。
6. 完成後に設定欄を確認し、印刷プレビューで結果を見ます。

並べ替えに使うフィールドは、レポートのレコードソースに含めておきます。レコードソースとは、レポートがデータを読み取る元のテーブルやクエリです。フォームに同じ名前のテキストボックスがあるだけでは、レポートのソート項目として使えるとは限りません。

元クエリの並び順だけに頼らない

クエリを開いたときに順序が正しくても、レポート側に別のグループやソートがある場合は、印刷結果が異なることがあります。帳票として必要な順序はレポート側で明示し、抽出条件と印刷順の役割を整理します。

レポートを開くボタンやイベント処理が、OrderByなどのプロパティを設定している場合もあります。デザイン画面だけを直しても、起動時にコードが別の順序を適用することがあるため、既存システムでは「どの入口から開いたか」も確認してください。


思いどおりに並ばない原因と対処

並べ替えが効かないように見える原因には、優先順位の取り違え、データ型の違い、非表示の時刻、別の設定による上書きがあります。変更したフィールドが第1条件なのか、グループ内の条件なのかを確かめることから始めます。

1 10 2の順になる場合

数字に見える値でも、短いテキスト型に保存されていれば文字列として比較されます。数値としての大小と違う順番になる場合は、元テーブルのデータ型とクエリで作った式を確認します。表示書式を数値のようにしても、保存されている型が変わるわけではありません。

数値と文字列で順番が変わるためデータ型を確認する図

商品コードの「001」「010」のように先頭ゼロが意味を持つ値を、単純に数値型へ変更してはいけません。数量や金額なら数値型、識別コードなら文字列として保持し、必要なら別に並べ替え用の数値を持つなど、業務上の意味に合わせて設計します。

既存データに空文字や文字が混在する場合、無条件にCLngなどで変換するとエラーになる可能性があります。まず変換できない値の一覧を確認し、欠損値の扱いを決めます。型を変える前に、リンク先や計算式への影響も確認してください。

日付は同じなのに顧客順にならない

売上日に時刻が含まれていると、見た目が同じ日付でも内部値が異なる場合があります。第1条件が日時なら、時刻の比較が先に行われるため、第2条件の顧客IDで思った順にまとまらないことがあります。

表示されていない時刻が日付の並び替えに影響することを説明する図

日単位でまとめたい場合は、元クエリに「売上日単位: DateValue([売上日])」などの日付だけを表す列を作る方法が候補です。Nullや元の型を確認したうえで、その列をレポートに含めて並べ替えます。時刻順が必要な業務なら、元の日時を残してその順序を使います。

Nullと表示値を区別する

Nullは未入力などを表す値で、0や空文字とは異なります。未入力を末尾にしたい場合は、クエリ側に「未入力順: IIf(IsNull([売上日]),1,0)」のような補助列を作り、その昇順を先に指定する方法が考えられます。その後に売上日と一意IDを指定します。

この補助列は元の日付を書き換えるものではありません。未入力を0日扱いにして値そのものを埋める方法とは区別してください。並べ替えのためのルールは、帳票利用者にも説明できる形にしておくと、空欄が最後に集まる理由を共有できます。

症状確認箇所対応
昇順を変えても変化がない上位のグループやソート条件の優先順位を確認
数字の順序が不自然文字列型やFormat式保存型とソート用列を見直す
同じ日付が顧客順にならない内部の時刻日単位の補助列を検討
同値の行だけ順が変わる最後のキー一意IDを追加
設定が元に戻る保存状況、起動時VBA順序を決める処理を調査
部署名が希望順にならない名称による文字列ソート表示順マスターを使う

帳票の並び順やグループ集計を見直す相談をする

基本操作で解決できる範囲は、まずコピーで試し、出力結果を確認しましょう。グループとソートが競合する、部署独自順が多い、出力ごとに順序が変わる場合は、専門家への相談もご検討ください。

既存Accessの状況整理から、クエリ・フォーム・レポートの改修までご相談いただけますのでお気兼ねなく下記へご相談下さい。


独自の業務順とVBAによる切り替え

「本社→支店→店舗」のように文字列の大小では表せない業務順は、名称とは別に表示順を持たせると管理しやすくなります。レポートごとに長い条件式を書くより、順番の変更を一か所で管理できる方法を検討します。

表示順をマスターに持つ

例えば部署マスターに部署ID、部署名、表示順を用意します。表示順を10、20、30のように間隔を空けると、途中に15を追加する運用がしやすくなります。これは設計例で、実際の番号体系は運用担当者に合わせて決めます。

部署などの独自の順番をマスターの表示順で管理する図

元データへマスターを結合する際は、同じ部署IDがマスターに複数ないかを確認します。重複があると、並べ替え以前に帳票の行が増えることがあります。また、未登録の部署を内部結合で除外してしまわないよう、必要に応じて左結合と未登録チェックを設計します。

同じ表示順がある場合にも、部署IDなどを次の条件にして順序を明示します。表示順がNullのデータを最後へ回す補助列を用意すると、マスター不足のデータを検知しつつ、帳票から消さずに扱いやすくなります。

VBAで並び順を指定する基本例

次は、グループ設定や別の並べ替え設定がない単純な売上一覧レポートを想定した例です。売上日と売上IDがレコードソースに含まれることを前提に、レポートモジュールの[開く時]イベントへ記述します。実機未検証のため、コピーでコンパイル・出力確認を行ってください。

Private Sub Report_Open(Cancel As Integer)
    Me.OrderBy = “[売上日] DESC, [売上ID] ASC”
    Me.OrderByOn = True
End Sub

OrderByは並べ替え条件を保存するプロパティ、OrderByOnはその適用を有効にするプロパティです。条件文字列を設定しただけで必ず適用されると考えず、両方を確認します。

グループ付きのレポートへこの例をそのまま貼り付け、すべての条件を上書きできると考えるのは適切ではありません。[グループ化と並べ替え]にある条件との関係を調べ、固定順はデザイン設定、動的な切替はコードなど、順番を決める場所を整理します。

利用者に切替を提供する場合

フォームに「日付の新しい順」「金額の高い順」などの選択肢を用意する場合は、許可した条件だけをコードへ対応付けます。利用者が任意のフィールド名やSQL断片を入力する設計にする必要はありません。選択した順序を帳票にも表示すると、配布後の解釈がそろいます。


印刷順を安定させる検証と運用

並べ替えの検証では、単に先頭が最新になったかを見るだけでは不十分です。同じ日付、同じ顧客、同額、Nullなど、条件が重なるデータを含めて確認します。並び順を修正した結果、小計やグループの改ページが変わっていないかも見ます。

レポート設定とVBA、データ型、PDFの順番を確認する図

確認データの作り方

テスト条件確認すること
異なる日付昇順・降順が目的どおり
同じ日付で異なる顧客第2条件が正しい
日付も顧客も同じ一意キーで固定される
同じ表示日付で異なる時刻日単位・時刻単位の意図が一致
空欄や未登録の部署決めた場所に出て、行が消えない
長いグループPDFの続きのページでも順序が正しい

検証後は、レポートを閉じて再度開き、同じ条件でPDFを出して比較します。別の入口から起動する業務アプリなら、その入口も試します。レポートの設定表、サンプルデータ、期待順序が残っていると、保守担当者が変わっても結果を再現しやすくなります。

並べ替えが遅いとき

大きなデータを毎回計算してから並べると、時間がかかる場合があります。不要な期間まで読み込んでいないか、複雑な式や結合がないかを先に確認します。並べ替え用の列に対するインデックスが候補になることもありますが、式や接続先によって効果は異なります。

速度だけを理由に、行順を手で書き換えた表を別に持つと、元データとの不一致が発生しやすくなります。まず抽出範囲、キー、クエリ設計を調べ、必要ならデータベース側の設計まで見直します。具体的な改善効果は実データで測定して判断してください。


まとめ

Accessレポートの並べ替えは、[グループ化と並べ替え]で条件と優先順位を決めるのが基本です。同じ値の行まで順序を確定するには、一意なIDを最後に指定します。順番が想定と違う場合は、グループ、データ型、時刻、VBAの設定を順に確認しましょう。

よくある質問

この記事では同じ操作を指します。Accessの画面では[並べ替え]と表示されるため、本文の操作名はそれに合わせています。

レポート側で順序を指定できます。元テーブルを表示したときの順番だけを、帳票の固定順として扱わないでください。

設定欄の上の条件が先です。同じ値の行について、次の条件が比較されます。グループの位置も合わせて確認します。

日付/時刻型のフィールドを降順にします。日単位の順序が目的なら、非表示の時刻が入っていないかも確認してください。

数字が文字列として保存されている可能性があります。型と用途を確認し、数量なら数値型、識別コードなら別のソート用列を検討します。

同値時の条件が不足している可能性があります。顧客ID、明細IDなどを追加し、最後まで順序を確定します。

顧客グループを作り、その内部で日付を並べ替えます。全顧客を混ぜた日付順とは結果が異なります。

氏名や名称の読み仮名フィールドを使う方法があります。表記揺れや未入力も確認し、同じ読みのときのID順まで決めます。

部署マスターなどへ表示順を持たせて並べ替える方法があります。未登録や同順位の扱いも決めておきます。

OrderByOnが有効か、グループや別のソート、起動時イベントが競合していないかを確認します。単純なレポートのコピーで切り分けると分かりやすくなります。

必ずしも表示する必要はありません。ただし、レポートが参照するデータにそのフィールドを含めておきます。

同じレポートと条件を使っているか、出力処理が別のレポートを開いていないかを確認します。入口、グループ、ソート、VBAを照合してください。

帳票の並び順やグループ集計を見直す相談をする

基本操作で解決できる範囲は、まずコピーで試し、出力結果を確認しましょう。グループとソートが競合する、部署独自順が多い、出力ごとに順序が変わる場合は、専門家への相談もご検討ください。

既存Accessの状況整理から、クエリ・フォーム・レポートの改修までご相談いただけますのでお気兼ねなく下記へご相談下さい。


参考情報

[1] Microsoft  グループ化と並べ替え
https://support.microsoft.com/en-us/access/create-a-grouped-or-summary-report

[2] Microsoft  レポート構造
https://support.microsoft.com/en-us/access/introduction-to-reports-in-access

[3] Microsoft  OrderByの設定
https://learn.microsoft.com/en-us/office/vba/api/access.report.orderby

[4] Microsoft  OrderByOnの有効化
https://learn.microsoft.com/en-us/office/vba/api/access.report.orderbyon

[5] Microsoft  レポートの設計
https://support.microsoft.com/en-us/access/guide-to-designing-reports

TOP