Excelの毎日の並べ替えをAccessフォームで自動化する方法

概要

この記事の結論
Accessでは、並べ替えの条件をクエリやフォームに保存し、画面を開くたびに同じ順序で一覧を表示できます。ただし新規入力の直後や他の人の追加分まで常に自動で並び直すわけではありません。保存と再クエリのタイミングも設計することが必要です。ExcelのSORT関数等で十分なケースも比較し、日付と一意なIDを使って安定した一覧を作ります。

この記事でわかること

  • 毎日の並べ替えを減らす方法を選ぶ
  • 並び順のルールとデータ型を決める
  • 並べ替えクエリを一覧フォームへつなぐ
  • 起動時とボタン操作で順序を統一する
  • 新しいレコードの保存後に再表示する

この記事の主な内容

  1. 毎日の並べ替えを減らす方法を選ぶ
  2. 並び順のルールとデータ型を決める
  3. 並べ替えクエリを一覧フォームへつなぐ
  4. 起動時とボタン操作で順序を統一する
  5. 新しいレコードの保存後に再表示する
  6. 順序がおかしいときの切り分け
  7. 共有運用と導入効果の確認
  8. よくある質問

想定読了時間:約15分~18分


毎日の並べ替えを減らす方法を選ぶ

まず「元データの行順を変えたい」のか「並べ替えた一覧を別に見たい」のかを決めます。Excelでは表の並べ替えに加え、対応するバージョンでSORTやSORTBYを使い、元の表から別の位置へ並べ替え結果を表示できます。Accessへ移さなくても、閲覧用の一覧を分けるだけで作業を減らせる場合があります。

例えば、毎朝日付順に並べ直して印刷するだけなら、Excelのテーブルを参照した一覧を先に試せます。一方、受注、作業進捗、顧客を関連付け、利用者ごとに同じルールで表示したいなら、Accessのクエリとフォームにまとめる利点が出ます。操作回数と保守の負担を一緒に比べましょう。

目的Excelでの選択肢Accessでの選択肢
一度だけ順序を変える通常の並べ替えデータシートの並べ替え
別の一覧を常時表示対応版のSORTやSORTBY保存した選択クエリ
日付順と金額順を切り替える複数の表示表や操作の定型化フォームのボタン
複数人が共通データを参照共有方法とシートビューを検討個別フォームと共有バックエンド

並べ替えは表示の仕方であり、データの正しさを保証する機能ではありません。日付が文字列のまま、同一注文が重複している、といった問題は先に直します。順序だけを整えても、元データの誤りが見えにくくなるだけの場合があります。

Accessの並べ替え方法の使い分けを示した図

並び順のルールとデータ型を決める

安定した一覧には、同じ値が並んだときの第2条件が必要です。例えば受注日が同じレコードを受注IDの昇順で並べれば、再表示のたびに同日の順番が変わることを避けられます。「古い順」だけでなく、同日の優先順位まで文章にしてから設定しましょう。

この記事ではT_受注に、受注ID、受注日、顧客名、金額を用意します。受注IDはオートナンバー型の主キー、受注日は日付/時刻型、顧客名は短いテキスト型、金額は通貨型とします。受注日は必須とし、未入力を別管理する業務なら、その表示位置も決めます。

受注ID受注日顧客名金額
1012026/10/20青葉工業12000
1022026/10/19さくら製作所8000
1032026/10/20青葉工業6000

受注日昇順、受注ID昇順の結果は、102→101→103です。この小さな例を検証用の期待値として残します。金額順なら6000→8000→12000になるはずです。数値が「1、10、2」のように並ぶ場合は、数値ではなく文字列として保存されていないかを調べます。

表示書式を変えても保存型は変わりません。また「五十音順」を期待する顧客一覧では、漢字名だけから読み順を一意に決められないため、読み仮名の項目を用意します。優先度が高・中・低なら、文字の順序に任せず、優先順位を表す数値を別に持たせる設計が分かりやすくなります。

Accessの日付とIDで順序を決めるを示した図

並べ替えクエリを一覧フォームへつなぐ

標準の並び順は選択クエリに保存します。テーブルを開いた画面で並べ替えた状態だけに頼らず、一覧が利用するクエリに条件を明示すると、フォームや出力先でもルールを追いやすくなります。ここでは受注日と受注IDの二つを昇順にします。

デザインビューで作る手順

1. [作成]から[クエリデザイン]を開き、T_受注を追加します。

2. 左から受注日、受注ID、顧客名、金額の順にフィールドを配置します。

3. 受注日と受注IDの[並べ替え]をどちらも昇順にします。左側が優先されます。

4. データシートビューへ切り替え、102→101→103の順を確認します。

5. Q_受注一覧として保存し、そのクエリを基にフォームを作ります。

6. F_受注一覧の[既定のビュー]を帳票フォームなど、複数件が見える形式へ設定します。

SELECT [受注ID], [受注日], [顧客名], [金額]
FROM [T_受注]
ORDER BY [受注日] ASC, [受注ID] ASC;

SQLビューでは、SELECTに並べた列の順序と、ORDER BYに並べた優先順位を別に指定できます。画面でIDを左に表示したい場合でも、受注日を第1条件にできます。デザインビューの操作とSQLの意味を一度照合すると、並べ替え条件を後から読み解きやすくなります。

フォームの[レコードソース]がQ_受注一覧になっているかも確認します。似た名前の別クエリやテーブルを参照していると、クエリを修正しても画面が変わりません。既存フォームを再利用する場合は、保存されたフォーム側の並び順も調べてください。

Accessのクエリから一覧フォームへを示した図

起動時とボタン操作で順序を統一する

フォームのOrderByは並び順の指定、OrderByOnはその指定を使うかどうかです。文字列を設定しただけで常に適用されると考えず、両方を明示します。[参考1]
毎回標準順へ戻したい場合は、フォームの読み込み時イベントで設定する方法が分かりやすくなります。

F_受注一覧をデザインビューで開き、フォーム全体を選択します。プロパティシートの[イベント]で[読み込み時]を[イベントプロシージャ]にし、右側のビルダーボタンから以下を記述します。コードは標準モジュールではなく、このフォームのモジュールへ置きます。

Private Sub Form_Load()
    Me.OrderBy = “[受注日] ASC, [受注ID] ASC”
    Me.OrderByOn = True
End Sub

Private Sub cmd金額順_Click()
    If Me.Dirty Then Me.Dirty = False
    Me.OrderBy = “[金額] DESC, [受注ID] ASC”
    Me.OrderByOn = True
End Sub

Private Sub cmd標準順_Click()
    If Me.Dirty Then Me.Dirty = False
    Me.OrderBy = “[受注日] ASC, [受注ID] ASC”
    Me.OrderByOn = True
End Sub

二つのボタンの[名前]をcmd金額順、cmd標準順にし、それぞれの[クリック時]へ対応する処理を設定します。Me.Dirtyは編集中かを表し、Falseを代入すると保存を試みます。必須項目のエラーで保存できない場合には、先に入力を直します。保存失敗を無視して並べ替えだけを続ける実装にはしません。

この例は「開くたびに標準順へ戻す」という仕様です。前回の並び順を利用者ごとに記憶したい場合は、別の保存設計が必要になります。日付順へ自動で戻す処理と、前回設定の復元処理を同時に入れると、どちらが優先か分からなくなるため、先に画面の仕様を決めてください。

Accessの起動時とボタンの並び順を示した図

Accessの教科書で並べ替え業務の改善を相談する

候補や集計条件が部署ごとに異なる、既存の画面を直せる担当者がいないなど、並べ替えの手順だけでは解決しない場合は、現在のExcelと業務の流れを整理して相談すると検討が進みます。Accessの教科書のお問い合わせで、対象データ、利用人数、困っている操作をお知らせください。


新しいレコードの保存後に再表示する

新規レコードが保存されても、入力欄に残ったままですぐには一覧の所定位置へ移動しない場合があります。新しいデータも含めて並べ直すには、レコードを保存した後、Requeryで元のクエリを再実行します。入力中に行が突然移動しないよう、「保存して再表示」など明示的なボタンにすると使いやすくなります。[参考2]

Private Sub cmd再表示_Click()
    On Error GoTo Err_Handler
    If Me.Dirty Then Me.Dirty = False
    Me.Requery
    Exit Sub
Err_Handler:
    MsgBox “再表示できません。入力内容を確認してください。” _
        & vbCrLf & Err.Description, vbExclamation
End Sub

再クエリすると、選択中の行や画面の位置が変わることがあります。現在のレコードへ戻す必要がある場合は、保存済みの受注IDを控え、再クエリ後にRecordsetClone.FindFirst等で同じIDを探して戻す処理を追加します。再クエリ前のBookmarkをそのまま再利用するのではなく、主キーで探し直す設計が基本です。

処理役割新規追加の取り込み
Requery元のクエリを再実行新規・削除を反映できる
Refresh現在のレコード集合の変更を反映新規・削除の反映には不十分
Recalc計算コントロールを再計算一覧の再取得ではない
Repaint画面を描き直すデータを再取得しない

タイマーで定期的に再クエリする場合は、未保存の入力がないか、利用者が読んでいる位置を変えてよいか、通信負荷が増えないかを考慮します。常時更新の必要がなければ、手動の再表示ボタンの方が動作を理解しやすく、運用も安定します。

Accessの保存してから再表示するを示した図

順序がおかしいときの切り分け

順序が意図と違うときは、元データ、クエリ、フォームの順に確認します。最初からVBAを書き直すと、別の場所に残った条件を見落とします。Q_受注一覧を単独で開いて正しいかを調べ、その後F_受注一覧のレコードソースとOrderByを比較してください。

症状考えられる原因確認と対処
1、10、2と並ぶ文字列として保存項目の意味を確認して数値型へ整理
同日の順序が変わる第2条件がない一意な受注IDを最後に追加
開き直すと順序が違う起動時の適用が不明確Form_Loadや起動時設定を統一
追加分だけ末尾に残る未保存または未再取得保存後にRequery
一部の行が見えない並べ替えでなくフィルターFilterと抽出条件を確認
漢字名が期待順でない読み仮名を使っていない読み用フィールドで並べ替え

空欄を最後にする要件も、担当者の感覚に任せず明示します。例えば通常の選択クエリで「ORDER BY IIf([受注日] Is Null,1,0), [受注日], [受注ID]」とすれば、Nullを最後へ分ける考え方になります。ただし式を使った並べ替えは索引の利用に影響することがあるため、大きなデータでは実測してください。

並べ替え対象を画面上の計算コントロール名で指定して動かない場合は、その値をクエリの演算フィールドとして作り、レコードソースへ含める方法を検討します。表示部品の名前と、元データのフィールド名を混同しないことが切り分けのポイントです。

Accessの並び順がおかしいときの確認を示した図

共有運用と導入効果の確認

複数人で使う場合は、利用者ごとのフォームと共有データを分けます。フロントエンドを各PCへ置けば、ある人の並び順切り替えが、別の人の画面操作と混ざりにくくなります。ただし同じレコードを同時に変更する競合は別問題であり、更新タイミングやロック方針を確認する必要があります。

本番導入前は、同日データ、金額の同値、Null、新規追加、削除、他の利用者の追加を使って試験します。保存できない入力があるときに再表示ボタンを押し、エラーを知らせて入力へ戻れるかも確認します。単に最初の一覧が並ぶだけでは、日常の操作を確認したことにはなりません。

改善効果は、並べ替え操作の回数だけでなく、対象行の探し直し、誤った一覧の出力、再表示後の迷いが減ったかで判断します。例えば1週間分の操作記録を導入前後で取り、対象件数も合わせて比較します。大量データで遅くなる場合は、表示列や抽出範囲、インデックス、接続先を順に見直します。

Accessの共有データと個別フォームを示した図

よくある質問

必ずその場で移動するとは限りません。フォームで追加した行が、保存後も入力位置に残る場合があります。新しいレコードを含めて条件を適用し直すには、保存してからRequeryを実行します。ただし入力中に行が動くと利用者が戸惑うため、再表示ボタンなどタイミングが分かる仕組みにするのがおすすめです。再クエリ後は現在行が変わることもあるので、同じ受注を続けて見たい画面では、主キーのIDを使って元の行へ戻す設計を追加します。

対応するExcelではSORTやSORTBYを使い、元データから並べ替えた結果を別の範囲へ表示できます。テーブルを参照すれば、行追加への追従も設計できます。ただし結果の表示範囲を直接編集する運用には向かず、元の入力表と閲覧用の一覧を区別する必要があります。日付順の一覧を見たいだけなら、まずExcelで試す価値があります。入力画面、複数テーブル、利用者別の操作、定型帳票をまとめたい場合に、Accessとの比較を進めるとよいでしょう。

日付だけで並べ替えると、同じ日付を持つ行の前後関係が決まらないためです。受注日を第1条件、受注IDなど一意な値を最後の条件に加えると、順序を明確にできます。納期と優先度を使う場合も、最後にIDを加える考え方は同じです。オートナンバーは受付順や欠番のない伝票番号そのものではないため、業務上の順番が別にあるなら、その項目を用意します。少数のサンプルで期待する順番を書き出し、実際の表示と照合してください。

新しい行や削除された行も含めて一覧を取り直したい場合はRequeryを使います。Refreshは主に現在表示しているレコード集合の変更を反映する処理で、新規追加や削除を含む一覧全体の再取得とは異なります。計算値だけならRecalc、画面の描き直しだけならRepaintという別の処理もあります。並べ替え後の表示を直したいときは、まず何が変わったのかを確認しましょう。Requeryの前には未保存データを保存し、再表示後の選択行の扱いも決めます。

数値のように見えても、短いテキスト型で保存されている可能性があります。数量や金額なら数値型や通貨型など、意味に合う型へ整理します。一方、商品コードの001や伝票の枝番などは、先頭のゼロを残す必要があり、単純に数値型へ変更すべきではありません。コードは文字列のまま保持し、必要なら並べ替え用の数値や表示順を別項目にします。型の変更はコピーで試し、変換できない値と先頭ゼロの欠落を確認してから本番へ反映してください。

各利用者へフロントエンドを配布し、共通のバックエンドへ接続する構成なら、フォームの並び順を利用者ごとに扱いやすくなります。同じフロントエンドファイルを全員が直接開く構成は避け、更新版の配布手順も整えます。ただし別々の並び順で見られることと、同じデータを同時に編集してよいことは別です。競合時の案内や保存手順を確認し、厳密な権限や監査が必要な場合は、SQL Serverなどのデータ基盤も含めて設計してください。

まとめ

Accessで毎日の並べ替えを減らすには、クエリへ標準順を保存し、フォームで適用タイミングを決めます。同順位には一意なIDを加え、新規入力後は保存してから再クエリします。Excelで一覧表示を改善できるケースと比較し、入力中の行移動や共同利用まで含めて設計すると、担当者が替わっても使いやすい一覧になります。

Accessの教科書で並べ替え業務の改善を相談する

候補や集計条件が部署ごとに異なる、既存の画面を直せる担当者がいないなど、並べ替えの手順だけでは解決しない場合は、現在のExcelと業務の流れを整理して相談すると検討が進みます。Accessの教科書のお問い合わせで、対象データ、利用人数、困っている操作をお知らせください。


関連記事

Accessクエリで並べ替えする方法

Accessテーブル作成前の正規化の手順

Accessプルダウンの作成方法

Accessクエリの演算フィールドの作り方

参考情報

[参考1]Microsoft Form.OrderBy
https://learn.microsoft.com/en-us/office/vba/api/access.form.orderby

[参考2]Microsoft Form.Requery
https://learn.microsoft.com/en-us/office/vba/api/access.form.requery

[参考3]Microsoft SORTBY 関数
https://support.microsoft.com/ja-jp/excel/functions/sortby-function

TOP