Accessのマクロについての整理

[Access 2007 マクロの基本](https://support.office.com/ja-jp/article/access-2007-%E3%83%9E%E3%82%AF%E3%83%AD%E3%81%AE%E5%9F%BA%E6%9C%AC-a39c2a26-e745-4957-8d06-89e0b435aac3)
Access for Office 365, Access 2019, Access 2016, Access 2013, Access 2010, Access 2007

[英語の記事](https://support.office.com/en-us/article/a39c2a26-e745-4957-8d06-89e0b435aac3)

この記事では、Access データベース内のマクロについて説明し、頻繁に実行するタスクを自動化することで時間を節約する方法についても説明します。 ここでは、マクロの作成と使用の基礎について説明し、Access でのマクロの改善にも触れます。


###マクロとは

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

Access では、マクロを、実行するアクションのリストを作成して作成する単純なプログラミング言語と考えることができます。 マクロを作成するときは、各アクションをドロップダウン リストから選択し、アクションごとに必要な情報を入力します。 マクロを使用すると、Visual Basic for Applications (VBA) モジュールでコードを記述せずに、フォーム、レポート、コントロールに機能を追加できます。 マクロでは VBA で使用できるコマンドのサブセットが用意されており、マクロを作成する方が VBA コードを記述するより簡単だと感じるユーザーがほとんどです。
[マクロを使ったコマンドボタンの作成](https://hamachan.info/win10/access/macro.html)

#####ユーザーインターフェイスマクロ
たとえば、データ入力フォームの1つからレポートを直接開始するとします。 フォームにボタンを追加して、レポートを開くマクロを作成できます。 マクロは、スタンドアロンのマクロ (データベース内の個別のオブジェクト) であり、ボタンのonclickイベントに連結されます。または、マクロはボタン自体のonclickイベントに直接埋め込むことができます。 いずれの方法でも、ボタンをクリックすると、マクロが実行され、レポートが表示されます。 通常、これらの種類のマクロは、ユーザーインターフェイスマクロと呼ばれます。
#####Access2010から導入されたデータマクロ
Access 2010 は、データマクロの概念を導入する最初のバージョンです。 データマクロを使用すると、タスクを自動化して、テーブルに機能を直接追加できます。 データマクロとその操作は、テーブルに新しいレコードを追加するときなど、特定のテーブルイベントに関連付けられています。

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

IntelliSense を使用して式を入力する
[図は省略]

####注:
access 2010 以降では、access マクロを簡単に作成、変更、および共有できるように、マクロビルダーが再設計されています。 Access 2007 を使用している場合、マクロビルダーは、マクロのアクションと条件を定義する一連の行と列です。

マクロビルダーでユーザーインターフェイスマクロを表示するには、次の操作を行います。
<UL>
<li>[作成] タブの [マクロとコード] グループで [マクロ] をクリックします。</li>
</UL>

マクロビルダーでデータマクロを表示するには、次の操作を行います。
<UL>
<li>データシートビューで任意のテーブルを開きます。 [テーブル] タブの [ Before events and after events ] グループで、[変更前] または [挿入後] など、いずれかのイベントコマンドをクリックします。
</UL>

マクロビルダーの詳細と、ユーザーインターフェイスやデータマクロの作成とテストの方法については、この記事の最後にある「関連項目」を参照してください。


###Access のマクロ機能
#####新しい機能とマクロアクションが追加、セキュリティの強化
以前のバージョンの Access では、VBA コードを記述せずによく使う関数の多くは実行できませんでした。 Access の現在のバージョンでは、コードを必要としないようにするために、新しい機能とマクロアクションが追加されています。 これにより、データベースに機能を追加して、セキュリティを強化することが簡単になります。
[](https://www.accessdbstudy.net/entry/20141006/p1)
####埋め込みマクロ(Embedded macros)
フォーム、レポート、またはコントロールによって提供されるイベントのいずれかにマクロを埋め込むことができます。 埋め込みマクロは、ナビゲーションウィンドウには表示されません。作成されたフォーム、レポート、またはコントロールの一部になります。 埋め込みマクロを含むフォーム、レポート、またはコントロールのコピーを作成した場合、マクロはコピーにも表示されます。
[埋め込みマクロはVBAに簡単に変換できない](https://hamachan.info/win8/access/umekomi.html)

####セキュリティの強化
<font color="RED">マクロビルダーで [すべてのアクションを表示] ボタンが強調表示されていない場合、使用できるマクロアクションと RunCommand 引数は、信頼済み状態の実行を必要としないものだけです。 </Font>これらのアクションで作成されたマクロは、データベースが無効モードになっている場合でも実行されます (VBA が実行できない場合)。 信頼できるリストにないマクロアクションを含むデータベース、または VBA コードのあるデータベースには、信頼された状態を明示的に付与する必要があります。
[Accessのマクロで選択したいアクションが一覧にない場合の対処方法](https://dekiru.net/article/15610/)
[データマクロ もう一度学ぶMS-Access](https://www.accessdbstudy.net/entry/20141006/p1)

####エラー処理とデバッグ
Access provides macro actions, including OnError (similar to the "On Error" statement in VBA) and ClearMacroError, that allow you to perform specific actions when errors occur while your macro is running. In addition, the SingleStep macro action allows you to enter single-step mode at any point in your macro, so that you can observe how your macro works one action at a time.
アクセスは~~[ z0z_ _ _ ] ~~マクロアクションを提供します。これにより、マクロの実行中にエラーが発生すると、エラーが発生したときに特定の操作を実行できるようになります (VBA の "On Error" ステートメントに似ています)。 clearmacroerrorを使用します。 また、" SingleStep/シングルステップ" マクロアクションを使用すると、マクロの任意のポイントにシングルステップモードにして、マクロの動作を一度に1つずつ確認することができます。


####一時変数
3つのマクロアクション (settempvar、 removetempvar、およびRemoveAllTempVars) を使用すると、マクロで一時変数を作成して使うことができます。 これらは、条件式で使用して、マクロの実行を制御したり、レポートやフォームにデータを渡したり、値の一時的な格納場所を必要とするその他の目的で使用したりできます。 これらの一時変数は、vba でもアクセスできるため、vba モジュールとの間でデータをやり取りするために使用することもできます。



###マクロアクションの詳細について

マクロビルダーで作業しているときに、アクションまたは引数の詳細については、アクションまたは引数をクリックして、マクロビルダーウィンドウの右下隅にあるボックスの説明を参照してください。 また、各マクロアクションにはヘルプ記事が関連付けられています。 アクションの詳細については、アクションリストでアクションをクリックし、F1 キーを押します。

関連項目
[ユーザーインターフェイス (UI) マクロを作成する ](https://support.office.com/ja-jp/article/ユーザー-インターフェイス-ui-マクロを作成する-12590d3b-b326-4207-bfe5-19234f53f08b)
Access 2010 Later
Microsoft Access では、コマンド ボタン、テキスト ボックス、フォーム、レポートなどのユーザー インターフェイス (UI) オブジェクトに添付されるマクロを UI マクロと呼びます。 テーブルに添付されるデータ マクロとは区別されます。 (UI) マクロを使うのは、別のオブジェクトを開いたり、フィルターを適用したり、エクスポート操作を始めたりというような一連のアクションおよびその他多くのタスクを自動化するためです。 この記事では、新しく設計しなおされたマクロ ビルダーを紹介し、UI マクロの作成に関連する、基本的なタスクについて説明します。

概要
新機能
スタンドアロン マクロを作成する
埋め込みマクロを作成する
アクションをマクロに追加する
If、Else If、Else によってプログラム フローを制御する
サブマクロを作成する
関連アクションをグループにまとめる
マクロ アクションまたはブロックの展開と折りたたみ
マクロ アクションのコピーと貼り付け
他のユーザーとマクロを共有する
マクロを実行する
マクロをデバッグする
マクロを VBA コードに変換する

[データマクロを作成する ](https://support.office.com/ja-jp/article/データ-マクロを作成する-b1b94bca-4f17-47ad-a66d-f296ef834200)
Access のデータマクロを使用すると、データの追加、更新、削除など、テーブル内で発生するイベントにロジックを追加することができます。 これらは、Microsoft SQL Server の "triggers" に似ています。 この記事では、データマクロを作成してデバッグする方法について説明します。

データマクロについて
イベントドリブンデータマクロを作成する
名前付きデータマクロを作成する
データマクロを管理する
デバッグデータマクロ

[データベースを開いたときに実行されるマクロを作成 ](https://support.office.com/ja-jp/article/データベースを開いたときに実行されるマクロを作成する-98ba1508-dcc6-4e0f-9698-a4755e548124)
Access 2007 Later
Access データベースを起動するたびに特定の一連のアクションを実行するには、AutoExec マクロを作成できます。たとえば、アプリケーション ウィンドウを自動的に最大化し、ナビゲーション ウィンドウをロックして、特定のレポートを開く場合があります。
AutoExec マクロは、単に AutoExec という名前が付けられたマクロです。データベースの起動時、Access で他のマクロや VBA コードが実行される前に、AutoExec マクロが実行されます。
AutoExec マクロおよび他の起動オプションを省略するには、Shift キーを押しながらデータベースを起動します。
注: この記事は、Access Web データベースまたは Access Web アプリには適用されません。
[シングルステップモードを使用してマクロをテストする ](https://support.office.com/ja-jp/article/ステップ-スルーでマクロを修正する-a0812fbc-c311-4160-ad10-2b3439926316)
ステップ スルーでマクロを修正する
※リンクとタイトルが違う
Test a macro by using Single Step mode
Single Stepモードを使うことによってマクロをテストする
~~zsk (z0z_ ) を使用すると、マクロの流れと、各z2z_の結果を確認して、エラーの原因となった操作や望ましくない結果を返すアクションを分離することができます。~~
シングルステップモードを使用するとマクロの流れ(Flow)と各アクションごとの結果を確認し、エラーの原因となった操作や望ましくない結果を返すアクションを修正、削除(isolate)することができます
<UL>
<li>マクロの実行中にシングルステップを開始するには、ctrl キーを押しながら BREAK キーを押します。
<li>マクロの特定のポイントでシングルステップを開始するには、シングルステップを開始する位置で "SingleStep/シングルステップ"マクロアクションをマクロに追加します。 次の手順を使用して、マクロに " SingleStep/シングルステップ" マクロアクションを追加します。
</UL>
[Access プログラミングの概要](https://support.office.com/ja-jp/article/access-%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%81%AE%E6%A6%82%E8%A6%81-92eb616b-3204-4121-9277-70649e33be4f#bmlearnaboutmacros)

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

プログラミングとは
マクロを使用する場合と VBA コードを使用する場合
コマンド ボタン ウィザードを使用して共通のプログラミング タスクを実行する
マクロを理解する
VBA コードを理解する
マクロを VBA コードに変換する

#マクロ一覧(リンク)
[ Access2010マクロ アクション一覧 ](https://www.helpforest.com/access/ac_list/ac100002.htm)
マクロは
<UL>
<li>ウィンドウ管理
<li>システム コマンド(終了など)
<li>データのインポート/エクスポート
<li>データベース オブジェクト(コピー、追加)
<li>データ入力操作
<li>ユーザー インターフェイス コマンド(ツールバー、ナビゲーションの操作)
</UL>
という分類になっている
##公式の分類
[Access マクロのアクション (Access の開発者用リファレンス)](https://docs.microsoft.com/ja-jp/office/client-developer/access/desktop-database-reference/access-macro-actions-access-developer-reference)
<UL>
<li>プログラム フロー
<UL>
<li>If...Then...Else マクロ ブロック
<li>Comment マクロ ステートメント
<li>Group マクロ ステートメント
<li>Submacro マクロ ステートメント
</UL>
<li>データ入力操作
<UL>
<li>DeleteRecord マクロ アクション
</UL>
<li>データのインポート/エクスポート
<UL>
<li>[RunSavedImportExport マクロ アクション](https://docs.microsoft.com/ja-jp/office/client-developer/access/desktop-database-reference/runsavedimportexport-macro-action)
<li>EMailDatabaseObject マクロ アクション
<li>ExportWithFormatting マクロ アクション
<li>ImportExportData マクロ アクション
<li>ImportExportSpreadsheet マクロ アクション
<li>ImportExportText マクロ アクション
<li>ImportSharePointList マクロ アクション
</UL>
<li>データベース オブジェクト
<UL>
<li>CopyObject マクロ アクション
<li>DeleteObject マクロ アクション
<li>GoToControl マクロ アクション
<li>GoToPage マクロ アクション
<li>GoToRecord マクロ アクション
<li>OpenForm マクロ アクション
<li>OpenReport マクロ アクション
<li>OpenTable マクロ アクション
<li>RenameObject マクロ アクション
<li>SaveObject マクロ アクション
<li>SelectObject マクロ アクション
<li>SetProperty マクロ アクション
<li>RepaintObject マクロ アクション
<li>SetValue マクロ アクション
</UL>
<li>フィルター/クエリ/検索
<UL>
<li>ApplyFilter マクロ アクション
<li>FindNextRecord マクロ アクション
<li>FindRecord マクロ アクション
<li>OpenQuery マクロ アクション
<li>RefreshRecord マクロ アクション
<li>Requery マクロ アクション
<li>RunSQL マクロ アクション(ただしこのアクションは256文字までしか実行できない。他方Docmd.RunSQLは32000字まで可能。)
<li>SearchForRecord マクロ アクション
<li>SetFilter マクロ アクション
<li>SetOrderBy マクロ アクション
<li>ShowAllRecords マクロ アクション
</UL>
<li>マクロ コマンド
<UL>
<li>CancelEvent マクロ アクション
<li>Echo マクロ アクション
<li>ClearMacroError マクロ アクション
<li>OnError マクロ アクション
<li>OpenVisualBasicModule マクロ アクション
<li>RemoveAllTempVars マクロ アクション
<li>RemoveTempVar マクロ アクション
<li>RunCode マクロ アクション
<li>RunDataMacro マクロ アクション
<li>RunMacro マクロ アクション
<li>RunMenuCommand マクロ アクション
<li>SetLocalVar マクロ アクション
<li>SetTempVar マクロ アクション
<li>SingleStep マクロ アクション
<li>StartNewWorkflow マクロ アクション
<li>StopAllMacros マクロ アクション
<li>StopMacro マクロ アクション
<li>WorkflowTasks マクロ アクション
</UL>
<li>System コマンド
<UL>
<li>Beep マクロ アクション
<li>CloseDatabase マクロ アクション
<li>DisplayHourglassPointer マクロ アクション
<li>PrintOut マクロ アクション
<li>QuitAccess マクロ アクション
<li>RunApplication マクロ アクション
<li>SendKeys マクロ アクション
<li>SetWarnings マクロ アクション
</UL>
<li>ユーザー インターフェイス コマンド
<UL>
<li>AddMenu マクロ アクション
<li>BrowseTo マクロ アクション
<li>LockNavigationPane マクロ アクション
<li>MessageBox マクロ アクション
<li>NavigateTo マクロ アクション
<li>SetDisplayedCategories マクロ アクション
<li>SetMenuItem マクロ アクション
<li>ShowToolbar マクロ アクション
</UL>
<li>ウィンドウ管理
<UL>
<li>CloseWindow マクロ アクション
<li>MaximizeWindow マクロ アクション
<li>MoveAndSizeWindow マクロ アクション
<li>MinimizeWindow マクロ アクション
<li>RestoreWindow マクロ アクション
</UL>
<li>データ ブロック
<UL>
<li>CreateRecord データ ブロック
<li>EditRecord データ ブロック
<li>ForEachRecord データ ブロック
<li>LookupRecord データ ブロック
</UL>
<li>データ アクション
<UL>
<li>CancelRecordChange マクロ アクション
<li>ClearMacroError マクロ アクション
<li>ExitForEachRecord マクロ アクション
<li>LogEvent マクロ アクション
<li>OnError マクロ アクション
<li>RaiseError マクロ アクション
<li>SendEmail マクロ アクション
<li>SetField マクロ アクション
<li>SetLocalVar マクロ アクション
<li>SetReturnVar マクロ アクション
<li>DeleteRecord マクロ アクション
</UL>
<li>ADP のオブジェクト
<UL>
<li>CopyDatabaseFile マクロ アクション
<li>OpenDiagram マクロ アクション
<li>OpenFunction マクロ アクション
<li>OpenStoredProcedure マクロ アクション
<li>OpenView マクロ アクション
<li>TransferSQLDatabase マクロ アクション
</UL>
<li>データ マクロ イベント
<UL>
<li>After Delete マクロ イベント
<li>After Insert マクロ イベント
<li>After Update マクロ イベント
<li>Before Change マクロ イベント
<li>Before Delete マクロ イベント
</UL>
</UL>