【MS Access】Accessをバッチ処理として作成し定例作業を自動化する方法

MS Access
スポンサーリンク

今回は非ITエンジニアの人達に向けて、マイクロソフトのAccessを「バッチプログラム」として利用して、日次のデータ更新作業などを自動化する方法を紹介します。

 

はじめに

「自分はIT技術者ではないけど、Accessを使って簡単なデータ抽出をしたり、特定の条件を元にしたデータの一括更新処理はできます。でも、プログラミングはわかりません。」

といった人は世の中にも結構居ると思います。
ITに関する専門的な知識が無くても、IT技術に対する素養があったり、生まれもって器用な人だったりすると、Accessは習得する技術的な敷居が低いこともあり、ガッツリと使いこなしている人も多く見かけます。

Accessは非常に優秀なツールであり、データの抽出から、本格的な業務システムの開発まで何でもこなせますが、今回は「バッチ」プログラムとしても使ってしまいましょうという趣旨の記事です。

 

そもそも「バッチ」とは何?

まずは「バッチ」という言葉の意味を定義しておきましょう。

Wikipediaから引用してみます。

バッチ処理
バッチ処理(バッチしょり)とは、コンピュータで1つの流れのプログラム群(ジョブ)を順次に実行すること。
あらかじめ定めた処理を一度に行うことを示すコンピュータ用語。
反対語は対話処理・インタラクティブ処理またはリアルタイム処理。
Wikipedia -バッチ処理-

だそうです。

この説明だと難しいと感じる人も居るかもしれないので、一つ例を提示すると、例えば銀行のATMでお金を引き出したり入金したりすると、当然即座にその口座の現金残高に反映されます。
これは「リアルタイム処理」、または「オンライン処理」と呼ばれ、バッチ処理ではありません。

次に、ATMでお金の支払いのために、自身の口座から別の銀行の口座に振り込みをしたとします。
その場合は振込先の銀行口座にはリアルタイムで入金されず、一定時間ごとだったり、夜間の日次処理のタイミングで、自身の振り込みデータだけでなく、他の振り込み対象のデータと併せてまとめて対象の銀行に振り込みデータの送信処理が行われます。
これが「バッチ処理」です。

振り込み依頼の一件毎に、リアルタイムで他の銀行の口座に振り込みデータを送信して振り込み処理を実施すると、銀行間のデータ連携が都度発生し、システムが複雑になり、銀行のシステムで重要視される信頼性の担保が難しくなります。
また、ATMは全国で使われており、膨大なデータを秒単位で何千件、何万件と処理しています。
そういった忙しいシステムでは、振り込み処理は定時の決まったタイミングで一斉に実施した方が効率的です。
※上記のATMにおける処理の例は、あくまでリアルタイム処理とバッチ処理を説明する為のイメージであり、実際にこのように処理が作られているとは限らないです。ご了承ください。

さて、銀行の様な大規模なシステムだけではなく、様々な業務を自動化、効率化するためにバッチ処理は利用されております。
例えば皆さまが実施されている定例的な事務処理もバッチ処理と相性が良い場合が多く、日々実施されている様々な定例作業はバッチ処理として自動化が可能です。

Accessを使ったバッチ処理の実装概要

Accessでバッチ処理を作る場合の実装方法は色々ありますが、今回はAccessの機能の一つの「マクロ」を利用した実装方法を紹介します。

Accessの「マクロ」は、VBAでのプログラミングをしなくても、予めマクロ機能内で用意されている処理を組み合わせることで、複数の処理をまとめて実行でき、その一連の処理を「マクロ」に登録し、後から自由に呼び出せるようにするための機能です。
この「マクロ」ですが、マクロの名称を「AutoExec」と指定して登録すると、このマクロは必ずAccessファイルを開いた際に自動的に呼び出されて実行されるようになります。※詳しい解説は後述します。

もし貴方が例えば日次の定例作業としてAccessを立ち上げて、予め作ってある更新クエリなどを実行するような業務を受け持っているなら、それはバッチ処理として自動化が可能です。

今回はこの「AutoExec」の自動実行機能を利用したバッチ処理の実装方法を紹介していきます。

新規マクロの作成

まずはAccess内で新しく「マクロ」作成画面を表示します。

「すべてのアクションを表示」を有効化

マクロ作成画面上部のデザインタブ内にある「すべてのアクションを表示」をクリックして非表示になっている一部のアクションも表示されるようにします。

アクションカタログ内の「メッセージの設定」をマクロのアクションに追加

画面右側の「アクションカタログ」内の「システムコマンド」項目のなかに「メッセージの設定」というアクションをダブルクリックしてマクロのアクションに追加します。

「メッセージの設定」を非表示に設定

マクロのアクションに「メッセージの設定」が追加されます。
「メッセージの表示」を「いいえ」にします。

このアクションを最初に実行させることで、通常更新クエリや追加クエリなどの実行するとAccessがポップアップで通知してくる確認メッセージが表示されなくなります。
バッチ処理を実装する場合、データ更新系のクエリを動かす度に確認メッセージが表示されてしまうと、その都度処理が止まり、OKボタンを人が押下しないと処理が先に進まなくなる状態をこのアクションを入れることで防ぎます。

 

「クエリを開く」のアクションを追加

「新しいアクションの追加」を開き、表示されるアクションのリストから、今回は「クエリを開く」を選択します。
クエリ名、ビュー、データモードの設定欄が表示される為、クエリ名には今回自動実行させたい更新クエリを選択します。
ビュー及びデータモードは初期値の値で結構です。

今回の記事では更新クエリを自動実行させる想定で手順を紹介していますが、ここは貴方が自動化したい作業に合わせて自由にアクションを設定してください。

「メッセージの設定」を表示に設定

再度画面右側の「アクションカタログ」から「メッセージの設定」をダブルクリックしてアクションに追加します。
アクションに追加したら、「メッセージの表示」を「はい」にします。

このメッセージ設定を「いいえ」にしてマクロを実行した場合、メッセージの通知設定はマクロの実行が終了した後も効果が持続し、そのAccessファイルを閉じるまで設定は元には戻りません。
よって、Accessで作成するアプリケーションの作法として、マクロで実装した一連の処理が終わるタイミングでいったん非表示にしたメッセージの通知を元の有効な状態に戻します。
今回の処理でいえば、この後Access自体を終了する処理を入れる為、実際にはメッセージ設定を元に戻す必要はないのですが、念のため戻す処理を加えておきます。
作法なので・・・。

 

「Accessの終了」処理をアクションに追加

「新しいアクションの追加」を開き、「Accessの終了」を選択します。

スクリーンショットの画像では「オプション」を「すべて保存」を指定していますが、例えばマクロで実装するアクションのなかに、ローカルテーブルを更新する処理や新しくクエリやテーブルを作る処理などを実装した場合で、そのデータ更新結果やクエリやテーブルの作成結果がAccessファイルに保存されて困る場合は、オプションは「すべて保存」ではなく、「保存せずに終了」を指定します。
「確認」を指定すると、毎回変更があれば確認メッセージが表示されて処理がそこで停止する為、「確認」を指定してはいけません。

「AutoExec」という名前でマクロを保存

マクロを保存します。
マクロの名前を指定するダイアログが表示される為、「AutoExec」という名前を設定します。

当記事の冒頭でも軽く記載しましたが、ここのマクロ名の設定が今回の記事の重要な箇所になります。
通常、マクロを作成して保存する際に指定するマクロの名称は作成者が自由に設定できます。
ただ、今回指定した「AutoExec」という名前だけは特別な意味合いを持ち、この名前で登録されているマクロが対象のAccessファイルに存在していた場合、そのAccessファイルが開かれた際に「AutoExec」という名称のマクロを自動的に実行するように組み込まれています。
この「AutoExec」という名称は、見やすくするために大文字と小文字を混在させて指定していますが、全て大文字、又はすべて小文字でも同じように動作します。

 

これでAccessファイルを開くと自動的にマクロで指定した一連の処理が実行されて、最後に自動的にAccessを終了するところまでの処理が実装できました。



リンクテーブル接続時の認証を回避

今回の実装例のマクロでは。更新などのアクションクエリを実行するケースを想定して手順を紹介しましたが、もし更新対象のテーブルがリンクテーブルで接続しているテーブルだった場合、そのリンクテーブルに更新を掛ける際に、通常は必ず接続先データベースのユーザー名、パスワードの入力を求めるポップアップが表示され、その入力待ちで処理が止まってしまいます。

それではバッチプログラムとして処理の自動化にならない為、そのリンクテーブルの認証を回避する方法も紹介しておきます。

「パスワードの保存」にチェックと付けてリンクテーブル再作成

更新クエリ等で使用している作成済みのリンクテーブルをいったん削除します。
その後、リンクテーブルを再度設定するのですが、その際に「パスワードの保存」にチェックと付けた状態でリンクするテーブルを選択します。

パスワードの保存してリンクテーブルを作成しようとすると以下の様な警告メッセージが表示されますが、そのまま「パスワードの保存」を選択することで、対象のリンクテーブルについては永続的にパスワード等の認証上はAccessファイル内に保存され、そのリンクテーブルを開いたり更新を掛ける際にユーザー名、パスワードの入力を求められることは無くなります。

リンクテーブルへ接続する際のパスワードなどの認証情報を保存した場合、「システムオブジェクト」と呼ばれる、Access内のシステムテーブルにその情報は保存され、Accessの設定を変更し、システムオブジェクトの表示を有効化することで、システムオブジェクトの各システムテーブルを開くことで誰でも参照することができます。
よって、パスワードを保存するとAccessに詳しい人であれば誰でもパスワードを知ることができてしまうので注意してください。

 

作成したAccessのタスクスケジューラ登録

上記手順で作成したAccessのファイルは、結局誰かがファイルを開いてくれなければ、自動実行した処理は動きません。
このファイルを手動で開くのであれば、それは全自動ではなく、半自動になってしまいます。

よって、今回のAccessファイルを決められた時間やタイミングで自動的に開いてくれる仕組みが必要です。

そこで、Windows標準機能として備わっている「タスクスケジューラ」に今回のAccessファイルを登録します。
タスクスケジューラ」の使い方については当ブログで紹介しておりますため、以下の記事を参考に登録してみてください。

【業務自動化】タスクスケジューラを登録して定例作業を自動起動させよう
皆さんはパソコンで色々な事務作業をされていると思いますが、その作業のなかには、毎日朝一に実施したり、週に一回決まったタイ...

 

AutoExecマクロを設定したAccessファイルを変更するために開く方法

今回作成したAccessファイルは普通に開くとマクロが動き、自動終了するため、いざ処理を変更しようと思っても、これまでのようにはできなくなります。

マクロの自動実行を止めてファイルを開くには、キーボードのシフトキーを押しながらエンターキーを押下してファイルを開いてください。

 

最後に

Accessは元々多機能で便利なツールですが、今回紹介したように、「ファイルオープン時の自動実行処理」+「タスクスケジューラ」を組み合わせることで、今まで手作業で実施していた作業を自動化することが可能です。

Accessのもう一つの活用方法として参考にしていただければ幸いです。

今回も読んでいただきましてありがとうございました。
それでは皆さまごきげんよう。