マクロ(VBA)とはどんな機能か?活用の流れや手順、使い方まとめ
AさんAさん

Excelの作業を関数などで自分なりに効率化していますが、まだまだ時間がかかっています・・・。
もっと効率化に役立つ機能はありますか?

森田森田

関数よりも広い範囲を自動化したいなら「マクロ」を検討してみても良いですね。
マクロがどういうものか、順番に解説していきますね。

はじめに

本題に入る前に、この記事がおすすめな方を挙げてみます。

  • 実務でExcelを用いる事務作業が多い方
  • Excelの作業を関数以上に効率化したい方
  • マクロやVBAがどういうものか知りたい方

マクロとは

マクロとは、設定した一連の作業手順を自動化できる機能のことです。

いわば、Excelの標準機能にない、「ユーザー独自の機能をつくることができる機能」とも言えます。

このマクロを設定する際、VBAVisual Basic Application)というプログラミング言語でコーディングが必要です。

この言語でコーディングすることで、はじめてExcel側で何をどの順番に実行すれば良いかを認識できます。

ちなみに、マクロとVBAの関係性を簡単な例でまとめたものが以下の内容です。

以上を踏まえて簡単に整理すると、マクロは「作業名」、VBAExcel向けの「作業手順書」みたいなものだとイメージすれば理解しやすいのではないでしょうか?

マクロを活用する上でVBAの習得が必要なため、敷居は若干高いものの、他機能と比べて自動化できる範囲が段違いに広いです。

  • 制御できる対象が関数やパワークエリより多い
    →セルやテーブル以外にも、シートやブック、ファイル、フォルダー、他アプリケーション(OutlookPowerPoint等)等も制御可能
  • 複数機能をシームレスに実行できる
    →ファイルを開く、コピペ、印刷等の基本操作はもちろん、関数・ピボットテーブル・パワークエリ等の他機能も実行可能
  • 条件分岐やループ(反復処理)も設定できる

よって、大体のPCに標準実装されているExcelだけでも、マクロを活用することでPCを使う事務作業の大部分は自動化が可能となります。

VBAの主要な構成要素

マクロを活用する上で、VBAの主要な構成要素が3つあることをまず覚えましょう。
この3要素の他、マクロ名・変数・コメントという基本要素も図解には載せています。(変数やコメントは別記事で詳細を解説予定です)

この3要素は他のプログラミングでも基本となりますが、それぞれ詳細は以下の通りです。

1.オブジェクト操作

オブジェクト操作とは、「何に」、「どんな操作を行うか」ということです。

人向けの作業手順書と同じく、指示が明確でないとExcelは作業できません。

よって、作業対象と作業内容を明確に記述するといったイメージですね。

なお、「何」に該当するのがオブジェクトです。

ワークシート上でオブジェクトと言えば図形やグラフといったものを指しますが、ここで言う「オブジェクト」はもっと広い概念で、VBAで制御可能な対象すべてを指します。

参考として、ワークシート上だけでどれだけオブジェクトがあるかを見てみましょう。
(以下はあくまでも抜粋したもの)

これらのオブジェクトに対し、値や書式を設定する、あるいは選択やコピペといった任意の操作を指定するイメージですね。

このオブジェクト操作がVBAの基本となります。

2.制御構文(条件分岐、ループ)

単純に決まった手順を順番に行えば済む作業であれば良いですが、特定の条件で作業手順が変わる場合も実務では起こり得ますね。

人であれば、自分で状況判断する、あるいは分からなければ指示を仰ぐ等をしてくれますが、Excelの自動化を行う上では、こうした作業の条件を予め明記しておく必要があります。

そうした作業条件を明記するための文法が、制御構文です。

制御構文は大きく2種類あります。

  • 条件分岐:「もし~ならA、それ以外はB」といった条件に応じた作業を設定できる
  • ループ(反復処理):「~まではAという作業を繰り返す」といった反復条件を設定できる

この制御構文を覚えることで、より多くの作業を自動化できます。

3.関数

ワークシート上の関数とは別にVBA用の関数(VBA関数)も用意されています。

関数の効果自体はワークシート上の関数と同じで、引数を設定することで戻り値を取得し、その結果を作業手順に組み込むことが可能です。

以下のようなややこしい側面もあるので、その辺りは別記事で解説しようと思います。

  • 同じ効果だけどワークシート上とVBAで関数名が違う
    例)現在日付を返す関数はワークシートだと「TODAY」、VBAだと「Date」等
  • VBA内でワークシート関数を使うこともできる
    (「WorksheetFunction」を使う)

マクロを使う際の作業ステップ

マクロを使う際、大枠のイメージは次の5ステップで設定していきます。

では、各ステップの詳細を順番に解説していきましょう。

STEP0】リボン「開発」タブを表示

マクロを使う前準備として、デフォルトでは非表示になっているリボンの「開発」タブを表示させましょう。

これは1回設定すれば、今後はどのExcelブックを開いても表示されるようになります。

参考記事

リボン「開発」タブの表示設定の詳細を知りたい方は以下の記事をご参照ください。

STEP1】作業手順を整理

VBAに慣れない段階では、実際にコードを記述する前に、どんな作業手順になるかを整理することをおすすめします。

手順を箇条書きで構わないので、メモ帳でもExcelのワークシートでも良いので箇条書きに作業手順をまとめましょう。

ポイントはオブジェクトと操作内容の指示を明確にすることです。

たとえば、Sheet1A1セルの値をSheet2A1セルにコピペするといった動作であれば、以下のようなイメージです。

  1. Sheet1A1セルをコピーする
  2. Sheet2A1セルへペーストする

なお、各手順をVBAで実際に表現すると、上記の手順の数が変動する可能性はありますが繰り返しコーディングするにつれて、手順に必要な要素や粒度が身に着きます。

ちなみに、上記のシンプルな手順でも書き方によってコードが14行と幅が出ます。

STEP2VBEVisual Basic Editor)を起動

ここから実際にVBAを記述していきますが、VBAを記述するための専用のエディターがあります。

それがVBEVisual Basic Editor)」です。

VBEはリボン「開発」タブの左端にある「Visual Basic」コマンドをクリックすると起動できます。

このVBEの画面構成でまず覚えておくべきは、以下の5つの領域です。

A.メニューバー

ワークシートにおけるリボンのようなもので、作業の種類別に操作メニューがまとまっているところです。

クリックすると、配下のコマンドが表示されます。

B.ツールバー

Excel画面の切り替えや上書き保存、マクロの実行や停止等、よく使うコマンドが表示されているところです。

C.プロジェクトエクスプローラー

現在開かれているブック内のシート等のマクロの記述先が一覧で記載されているところです。

ちなみに、マクロの記述先のことを「モジュール」と言います。

D.プロパティウィンドウ

プロジェクトエクスプローラーで現在選択している項目の詳細情報を確認、あるいは変更するところです。

E.コードウィンドウ

実際にVBAのコードを記述するところです。

プロジェクトエクスプローラーで任意の場所をダブルクリックするか、新規で挿入するかして、コードの記述先を選択してから、このウィンドウ上でコードを記述していきます。

基本的にコードウィンドウがVBEで利用頻度がもっとも高い場所になります。

STEP3】任意のモジュールのコードを表示

コードを記述するための場所(モジュール)を選択しましょう。

モジュールはいろいろ種類がありますが、一般的には「標準モジュール」を挿入することが多いです。

以下が標準モジュールの挿入方法です。

その他のモジュールについては別記事にまとめる予定です。

STEP4】作業手順をVBAのコードで記述

ここでようやくコーディング作業を行います。

具体的には、STEP1でまとめた作業順をVBAのコードに変換していくイメージです。

なお、最初はどう変換すれば分からない部分が多いと思います。

その場合は大きく2つの調べ方があります。

  1. ネット検索する
  2. 「マクロの記録」を活用する

1つ目の方法は、検索サイトやYouTube等でキーワード検索を行えば、たいていのことは解決できます。

たとえば、コピーをどう記述すれば良いかを知りたいなら、「VBA コピー」と検索すれば大量に記事がHITしますので、上から順番に見ていけば良いですね。
自分にとって分かりやすい記事を書くサイトが見つかれば、お気に入り登録を行い、そのサイト内で検索するのもアリです。

ただ、検索キーワードが思いつかない場合は2つ目の「マクロの記録」を活用すると良いです。

この機能は、Excelワークシート上の実際の操作を記録し、VBAのコードに変換してくれます。

イメージとしては、カメラやビデオの録画機能に近しいです。

録画開始ボタンを押してから音声や画像が録音されるように、「マクロの記録」ボタンを押してから行なった操作がVBAのコードとして記録されます。
(以下はセルの文字を太字にする方法を調べたいケース)

記録した内容は自動で挿入された標準モジュールの中に記述されます。

このコードを見ることで、やりたい作業をどう記述すれば良いか分かるため、詳細を知りたい場合はそれをキーワードにしてネット検索すると良いですね。

なお、もしかすると「マクロの記録」という機能があるなら、VBAをわざわざコードで記述する必要はないのではないかと思った方もいるもしれません。

実は、この「マクロの記録」はあくまでも作業したことの記録のみのため、再現性のある手順にする上ではコードに過不足があることが大半ですし、何よりVBAの要素の中でオブジェクト操作しか記録できません。

よって、あくまでも「マクロの記録」はコードのヒントを得るために活用することがおすすめです。

その他、コーディングする上で大事なことを以下へまとめておきます。
いずれも詳細は今後別記事にまとめていきたいと思います。

  • コードはこまめにデバッグ(検証→修正)する
    ※マクロの実行結果は「元に戻す」(CtrlZ)ができないため、内容によっては検証用の別ブックを用意するのもアリ
  • 最初から、完璧なコードにする必要はない
    →まず希望通りの作業結果が得られることが最優先
  • ある程度動くことが分かったら、コードを見やすくする、あるいは処理が速くなるよう工夫する
  • コードが第三者や未来の自分が読み解きやすいようにコメントを入れておく

STEP5】マクロの登録

マクロが完成したら、ユーザーが使いやすいようにマクロを登録します。

多いのはボタンを設置し、そのボタンをクリックするとマクロが実行されるようにしておくケースです。

このように、ユーザーが任意のタイミングでマクロを手動実行するケースが主ですが、特定のブックやシート等に対しての操作(ブックを開く、特定のセルをダブルクリック等)をトリガーに自動実行させる「イベント」という実行方法もあります。

業務の目的に応じて使い分けると良いでしょう。

参考記事

マクロの実行方法の種類の詳細(イベント以外)を知りたい方は以下の記事をご参照ください。

なお、マクロを記述したブックのファイル形式は「*.xls」(Excel97-2003ブック)か「*.xlsm」(マクロ有効ブック)にしないといけませんので、ご注意ください。

【参考】マクロ有効ブックを開く場合は「有効化」が必要

マクロ有効ブックを開くと、次のようなメッセージが表示されます。

「コンテンツの有効化」をクリックしないと、マクロを使うことができませんので、ご注意ください。

なお、ネットからダウンロードしたマクロ有効ブックは今後デフォルトでブロックの方向性とのニュースがあります。

外部からマクロ有効ブックを入手する際は、入手元が信頼できるかの確認と、セキュリティ上のリスクを踏まえて、マクロを実行するようにしましょう。

マクロの使いどころとは

ここまでマクロを解説してきましたが、注意としては「何が何でもマクロで行う」と原則おすすめしません。

では、どうすべきかと言うと、次の2点を満たした作業に対してマクロを活用することをおすすめします。

  1. 頻度の高い(=工数が大きい)ルーティンワーク
  2. 他の機能で代替できない作業

1つ目は、そのままですね。

マクロはVBAに不慣れなうちは設定の都度、調べたり検証したりと工数がかかるものです。

マクロを設定する時間以上に、マクロを活用することで削減できる時間が大きいほど、マクロを活用する意味が出てきます。

また、マクロは作業手順が固まっているルーティンワーク(=定型業務)と相性が良いです。

2つ目は、Excelには複数の便利な機能があり、自動化という観点でも複数手段があることが多いです。

たとえば、「複数のブックを集めて1つの表にする」という作業を行う場合、マクロはもちろん、パワークエリでも自動化できます。

この場合、パワークエリの方がノーコードあるいはローコードで自動化することが簡単なため、パワークエリを使った方がベターです。

このように、マクロ以外の他の機能で対応できるものはそちらを優先的に使った方が、属人化も防げますし、設定も簡単なことが多いです。

ちなみに、マクロ以外の主要機能は関数、ピボットテーブル、パワークエリ、パワーピボットです。

これらの機能で自動化できる範囲をしっかりと把握しておくと良いですね。
(マクロでないといけない作業も今後別記事にまとめる予定です)

なお、RPARobotic Process Automation)が使える環境なら、マクロの代わりにRPAを活用してももちろん良いです。

さいごに

いかがでしたでしょうか?

マクロは自動化できる範囲は広く、極めると大抵のことは自動化できる機能です。

そして、何よりメリットが大きいのは、大抵のPCに入っているExcelさえあれば、VBAを記述できる環境があるということ。

会社によっては、無償のソフトであってもインストールする際のハードルが高いところもあるため、調整不要で自動化が可能なVBAを重宝している人は案外いるものです。

反面、VBAの学習ハードル自体はけっこう高め(私のようなノンプログラマーにとっては)なので、「この作業をVBAで自動化したい!」といった具体的な目的を持ってから学ぶことをおすすめします。

ご参考になれば幸いですm(_ _)m

森田森田

VBAは私も何回か学習を挫折したことがあります。
今振り返ると、挫折した時は「何となくマクロ使えるようになりたい、VBA覚えたい」という緩い目的意識だったからかなと思います。

ちゃんとVBAを自力(書籍やネットはめちゃくちゃ参照しましたが)で記述できるなったきっかけは、会社で上司に指示された作業を自動化するために必要だったからです。

その時は、所定フォルダー配下のすべてのExcelブックを順番に開き、全シートのヘッダーに「関係者外秘」とかの機密区分を入っているか確認し、入っていなければヘッダーに「関係者外秘」を入れて上書き保存して閉じるといった一連の作業を自動化しました。

こうした経験をして以降、調べながらではありますが、VBAを記述してマクロを組めるようになったものです。