ACCESS フォームの結果を引き継いでレポートで並べ替えする方法

フォームの結果を引き継いでレポートで並べ替えする方法

ACCESSではフォームに表示された内容を印刷する際、レポート機能を利用します。

フォームには検索や並べ替えなどの様々な機能を持たせることが可能です。
そうなると、フォームで並べ替えをした結果をそのまま引き継いでレポートで表示したいですよね。

今回は、フォームの結果を引き継いでレポートで並べ替えする方法をご紹介します。


こんにちは。
はこにわガジェット (@hakoniwagadget) です。

ACCESSを使った売上管理、顧客管理などのデータベース開発を行っています。
ACCESSは使いこなすために少しスキルが必要なものの、うまく活用すればExcelよりも業務の効率化が図れます。
この記事ではACCESSで実際に作成したフォームやレポートを、その作成方法と共にご紹介していきます。

完成形

最初に完成形から示します。
以下は売上情報を検索するフォームです。
このフォームでは各項目のラベルをクリックすることで、ユーザーがフォーム上で自分が好きな項目で並べ替えできるようにしてあります。

現在、フォームのレコードは売上日の降順(新しいものが上)で並べ替えされている状態です。
この状態で下段にある「レポート表示」ボタンを押します。

すると下記の売上検索結果のレポートが表示されます。

こちらのレポートにはフォームと同じレコードが表示されていますが、並び順もフォームの設定と同じように売上日順になっています。

では次にフォームでの表示を、商品名での並べ替えに変更します。
「商品名」のラベルをクリックして並べ替えます。

この状態で再度レポート表示ボタンを押します。

すると、レポートも自動的に連動して商品名で並べ替えて表示されました。
今回はこの機能の作り方をご紹介します。

フォームの作成

まずはフォームを作成します。
今回のフォームをデザインビューで見ると以下になります。

検索フォームは「表形式」で作成しましょう。
すると一覧の形でレコードを表示可能です。

レポートの作成

次にレポートを作成します。
フォームと同じテーブルもしくはクエリをレコードソースにして作成します。

こちらもデザインビューで見ると以下のようになります。

VBAでのプログラミング

それでは、VBAでのプログラミングを行っていきます。

ラベルをクリックすると並べ替えする機能

まず最初にラベルをクリックすると並べ替えする機能を作成します。
フォームをデザインビューで開きます。

まずは商品名での並べ替えを作ります。
商品名ラベルを選択し、プロパティシートのイベントタブから、クリック時のイベントにイベントプロシージャを設定します。

プロパティシートが表示されない場合は、上段メニューのプロパティシートを押してください。

プロパティシート

プロパティシートのクリック時イベントの右側の…ボタンを押すとVBAのプロシージャが表示できます。
今回は以下のように設定します。

解説します。
最初にIf文で大きく2つに分岐させています。

OrderByはフォームの並べ替えを設定するプロパティです。
そのため、このIf文では現在のフォームの並べ替え設定が「商品名」にすでになっているか否かを判定しています。

記載を省略していますが「商品名」と書いているのは正しくは「商品名 ASC」で、商品名の昇順で並べ替えることを意味しています。
つまり、すでに商品名昇順で並べ替えされている状態であれば、という条件文です。

この場合の処理が以下です。

OrderByに「商品名 DESC」を入力します。
DESCは降順を示します。

そのため、すでに商品名の昇順で並べ替えされているときに商品名ラベルをクリックすると、商品名の降順で並べ替えされるようになります。
OrderByOnは並べ替えを実行するか否かを選択するプロパティですので、Trueにしています。

一方、条件式でElseの場合は商品名昇順以外の並べ替えが設定されていることになります。
その際は、

で商品名昇順で並べ替えをします。

これで、ラベルをクリックすると並べ替えする機能は完成です。
商品名以外のラベルにも一部を書き換えて設定可能です。

フォームの並び順を引き継いでレポートを表示する機能

次に、上記の方法でフォーム上で動的に変更した並び順をレポートにも反映する機能です。
こちらもフォームをデザインビューで開きます。

レポート表示ボタンのクリック時にイベントにイベントプロシージャを設定しましょう。
設定するプロシージャの内容は以下の通りです。

DoCmd.OpenReportでレポートを開きます。
DoCmd.OpenReportについて詳しくは以下の記事を参照ください。

OpenReportでレポートを開く方法

「test_売上検索結果」というレポートを開くように引数の設定をしていますが、特徴的なのは最後の引数であるOpenArgsにMe.OrderByを設定していることです。
OpenArgsはレポートを開く際にレポート側に渡すことができる変数です。

ここにMe.OrderBy、つまり現在のフォームの並べ替え設定情報を設定することで、レポートに並べ替え情報を渡しています。

次に、レポート側でもVBAの設定を行います。

レポート全体のイベントで「開く時」に以下のイベントプロシージャを設定します。

最初の条件式である

では、OpenArgsに文字列が入っているか否かを判定しています。
文字列がない、つまり並べ替え条件が設定されていない場合は処理をスキップするためです。

OpenArgsが設定されている場合は、

でMe.OrderByにOpenArgsの値を代入して並べ替え条件を設定することで、フォームの並べ替えをレポートにも反映させることができます。
これで、プロシージャの作成は完了です。

設定した並べ替え条件通りにレポートが表示されない場合の対処法

ここまで設定しても、なぜかレポートの並び順が反映されない場合があります。
そうした場合のほとんどは、レポートの並べ替え条件が設定されているケースです。

ACCESSではMe.OrderByよりもレポートの並べ替え設定の方が優先されるという仕様があるためです。

レポートをデザインビューで見てみましょう。
上段のメニューから「グループ化と並べ替え」を選択します。

グループ化と並べ替え

すると下段にグループ化と並べ替えウィンドウが表示されます。

上記のようにここに並べ替え条件が設定されていると、こちらが優先されてVBAで設定したMe.OrderByが適用されません。
そのため、右側のバツマークで並べ替え条件を削除しておきましょう。

以上、フォームの結果を引き継いでレポートで並べ替えする方法をご紹介しました。


ACCESSを使いこなせば、業務の効率化や自動化が実現できます。
しかし、自分でACCESSを学ぶには時間がない、難しそうで不安、という方も多いでしょう。

そんな時は、ACCESS開発歴20年以上、過去に100以上のACCESSデータベースを開発してきた私(@hakoniwagadget)にお任せください。

ACCESSの新規開発、既存のACCESSの修正、ACCESSの操作レッスンなど様々なサービスをご提供しています。
ご興味のある方は下記のサービス一覧をご覧ください。

サービス一覧

最後までお読みいただき、ありがとうございました。