Access プログラミングの概要

新しいデータベースを作成する場合、通常、テーブル、フォーム、レポートなどの複数のデータベース オブジェクトを作成することから始めます。最終的には、特定のプロセスを自動化したり、複数のデータベース オブジェクトを結びつけたりするために、プログラミングを追加する必要がある状況になります。この記事は、Access のプログラミング ツールを理解するのに役立ちます。

この記事の内容

プログラミングとは

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

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

マクロを理解する

VBA コードを理解する

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

プログラミングとは

Access におけるプログラミングとは、Access マクロまたは Visual Basic for Applications (VBA) コードを使用して、データベースに機能を追加するプロセスのことです。たとえば、フォームとレポートを作成し、そのフォームをクリックするとレポートを開くコマンド ボタンを追加するとします。この場合のプログラミングとは、マクロまたは VBA プロシージャを作成し、コマンド ボタンをクリックするとそのマクロまたはプロシージャが実行されるように、コマンド ボタンの "OnClick/クリック時" イベント プロパティを設定するプロセスになります。レポートを開くなどの簡単な操作については、コマンド ボタン ウィザードを使用してすべての作業を行うことができますが、ウィザードを無効にして自分でプログラミングすることもできます。

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

オブジェクト (フォームやレポートなど) およびコントロール (コマンド ボタンやテキスト ボックスなど) には、さまざまなイベント プロパティがあり、それらのイベント プロパティにマクロまたはプロシージャを割り当てることができます。各イベント プロパティは、マウスをクリックする、フォームを開く、テキスト ボックス内のデータを変更するなどの特定のイベントに関連付けられています。イベントは、システム イベントなどの Access 外部の要因によって発生させることも、他のイベントに割り当てられているマクロやプロシージャから発生させることもできます。多くのオブジェクトの複数のイベント プロパティに大量のマクロやプロシージャを追加すると、データベースが複雑になることがありますが、ほとんどの場合は、ごくわずかなプログラミングで期待どおりの結果が得られます。

ページの先頭へ

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

マクロ、VBA、またはその両方を使用するかは、主にデータベースの展開または配布をどのように計画するかによって決まります。たとえば、データベースが自分のコンピューターに格納されていて、お客様が単独で使用している場合、または VBA コードの使用に慣れている場合は、ほとんどのプログラミング タスクを実行するために、VBA を使用することに決定する可能性があります。ただし、ファイル サーバーでデータベースを検索して、他のユーザーとデータベースを共有しようとする場合、セキュリティ上の理由で VBA の使用を避ける必要がある場合があります。

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

データベースのセキュリティを確保するには、可能な限りマクロを使用し、マクロ アクションでは実行できない操作にのみ VBA プログラミングを使用します。さらに、データベースを信頼しなくても実行できるマクロ アクションのみを使用するようにする必要があります。このようにマクロ アクションの使用を制限すると、コンピューター上のデータや他のファイルに損害を与えるプログラミングがデータベースに含まれていないことをユーザーが確認できます。

マクロに関する考慮事項

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

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

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

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

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

    注:  AutoExec マクロは、他のマクロや VBA コードよりも先に実行されます。[Access のオプション] ダイアログ ボックスでスタートアップ フォームを指定し、そのフォームの "OnOpen/開く時" イベントまたは "OnLoad/読み込み時" イベントにマクロまたは VBA コードを割り当てていても、AutoExec マクロの方が先に実行されます。

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

VBA に関する考慮事項

次のいずれかを実行する場合は、マクロの代わりに VBA プログラミングを使用する必要があります。

  • 組み込み関数を使用するか、独自の関数を作成する場合    Access には、利子の支払いを計算する IPmt 関数などの多くの組み込み関数が用意されています。これらの組み込み関数を使用すると、複雑な式を作成することなく計算を実行できます。VBA コードを使用すると、独自の関数を作成して、式の機能を超える計算を実行したり、複雑な式を置き換えたりすることも可能です。さらに、作成した関数を式で使用して、複数のオブジェクトに共通の操作を適用することもできます。

  • オブジェクトを作成または操作する場合    ほとんどの場合、オブジェクトの作成や変更は、そのオブジェクトのデザイン ビューで実行するのが最も簡単です。ただし、状況によっては、オブジェクトの定義をコードで操作する必要があることがあります。VBA を使用すると、データベース自体に加え、データベース内のすべてのオブジェクトを操作できます。

  • システム レベルのアクションを実行する場合    マクロ内で "RunApp/アプリケーションの実行" アクションを実行すると、Access 内から別のプログラム (Microsoft Excel など) を起動することはできますが、マクロを使用して Access の外部でそれ以上の作業を実行することはできません。VBA を使用すると、コンピューターにファイルが存在するかどうかを確認したり、オートメーションまたは動的データ交換 (DDE) を使用して Excel などの他の Microsoft Windows ベースのプログラムと通信したり、Windows のダイナミック リンク ライブラリ (DLL) 内の関数を呼び出したりすることができます。

  • レコードを 1 つずつ操作する場合    VBA を使用すると、一連のレコードを 1 つずつ順番に参照し、レコードごとに操作を実行することができます。これに対して、マクロでは一連のレコード全体が同時に操作されます。

ページの先頭へ

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

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

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

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

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

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

    コマンド ボタン ウィザードが開始されます。

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

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

    • 文字列を表示する場合は、[文字列] の横のボックスで文字列を編集できます。

    • ピクチャを表示する場合は、ウィザードによってピクチャの候補がリスト ボックスに表示されます。別のピクチャを選択するには、[すべてのピクチャを表示する] チェック ボックスをオンにして Access に用意されているコマンド ボタンのピクチャをすべて表示するか、[参照] をクリックして別の場所に格納されているピクチャを選択します。

      [次へ] をクリックします。

  7. コマンド ボタンに付けるわかりやすい名前を入力します。この手順はオプションで、この名前はコマンド ボタンには表示されません。ただし、後でコマンド ボタンを参照する必要が生じたとき (フォーム上のコントロールのタブ オーダーを設定する場合など)、目的のコマンド ボタンを簡単に識別できるように、わかりやすい名前を入力することをお勧めします。たとえば、フォームを閉じるコマンド ボタンには、cmdClose または CommandClose という名前を付けます。

  8. [完了] をクリックします。

    Access でコマンド ボタンがフォームに配置されます。

  9. ウィザードによって "プログラミングされた" 結果を確認するには、必要に応じて次の手順を実行します。

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

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

    3. [クリック時] プロパティ ボックスの [ビルド] ボタン ボタン イメージ をクリックします。

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

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

ページの先頭へ

マクロを理解する

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

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

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

Access 2010 マクロ ビルダー

注: Access 2007 のマクロ ビルダーは、上記の図と異なるので注意してください。Access 2007 では、マクロ ビルダーはさまざまなマクロのアクションを一覧する一連の行と列でした。

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

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

ページの先頭へ

VBA コードを理解する

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

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

ページの先頭へ

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

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

注: Visual Basic for Applications (VBA) コードを Web データベースに追加できます。ただし、データベースを Web ブラウザーで実行している場合、そのコードを実行することはできません。Web データベースに VBA コードが含まれる場合は、コードを実行するには、最初に Access を使用して Web データベースを開く必要があります。Web データベースでプログラミング タスクを実行するには、代わりに Access のマクロを使用します。

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

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

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

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

  3. [フォーム マクロの変換] ダイアログ ボックスまたは [レポート マクロの変換] ダイアログ ボックスで、Access で生成される関数にエラー処理コードを追加するかどうかを選択します。また、マクロ内にコメントがある場合は、それらをコメントとして関数内に含めるかどうかも選択します。[変換] をクリックして続行します。

    フォームまたはレポートに対応するクラス モジュールが存在しない場合は、Access によって作成され、そのモジュールに対して、フォームまたはレポートに関連付けられたマクロごとにプロシージャが追加されます。また、Access では、フォームまたはレポートのイベント プロパティも、マクロの代わりに新しい VBA プロシージャを実行するように変更されます。

  4. VBA コードを表示して編集するには

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

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

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

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

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

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

  3. [マクロの変換] ダイアログ ボックスで、必要なオプションを選択し、[変換] をクリックします。

    Access でマクロが変換され、Visual Basic エディターが開かれます。

  4. VBA コードを表示して編集するには

    1. Visual Basic エディターにプロジェクト エクスプローラー ウィンドウが表示されていない場合は、[表示] メニューの [プロジェクト エクスプローラー] をクリックします。

    2. 作業中のデータベース名のツリーを展開します。

    3. [モジュール] の下のモジュール [変換するマクロ: <マクロ名>] をダブルクリックします。

      Visual Basic エディターでモジュールが開かれます。

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

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

  1. Visual Basic エディターを確認して関数名を覚えておきます。たとえば、MyMacro という名前のマクロを変換した場合、関数名は MyMacro() になります。

  2. Visual Basic エディターを閉じます。

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

  4. 関数を関連付けるコントロールまたはセクションをクリックします。

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

  6. プロパティ シートの [イベント] タブで、関数を関連付けるイベント プロパティ ボックスをクリックします。

  7. そのプロパティ ボックスに、等号 (=) の後に続けて関数名を入力します。たとえば、「=MyMacro()」と入力します。かっこを忘れないようにしてください。

  8. クイック アクセス ツール バーの [保存] をクリックして、フォームまたはレポートを保存します。

  9. ナビゲーション ウィンドウでフォームまたはレポートをダブルクリックし、コードが正しく動作するかどうかをテストして確認します。

これで、データベースに VBA コードを追加する基本的な手順の学習は終わりです。この記事では、作業を始めるための基本を説明しただけですが、プログラミング スキルの向上に役立つ参考書やオンライン リソースは豊富にあります。

ページの先頭へ

Office のスキルを磨く
トレーニングの探索
新機能を最初に入手
Office Insider に参加する

この情報は役に立ちましたか?

ご意見をいただきありがとうございます。

フィードバックをお寄せいただき、ありがとうございます。Office サポートの担当者におつなぎいたします。

×