ACCESS VBA OrderByを使って並べ替える方法
ACCESSでフォームやレポートをVBAで並べ替えする際に利用するのが、OrderByプロパティです。
今回は、OrderByを使って並べ替える方法をご紹介します。
こんにちは。
はこにわガジェット (@hakoniwagadget) です。
ACCESSを使った売上管理、顧客管理などのデータベース開発を行っています。
ACCESSは基本機能だけでも十分便利ですが、VBAを使うことで格段に使いやすいデータベースを作成可能です。
この記事ではACCESSでのVBAの使い方をご紹介していきます。
OrderByプロパティ
ACCESSでフォームやレポートの並べ替えをVBAで制御する際に利用するのがOrderByプロパティです。
基本的にACCESSではフォームやレポートにはレコードソースとしてテーブルやクエリを設定します。
クエリでは並べ替え設定ができるため、クエリを元にしたフォームやレポートでもクエリの並べ替え設定を反映することが可能です。
しかし、ユーザーの操作に応じて動的に並べ替えを行うことはクエリだけではできません。
こうした場合にVBAでOrderByを使って並べ替え条件を変更することが可能です。
OrderByの基本的な構文は以下の通りです。
オブジェクト名.OrderBy = “並べ替え条件”
例えば、現在開いているフォームを顧客名の昇順で並べ替えをする場合は以下にように記述します。
Me.OrderBy = "顧客名 ASC"
Meは現在開いているオブジェクト、この場合はフォームを指しています。
Meキーワードについて詳しくは以下の記事をご覧ください。
そして右辺はテキスト型で並べ替え条件を設定します。
今回は顧客名フィールドで並べ替えるために「顧客名」と記載しています。
その後ろのASCは昇順を指しています。
昇順は数値型のフィールドなら小さい方が先、テキスト型のフィールドなら五十音順、日付であれば古い順で並べ替えされます。
逆に降順にしたい場合はDESCと記述します。
ASCは省略可能で、何も記述しなければ自動的にASCが適用されて昇順になることを覚えておきましょう。
フォームでの並べ替え
フォームで並べ替えを行う際には、下記のような帳票フォームを準備します。
帳票フォームとは、複数のレコードを一覧表示するフォームのことです。
帳票フォームを作成するには、フォームのデザインビューで「既定のビュー」を「帳票フォーム」にします。
デザインビューでフォーム全体を指定してプロパティシートで変更しましょう。
フォームの並べ替え設定はVBAで行います。
例えば今回は、フォームの顧客名ラベルを押したときに顧客名で並べ替える、という処理を作成します。
フォームのデザインビューで顧客名ラベルを選択し、クリック時イベントにイベントプロシージャを設定します。
実際に設定するプロシージャは以下の通りです。
Private Sub 顧客名_ラベル_Click()
Me.OrderBy = "顧客名 ASC"
Me.OrderByOn = True
End Sub
Me.OrderByに並べ替え条件を設定したうえで、Me.OrderByOnをTrueにして並べ替えを実行しています。
me.OderByOnを忘れると並べ替えが実行されませんので注意してください。
レポートでの並べ替え
レポートでの並べ替えも基本はフォームの場合と同じです。
レポートの場合はボタンを押すなどのイベントがありませんので、基本は開く時イベントで並べ替えを設定することになるでしょう。
Private Sub Report_Open(Cancel As Integer)
Me.OrderBy = "顧客名 ASC"
Me.OrderByOn = True
End Sub
上記のような設定でレポートの並べ替えが可能です。
ただし、レポートの場合は一点だけ注意が必要で、このようにVBAで設定しても、なぜかレポートの並び順が反映されない場合があります。
そうした場合のほとんどは、レポートの並べ替え条件が設定されているケースです。
ACCESSではMe.OrderByよりもレポートの並べ替え設定の方が優先されるという仕様があるためです。
レポートをデザインビューで見てみましょう。
上段のメニューから「グループ化と並べ替え」を選択します。
すると下段にグループ化と並べ替えウィンドウが表示されます。
ここでは処理日の昇順が設定されていますね。
上記のようにここに並べ替え条件が設定されていると、こちらが優先されてVBAで設定したMe.OrderByが適用されません。
そのため、右側のバツマークで並べ替え条件を削除しておきましょう。
以上、OrderByを使って並べ替える方法をご紹介しました。
ACCESSを使いこなせば、業務の効率化や自動化が実現できます。
しかし、自分でACCESSを学ぶには時間がない、難しそうで不安、という方も多いでしょう。
そんな時は、ACCESS開発歴20年以上、過去に100以上のACCESSデータベースを開発してきた私(@hakoniwagadget)にお任せください。
ACCESSの新規開発、既存のACCESSの修正、ACCESSの操作レッスンなど様々なサービスをご提供しています。
ご興味のある方は下記のサービス一覧をご覧ください。
最後までお読みいただき、ありがとうございました。