派遣で働くエンジニアのスキルアップを応援するサイト

PRODUCED BY RECRUIT

第3話 マクロとVBAの違い【連載】実務で使えるAccessのコツ

f:id:itstaffing:20210702175107j:plain

データベース管理ソフトウェア、Accessを実務で使うときに「知っているとちょっと便利なコツ」について紹介するこのコラム。今回は意外と曖昧になりがちな、マクロとVBAの違いを解説します。特に間違えやすい、Excelのマクロ/VBAとの違い、説明できますか?あなたのAccess力アップに役立ちますように。

前回のコラムを見逃した方はこちらからご覧ください。
第2話 レイアウトで躓きやすいポイント

【筆者】今村 ゆうこさん
【筆者】今村 ゆうこさん
地方の非IT系企業に勤務し、業務アプリケーション開発を行うプログラマー。著書のイラストや図解も手掛けている。大学卒業後出身地へUターン就職し、2度の産休/育休を経て現在は小学生と保育園児の2人のこどもを抱えるワーキングマザー。主にVBAを使ってデータベースの情報を加工/展開するアプリを開発するほか、WordPressを使った個人ブログ(https://ateitexe.com/)で技術情報を発信している。著書に『Accessデータベース 本格作成入門』『Excel & Access連携 実践ガイド』(技術評論社)など。

  マクロ?VBA?曖昧なまま使ってる??    

このコラムをお読みの方ならば、マクロ/VBAという単語を耳にしたことはあると思います。しかし、具体的にその2つがどう違うかというと、少々難問かもしれません。意外と曖昧なまま使っている方も多いのではないでしょうか?

f:id:itstaffing:20210702174914j:plain

今回はこの疑問を、Accessを含めたMicrosoft Officeシリーズ全体の視点から解説します。

  マクロとVBAの違い    

まずは、言葉のおおまかな意味を捉えましょう。

マクロとは、ざっくり言うと「自動化された操作を制御する機能」のことです。これはMicrosoft Officeシリーズに限らず、さまざまなIT分野に存在する概念です。使われる場所によって少しずつ意味が異なるので、ここではおおまかな意味として「機能」と説明します。

そして、VBAとは「Visual Basic for Application というプログラム言語」のことで、Microsoft社が開発した汎用プログラミング言語であるVisual Basicを、Office製品向け(for Application)に派生させた言語です。この言語のおかげで、Officeアプリケーションでは他のセッティングをせずとも手軽にプログラミングが始められます。

Microsoft Officeシリーズにおいて、マクロとは自動化された機能を指す言葉であり、VBAはそれを実現するために使われている手段です。 ただし、本来VBAはプログラミング言語の1つですが、「VBAでプログラミングされた機能」のことも広義でVBAと呼ばれる傾向があるため、この2つの違いが曖昧になってしまうのではないかと思います。

  OfficeシリーズにおけるマクロとVBA    

それではここで、Officeの代表的なアプリケーションで「マクロ」がどのように使われているかを見てみましょう。以下の図はExcelを起動したところです。マクロは「開発」タブから扱うので、表示されていない場合は「ファイル」→「その他」→「オプション」から「リボンのユーザー設定」の「開発」にチェックを入れます。

f:id:itstaffing:20210702174958j:plain

まずは、「マクロの記録」を試してみましょう。マクロ名は後で実行するときの選択肢になるので、機能の内容を簡潔に表現すると良いでしょう。

f:id:itstaffing:20210702175002j:plain

すると、リボンの「マクロの記録」だった部分が「記録終了」に変化します。このボタンをクリックするまで、Excel上で行った操作は記録されます。選択範囲に罫線をつける操作をして、「記録終了」させます。

f:id:itstaffing:20210702175006j:plain

いま記録したマクロを実行してみましょう。いったん罫線をクリアして、「開発」タブの「マクロ」をクリック(またはAlt+F8キーを押下)し、さきほど設定したマクロ名を選択して「実行」ボタンをクリックします。

f:id:itstaffing:20210702175009j:plain

記録された操作が再現されました。

f:id:itstaffing:20210702175013j:plain

前述したように、この記録と実行はVBA言語で行われています。しかし「マクロの記録」では、ここまでの一連の流れのように、VBAの言語を一度も目にすることなく機能を作成、利用することができます。

それでは、今度は記録されたマクロの実体を見てみましょう。「開発」タブの「Visual Basic」をクリック(またはAlt+F11キーを押下)します。

f:id:itstaffing:20210702175018j:plain

すると、以下のような画面が開きます。これはVisual Basic Editorと呼ばれる、VBAでプログラミングを行うための画面です。

左上の領域(プロジェクトエクスプローラー)の「標準モジュール」内の「Module1」をダブルクリックすると、その中身が見られます。これが、さきほど「マクロの記録」によって自動記述されたVBAのコード(命令のための記述)です。さきほど実行されたマクロの実体はこのコードです。

f:id:itstaffing:20210702175023j:plain

なお、Microsoft Officeに限って言えば、マクロはVBA言語によって作成されているので根本は同じものなのですが、「マクロの記録」などで自動記録した機能を「マクロ」、VBE(VBA編集画面)にて自分でコードを打ち込んで作成した機能を「VBA」と呼ぶ傾向があるようです。

また、ほかの代表的なOfficeアプリケーションのなかでは、Wordには「マクロの記録」が搭載されていますが、PowerPointやOutlookには搭載されていません。

f:id:itstaffing:20210702175030j:plain

  AccessにおけるマクロとVBA    

ExcelなどではVBAを(直接入力また自動で)記述して作った機能がマクロとなりますが、Accessにおいては異なります。Accessでは、ほかのOfficeアプリケーションとは違った、独立した意味での「マクロ」が存在するのです。

Accessのリボンを見てみましょう。「開発」タブがなく、「作成」タブの中に「マクロ」があります。

f:id:itstaffing:20210702175034j:plain

クリックしてみると、以下のような「マクロツール」という画面が表示されます。この画面では、動作や対象を選択して組み立てて、それを実行できる機能を作ることができます。

f:id:itstaffing:20210702175038j:plain

Accessにおける「マクロ」とは、「選択・クリック・ドラッグなどのマウス操作で直感的に扱えるプログラミング方法」です。そして、その実体はVBA言語で制御されています。

これはちょうど、「クエリ」機能をクリック&ドラッグで組み立てることができる「デザインビュー」が、その実体はSQL言語で制御されている関係性に似ています(「SQLビュー」でコードを見ることができます)。

f:id:itstaffing:20210702175045j:plain

なお、マクロツールにはクエリのSQLビューのようなコードで表示させる画面はありませんが、作成したマクロをVBAコードに変換する機能を持っています。

f:id:itstaffing:20210702175051j:plain

  できることに違いはあるの?    

ここからはAccessにおいてのマクロとVBAの関係を前提にお話していきます。

マクロツールにてマウス操作で作成できる機能と、VBEでコードを直接入力してVBA言語で作成できる機能、この2つに差はあるのでしょうか?

マクロツールに用意されているアクションは、VBAを元に作られているので、VBAで作成できる大抵のことはマクロでも再現できます。

ただしマクロではAccess単体で実現できる範囲内にとどまり、VBAではアプリケーションの枠を超えた範囲まで制御することができます。たとえばAccessに書いたVBAでExcelを操作するなどのOffice間連携や、フォルダ作成・ファイル名変更などのOS上の操作も可能です。

  どちらのほうが難しいの?    

マクロツールでのプログラミングは、かんたんな操作ならVBAの書き方を知らなくても作ることができるので、敷居が低くチャレンジはしやすいでしょう。下図のように日本語で書かれているので、非プログラマの方でも「ここをこうしたらいいのかな」という検討がつきやすく、修正も比較的難易度が低くなります。

f:id:itstaffing:20210702175055j:plain

ただし、マクロにも文法が存在していて、その理解にはVBAの知識が必要です。

「この場合はこの動き(条件分岐)」「エラーが起きたらこの場所へジャンプ(エラートラップ)」などの複雑な動きをさせようと思うと下図のようになりますが、「VBAではこのように書く」という前提知識がないとマクロを組み立てるのは難しいと思われます。

f:id:itstaffing:20210702175101j:plain

VBAの文法を知っていればそれをマクロで再現することは可能ですが、結局は修正の際にもVBAの知識が必要になりますし、いったんVBAの文法を考えてマクロで書くという手間もプラスされます。したがって、ある程度以上複雑なマクロは、かえって難易度が高くなってしまう可能性があることも留意しておきましょう。

  どちらを使うべき?    

一部VBAにしかできないことを除けば、大抵のことはどちらも実装できるので、プログラミングを設定する規模と、その後のメンテナンスは誰がどの頻度で行うのかということを踏まえて選択するのが良いのでは、というのが筆者の私見です。

動作する要素が少なくて、非プログラマもメンテナンスする可能性があるのなら、マクロを使ったほうが作成も修正も難易度が低くなります。ある程度複雑な内容で、マクロを組み立てるのにVBAの知識が必要なレベルならば、最初からVBAで書いてしまったほうが後々のメンテナンスは楽かもしれません。

ただし、同じファイル内でこの機能はマクロ、この機能はVBA、と混在しているとそれはそれで全体像の把握が難しくなるので、チームで使いやすい形を相談して、そのルールや設計図をきちんと記録し、共有できる仕組みを作っておくのがよいでしょう。

次回はデータベースとVBAの接続手段であるADOとDAOの違いについて解説します。Accessではどちらも使用できるので、どちらを使うべきか迷う方は、ぜひ参考にしてください。

AccessのマクロとVBAの違いはわかりましたか。Excelをメインで使われている方だとどうしても間違えがちなので、しっかり押さえておきましょう。

リクルートスタッフィングでは、エンジニアのスキルアップを応援するため、本記事以外にも登録者限定の記事やイベントなどを配信しています。 リクルートスタッフィングでの就業に関わらず使えるものですので、これを機にお役立てください。

リクルートスタッフィング

第1話「イベント」を使いこなそう
第2話 レイアウトで躓きやすいポイント