Access プログラミングの概要

適用先
Access for Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

新しいデータベースを作成するときは、通常、テーブル、フォーム、レポートなどのデータベース オブジェクトを作成することから始めます。 ある時点で、プロセスを自動化し、それらのオブジェクトを接続するためのプログラミングを追加する必要がある場合があります。 この記事では、Access のプログラミング ツールについて説明します。

この記事の内容

プログラミングとは

Access でプログラミングとは、Access マクロまたは Visual Basic for Applications (VBA) コードを使ってデータベースに機能を追加することを意味します。 たとえば、フォームとレポートを作成し、フォームにコマンド ボタンを追加すると、レポートを選択するとそのフォームが開きます。 その場合は、マクロまたは VBA プロシージャを作成し、コマンド ボタンの OnClick イベント プロパティを設定すると、コマンド ボタンがマクロまたはプロシージャを実行します。 レポートを開くなどの簡単な操作の場合は、コマンド ボタン ウィザードを使用して作業を行うことも、ウィザードをオフにして自分でプログラムすることもできます。

多くの Microsoft Office プログラムでは、 VBA コードを指すために "マクロ" という用語を使用します。 Access では、"マクロ" という用語はマクロ ビルダーを使ってアセンブルするマクロ アクションの名前付きコレクションを指すため、Access ユーザーを混乱させることがあります。 Access マクロ アクションは、 VBA で使用できるコマンドのサブセットのみを表します。 マクロ ビルダーのインターフェイスは Visual Basic Editor よりも構造化が進んでいるため、 VBA コードを学習しなくても、コントロールやオブジェクトにプログラミングを追加できます。 Access ヘルプ記事では、Access マクロはマクロと呼ばれます。 VBA コードは、コード、関数、またはプロシージャ VBA 呼ばれます。 VBA コードは、個々のフォームまたはレポートの一部であり、通常はそれらのオブジェクトに対するコードのみを含むクラス モジュールと、特定のオブジェクトに関連付けられておらず、通常はデータベース全体で使用できるグローバル コードを含むモジュールに格納されます。

フォームやレポートなどのオブジェクト、コマンド ボタンやテキスト ボックスなどのコントロールには、マクロやプロシージャをアタッチできるイベント プロパティがあります。 各イベント プロパティは、マウスのクリック、フォームの開き方、テキスト ボックスのデータの変更など、特定のイベントに関連付けられます。 イベントは、システム イベントなどの Access の外部の要因や、他のイベントにアタッチされているマクロやプロシージャによってトリガーされることもあります。 多数のオブジェクトの多数のイベント プロパティに多数のマクロまたはプロシージャを追加すると、データベースが複雑になる可能性があります。 ただし、ほとんどの場合は、ごくわずかなプログラミングで必要な結果を得ることができます。

ページの先頭へ

マクロを使用する場合と VBA コードを使用する場合

マクロ、 VBA、またはその両方を使用するかどうかは、主に、データベースをどのように展開または配布するかによって決まります。 たとえば、データベースが自分のコンピューターに保存され、自分が唯一のユーザーであり、 VBA コードを使用することに慣れている場合、ほとんどのプログラミング タスクに VBA を使用することを決定する場合があります。 ただし、ファイル サーバーの他のユーザーとデータベースを共有する場合は、セキュリティ上の理由から VBA を使用しないことをお勧めします。

マクロまたは VBA コードを使用するかどうかは、セキュリティと必要な機能という 2 つの懸念事項に基づいて決定します。 VBA を使用すると、データを侵害したり、コンピューター上のファイルに損害を与えるコードを作成したりできるため、セキュリティが重要です。 他のユーザーが作成したデータベースを使用する場合は、データベースが信頼できるソースからのものであることがわかっている場合にのみ、 VBA コードを有効にしてください。 他のユーザーが使用するデータベースを作成するときは、ユーザーがデータベースを明示的に信頼する必要があるプログラミング ツールを含めないようにします。 この要件を回避するための一般的な手法は、このセクションの後半で説明します。

データベースをセキュリティで保護するために、可能な場合はマクロを使用し、マクロ アクションを使用して実行できない操作に対してのみ VBA 使用してください。 また、データベースを信頼する必要がないマクロ アクションのみを使用してから実行してください。 このようにマクロ アクションを制限することで、ユーザーは、コンピューター上のデータや他のファイルに害を及ぼす可能性のあるプログラミングがデータベース内にないことを確信できます。

マクロに関する考慮事項

Access には、以前のバージョンの Access よりも強力なマクロを作成できる多数のマクロ アクションが含まれています。 たとえば、マクロ アクションを使用してグローバルな一時変数を作成および使用したり、新しいエラー処理マクロ アクションを使用して正しくエラーを処理したりできます。 以前のバージョンの Access では、これらの機能は VBA でのみ使用できました。 オブジェクトまたはコントロールのイベント プロパティにマクロを直接埋め込むこともできます。 埋め込みマクロはオブジェクトまたはコントロールの一部になり、オブジェクトまたはコントロールが移動またはコピーされた場合に、オブジェクトと共に残ります。

マクロを使用すると、フォームの開閉、レポートの実行などの多くのプログラミング タスクの処理が簡単になります。 覚えておく必要のある構文がほとんどないため、作成したフォームやレポートなどのデータベース オブジェクトをすばやく連携できます。 各アクションの引数は、マクロ ビルダー内に表示されます。

マクロによって実現するセキュリティ強化や使いやすさ以外にも、次のようなタスクを実行するマクロを使用する必要があります。

  • 1 つまたは一連のアクションをキーに割り当てる場合。 これには、 AutoKeys という名前のマクロ グループを作成する必要があります。

  • データベースが最初に開かれるときに、1 つまたは一連のアクションを実行する場合。 これには、 AutoExec という名前のマクロを作成する必要があります。

    [Access オプション] ダイアログ ボックスでスタートアップ フォームを指定し、そのフォームのOnOpenイベントまたはOnLoad イベントにマクロまたはVBA コードをアタッチした場合でも、AutoExec マクロは他のマクロやVBA コードより前に実行されます。

マクロを作成する方法の詳細については、「 マクロについて」を参照してください。

VBA に関する考慮事項

次のいずれかの操作を行う場合は、マクロではなく VBA を使用します。

  • 組み込み関数を使用するか、独自の関数を作成します。 Access には、利息の支払いを計算する IPmt など、多くの組み込み関数が含まれています。 これらの関数を使用すると、複雑な式を作成せずに計算を実行できます。 VBA を使用すると、独自の関数を作成して、式の機能を超える計算を実行したり、複雑な式を置き換えたりすることもできます。 さらに、作成した関数を式で使用して、複数のオブジェクトに共通の操作を適用することもできます。
  • オブジェクトを作成または操作します。 ほとんどの場合、オブジェクトの作成と変更は、そのオブジェクトのデザイン ビューで行うのが最も簡単です。 ただし、場合によっては、コード内のオブジェクトの定義を操作したい場合があります。 VBA を使用すると、データベース自体だけでなく、データベース内のすべてのオブジェクトを操作できます。
  • システム レベルの操作を実行します。 マクロで RunApp アクションを実行して、Access 内から Microsoft Excel などの別のプログラムを実行することはできますが、マクロを使用して Access の外部で他の多くの操作を行うことはできません。 VBA を使用すると、コンピューターにファイルが存在するかどうかをチェックしたり、オートメーションまたは動的データ交換 (DDE) を使用して Excel などの他の Microsoft Windows ベースのプログラムと通信したり、Windows ダイナミック リンク ライブラリ (DLLs) で関数を呼び出したりすることができます。
  • レコードを 1 つずつ操作します。 VBA を使用すると、一度に 1 つのレコードのセットをステップ実行し、各レコードに対して操作を実行できます。 これに対し、マクロはレコード セット全体を一度に処理します。

ページの先頭へ

コマンド ボタン ウィザードを使用して共通のプログラミング タスクを実行する

フォームにコマンド ボタンを追加する場合は、コマンド ボタン ウィザードを使用してプログラミングを開始すると便利です。 ウィザードは、特定のタスクを実行するコマンド ボタンを作成するのに役立ちます。 ウィザードは、Access (.accdb) ファイルで、コマンド ボタンの OnClick プロパティに埋め込まれたマクロを作成します。 .mdb ファイルまたは .adp ファイルでは、埋め込みマクロはこれらのファイル形式では使用できないため、ウィザードによってVBAコードが作成されます。 いずれの場合も、必要に応じてマクロまたは VBA コードを変更または拡張できます。

  1. ナビゲーション ウィンドウで、コマンド ボタンを追加するフォームを右クリックし、[デザイン ビュー] をクリックします。

  2. [ フォーム デザイン ] タブで、下矢印をクリックして コントロール ギャラリーを表示し、[ コントロール ウィザードを使用する ] が選択されていることを確認します。

  3. [ フォーム デザイン] タブの コントロール ギャラリーで、[ ボタン] をクリックします。

  4. フォーム デザイン グリッドで、コマンド ボタンを配置する場所をクリックします。 コマンド ボタン ウィザードが開始されます。

  5. ウィザードの最初のページで、[カテゴリ] の一覧の各カテゴリをクリックし、ウィザードでコマンド ボタンから実行するようにプログラムで設定できるアクションを確認します。 [アクション] の一覧で目的のアクションを選択し、[次へ] をクリックします。

  6. コマンド ボタンに文字列とピクチャのどちらを表示するかに応じて、[文字列] または [ピクチャ] をクリックします。

    • 文字列を表示する場合は、[文字列] の横のボックスで文字列を編集できます。
    • ピクチャを表示する場合は、ウィザードによってピクチャの候補がリスト ボックスに表示されます。 別のピクチャを選択するには、[すべてのピクチャを表示する] チェック ボックスをオンにして Access に用意されているコマンド ボタンのピクチャをすべて表示するか、[参照] をクリックして別の場所に格納されているピクチャを選択します。 [次へ] をクリックします。
  7. コマンド ボタンに付けるわかりやすい名前を入力します。 この手順は省略可能であり、この名前はコマンド ボタンには表示されません。 ただし、わかりやすい名前を入力すると、フォーム上のコントロールのタブ順序を設定するときなど、後でコマンド ボタンを参照する必要があるときに、コマンド ボタンを区別しやすくなります。 たとえば、コマンド ボタンでフォームが閉じる場合は、フォームに cmdCloseCommandClose という名前を付けることができます。

  8. [完了] をクリックします。 Access でコマンド ボタンがフォームに配置されます。

  9. ウィザードで何がプログラムされたかを確認するには、次のオプションの手順に従います。

    1. プロパティ シートが表示されていない場合は、 F4 キーを押して表示します。

    2. プロパティ シートの [イベント] タブをクリックします。

    3. [ クリック時 ] プロパティ ボックスで、[ ビルド ] ボタンをクリックします。

      Access でマクロ ビルダーが起動され、ウィザードによって作成されたマクロが表示されます。 必要に応じてマクロを編集できます。 詳細については、「 マクロについて」を参照してください。 終了したら、[ マクロ デザイン ] タブの [ 閉じる ] グループで [閉じる ] をクリックしてマクロ ビルダーを閉じます。 Access で変更を保存してプロパティを更新するかどうかを確認するメッセージが表示されたら、変更を保存する場合は [はい] を、変更を破棄する場合は [いいえ] をクリックします。

  10. [ フォーム デザイン] タブの [表示 ] グループで、[ 表示] をクリックし、[ フォーム ビュー] をクリックします。 新しいコマンド ボタンをクリックして、期待どおりに動作することを確認します。

ページの先頭へ

マクロを理解する

マクロは、タスクを自動化したり、フォーム、レポート、コントロールに機能を追加したりできるツールです。 たとえば、フォームにコマンド ボタンを追加する場合、ボタンが選択されるたびに実行するコマンドを含むマクロに、ボタンの OnClick イベント プロパティを関連付けることができます。

Access マクロは、実行するアクションの一覧を作成してコードを作成する、簡易プログラミング言語であると見なすとわかりやすくなります。 マクロを作成するときは、各アクションをドロップダウン リストから選択し、アクションごとに必要な情報を入力します。 マクロを使用すると、 VBA モジュールにコードを記述しなくても、フォーム、レポート、およびコントロールに機能を追加できます。 マクロは、 VBA で使用できるコマンドのサブセットを提供するものであり、ほとんどの人は、 VBA コードを記述するよりもマクロを作成する方が簡単だと感じています。

マクロは、次の図に示すマクロ ビルダーを使用して作成します。

マクロ ビルダーを表示するには

  • [作成] タブの [マクロとコード] グループで [マクロ] をクリックします。

ページの先頭へ

VBA コードを理解する

マクロと同様に、 VBA を使用すると、オートメーションやその他の機能を Access アプリケーションに追加できます。 サード パーティのコントロールを使用して VBA を拡張したり、特定のニーズに合わせて独自の関数とプロシージャを記述したりできます。

VBA の簡単な使い方は、最初に Access マクロを作成してから、VBA コードに変換することです。 この手順については、「 マクロを VBA コードに変換する」を参照してください。 この機能では、マクロ内で同等の操作を実行する新しい VBA モジュールを作成します。 また、プロシージャの変更に取りかかりやすいように、Visual Basic エディターも開かれます。 Visual Basic Editor で作業しているときは、キーワードをクリックし、F1 キーを押すと、開発者ヘルプにアクセスし、各キーワード (keyword) の詳細を確認できます。 その後、Access の開発者用ヘルプを参照して、目的のプログラミング タスクの実行に役立つ新しいコマンドを探すことができます。

ページの先頭へ

マクロを VBA コードに変換する

Access を使用して、マクロを VBA モジュールまたはクラス モジュールに自動的に変換できます。 フォームまたはレポートに割り当てられているマクロは、個別のオブジェクトとして存在するマクロでも、埋め込みマクロでも変換できます。 特定のフォームまたはレポートに添付されていないグローバル マクロも変換できます。

フォームまたはレポートに割り当てられているマクロを変換する

この処理では、フォームやレポート、またはそのコントロールによって参照または埋め込まれたマクロを VBA に変換し、フォームやレポートのクラス モジュールに VBA コードを追加します。 クラス モジュールはフォームまたはレポートの一部となり、そのフォームやレポートを移動またはコピーすると一緒に移動します。

  1. ナビゲーション ウィンドウでフォームまたはレポートを右クリックし、[ デザイン ビュー] をクリックします。

  2. [ フォーム デザイン ] タブの [ツール ] グループで、[ フォームのマクロを Visual Basic に変換 ] または [ レポートのマクロを Visual Basic に変換] をクリックします。

  3. [ フォーム マクロの変換 ] ダイアログ ボックスまたは [レポート マクロの変換 ] ダイアログ ボックスで、生成する関数にエラー処理コードを追加するかどうかを選択します。 マクロにコメントが含まれる場合は、それらのコメントを関数に含めるかどうかも選択します。 [変換] をクリックして続行します。 フォームまたはレポートに対応するクラス モジュールが存在しない場合は、Access によって作成され、そのモジュールに対して、フォームまたはレポートに関連付けられたマクロごとにプロシージャが追加されます。 また、フォームまたはレポートのイベント プロパティも変更されるため、マクロの代わりに新しい VBA プロシージャが実行されます。

  4. VBA コードを表示および編集するには:

    1. フォームまたはレポートがデザイン ビューで開いたまま、プロパティ シートが表示されていない場合は、 F4 キーを押して表示します。

    2. プロパティ シートの [ イベント ] タブで、 [Event Procedure]表示されているプロパティ ボックス内をクリックし、[ ビルド] ボタンをクリックします。 特定のコントロールのイベント プロパティを表示するには、そのコントロールをクリックして選択します。 フォームまたはレポート全体のイベント プロパティを表示するには、プロパティ シートの上部にあるドロップダウン リストで [フォーム] または [レポート] をクリックします。

      Access によって Visual Basic エディターが開かれ、そのクラス モジュール内のイベント プロシージャが表示されます。 上下にスクロールすると、同じクラス モジュール内の他のプロシージャを表示できます。

グローバル マクロを変換する

  1. ナビゲーション ウィンドウで、変換するマクロを右クリックして、[デザイン ビュー] をクリックします。

  2. [ マクロのデザイン ] タブの [ツール ] グループで、[ マクロを Visual Basic に変換] をクリックします。

  3. [マクロの変換] ダイアログ ボックスで、必要なオプションを選択し、[変換] をクリックします。 Access でマクロが変換され、Visual Basic エディターが開かれます。

  4. VBA コードを表示および編集するには:

    1. Visual Basic エディターにプロジェクト エクスプローラー ウィンドウが表示されていない場合は、[表示] メニューの [プロジェクト エクスプローラー] をクリックします。
    2. 作業中のデータベース名のツリーを展開します。
    3. [ モジュール] で、 Converted Macro-<macro name> モジュールをダブルクリックします。 Visual Basic エディターでモジュールが開かれます。

VBA 関数をイベント プロパティに割り当てる

グローバル マクロを VBA に変換すると、 VBA コードは標準モジュールに配置されます。 クラス モジュールと異なり、標準モジュールはフォームやレポートの一部にはなりません。 通常は、フォーム、レポート、またはコントロールのイベント プロパティに関数を関連付けて、的確なタイミングと場所でコードが実行されるようにします。 これを行うには、 VBA コードをクラス モジュールにコピーしてからイベント プロパティに関連付けるか、次の手順を使用してイベント プロパティから標準モジュールに特別な呼び出しを行います。

  1. Visual Basic エディターを確認して関数名を覚えておきます。 たとえば、 MyMacro という名前のマクロを変換した場合、関数名は MyMacro() になります。
  2. Visual Basic エディターを閉じます。
  3. ナビゲーション ウィンドウで、関数を関連付けるフォームまたはレポートを右クリックし、[ デザイン ビュー] をクリックします。
  4. 関数を関連付けるコントロールまたはセクションをクリックします。
  5. プロパティ シートが表示されていない場合は、 F4 キーを押して表示します。
  6. プロパティ シートの [イベント] タブで、関数を関連付けるイベント プロパティ ボックスをクリックします。
  7. プロパティ ボックスに、等号 (=) の後に関数名を入力します (例: =MyMacro())。 かっこを必ず含めます。
  8. クイック アクセス ツール バーの [保存] をクリックして、フォームまたはレポートを保存します。
  9. ナビゲーション ウィンドウでフォームまたはレポートをダブルクリックし、コードが正しく動作するかどうかをテストして確認します。

これで、 VBA コードをデータベースに追加するための基本的な手順がわかりました。 この記事では、作業を開始する方法の基本についてのみ説明します。 多くの優れた参考書やオンライン リソースは、プログラミング スキルを身につけるのに役立ちます。

関連項目

ユーザー インターフェイス (UI) マクロを作成する

キーボード ショートカットを使用して Access マクロを実行する

起動イベントをマクロで自動化する

データベースを開いたときに実行されるマクロを作成する

データベース オブジェクトのイベントの順序

ページの先頭へ