このページの内容について
このページは、VBAエキスパート(ExcelVBAベーシック)試験合格講座の第一回記事です。公式テキスト第1章「マクロとVBAの概念」~第3章「モジュールとプロシージャ」の内容について解説します。VBAエキスパート試験では全40問中最初の10問程度が用語やマクロの文法に関する選択問題です。この回で登場する用語や略語、機能の説明はすべて出題される可能性があるため、自分でも手を動かしながら読み進めてください。1時間の講義でお話する程度の分量です。主に講座受講者の復習での利用を想定しています。
ExcelVBA(マクロ)
VBA(Visual Basic for Applications)とは
これから学習をするExcelVBA(マクロ)とはMicrosoft社が提供するVBAというプログラミング言語のExcel版です。VBA(Visual Basic for Applications)はExcelだけではなく、AccessやWord、Outlookなど業務でおなじみのOfficeシリーズに組み込まれているプログラミング言語です。各アプリケーション専用のVBAはそれぞれ共通の機能を持ちつつ、個々のアプリケーションを操作するために特化しています。その中でもExcelVBAはExcelの知名度・汎用性・利便性と相まってVBAの中で最も人気の高いプログラミング言語です。
マクロとは
マクロには広義的な意味と狭義的な意味があります。狭義的な意味で用いる場合、VBAによって記述されたプログラムを「マクロ」と呼びます。広義的な意味では、Officeツールを自動化する機能全般を指して用いられます。
ExcelVBA(マクロ)でできること
一般的にマクロはExcelの操作を自動化するツールとして認識されていますが、他の高級なプログラミング言語(C言語やPython、Rubyなど)と同様にファイルやフォルダの操作、テキストデータ編集や、Webスクレイピングまで実現可能な機能が備えられており、単なるExcel専用の自動化ツールとしてだけではなく、一般の事務職が気軽に手を出せるプログラミング言語としても非常に優秀です。
VBE
エディターとは
コンピューター上でデータを編集するためのソフトウェアのことをエディターと呼びます。その中でも文字データを扱うものを「テキストエディタ」と呼びます。一般にプログラムコードはテキストエディタを使って記述されており、プログラムの編集に特化したものは「プログラミングエディタ」とも呼びます。テキストエディタの例をあげるとWindowsに標準で搭載されている「メモ帳」やフリーソフトである「サクラエディタ」などが該当します。プログラミングで人気なものでは「Atom」や「Visual Studio Code」というエディターも存在します。
VBE(Visual Basic Editor)とは
VBE(Visual Basic Editor)はVBA専用のエディターのことです。ExcelVBAのプログラミングには必ずVBEを使用します。
VBEの起動方法
「開発」タブが表示されていれば「開発」⇒「Visual Basic」で開くことができます。「開発」タブが表示されていない場合でも「Alt」+「F11」で表示させることができます。
参考:開発タブを表示する
VBEの画面構成
私はVBEの画面をカスタマイズして使用しているため、初期表示とは異なります。各ウィンドウは「表示」タブから適宜、表示・非表示の選択が可能です。
プロジェクエクスプローラー
ブックの構成を階層図で表示します。上部のボタンで一覧表示と階層表示の切り替えが可能です。マクロはブックの一部ですがVBAの管理上、Microsoft Excel Objects(ブックやシート)と同じ階層にマクロ用の階層が作成されます。表示のショートカットは「Ctrl」+「r」。
プロパティウィンドウ
モジュールの名称(オブジェクト名)を変更するなどができます。主にユーザーフォームの設計に使用します。下記画像はシートのプロパティです。表示のショートカットは「F4」。
コードウィンドウ
マクロのコードを記述する場所です。初期設定では、ここにコードを記述すると1行記述するごとに自動構文チェックが実施され文法上の誤りがないかを判定し、誤りがあった場合はエラーが発生するようになっています。表示のショートカットキーは「F7」。
イミディエイトウィンドウ
マクロ実行中に保持される値(変数)の内容を表示したり、簡単な命令を実行したりできます。マクロの実行中に動作を止めてイミディエイトウィンドウで状況を確認するといった使い方ができます。表示のショートカットキーは「Ctrl」+「g」。
ローカルウィンドウ
マクロ実行中に保持される値(変数)の内容を表示するだけであればローカルウィンドウが便利です。マクロ実行中に保持されるすべての値が一覧表示されます。ショートカットキーは設定されていません。
ExcelVBA(マクロ)の保存方法
拡張子
ExcelVBAで記述されたマクロはExcelのブックに保存されます。独立したファイルとしてマクロプログラムを保存することはできません(※コードをエクスポートしておくことはできます)。マクロを記述したブックを保存する際、拡張子(.xlsxなどのこと)は通常「.xlsm」を選択します。「.xlsx」形式で保存するとマクロを記述していたとしてもマクロ情報は保持されず、次回開いたときはマクロには何も記述がない状態となります。
マクロを保存するときの画面
「Excelマクロ有効ブック(*.xlsm)」を選択しないとマクロ情報は失われてしまいます。
ExcelVBA(マクロ)のセキュリティ
ExcelVBA(マクロ)には4段階のセキュリティレベルが用意されており、ユーザーが設定でどのセキュリティレベルを採用するのか選択することができます。設定画面(トラストセンター)の開き方はこちらの記事を参照してください:このブックでマクロが使用できないか、またはすべてのマクロが無効になっている可能性があります。
警告せずに VBA マクロを無効にする(M)
ExcelVBA(マクロ)が無条件に無効化されます。この状態ではマクロを記述しても実行することができません。
警告して、VBA マクロを無効にする(A)
Excelブックを開いたときに黄色いラインで「セキュリティの警告」が表示され、ExcelVBA(マクロ)が無効化されます。無効化は「コンテンツの有効化」をクリックすると解消し、次回以降同じブックを開いても警告は表示されなくなります。一度有効化された記録はトラストセンターの「信頼済みドキュメント」からリセットすることもできます。
電子署名されたマクロを除き、VBA マクロを無効にする(G)
私自身がこの機能を使ったことがないため、詳細な解説はできませんが、Excelは電子署名を施すことができるため、その電子証明の有無でExcelVBA(マクロ)の有効・無効を判定します。電子署名とは(外部リンク)
VBA マクロを有効にする(推奨しません。危険なコードが実行される可能性があります)(N)
無条件にExcelVBA(マクロ)を有効化します。インターネットから取得したマクロであっても警告なく実行可能となります。ExcelVBAではブックを開くだけで実行を開始するというマクロも記述できるため、大変危険な設定です。
モジュール
モジュールとは
マクロの記録でも少し触れましたが、マクロが記述される場所のことをモジュールと呼びます。
モジュールの種類
標準モジュール
最も汎用的に使えるモジュールであり、基本的にマクロはここに記述します。VBAエキスパート試験のマクロはすべて標準モジュール上での動作を前提としています。
ユーザーフォーム
試験範囲ではありませんが、他の高級なプログラミング言語にはないExcelVBA(マクロ)の強みはこのユーザーフォームにあると思います。プログラミング素人でも直感的に(簡単に)GUI(グラフィカルユーザーインターフェース)を作成することができるモジュールです。
クラスモジュール
こちらも試験範囲ではありませんが、このモジュールはプログラミング上級者向けです。クラスモジュールで作成可能な機能はすべて標準モジュールで作成することができます。そのため、クラスモジュールを使用せずともかなり複雑な機能を持ったマクロを作成することも可能です。クラスとは一言では表現が難しいですが、誤解を恐れずにいうとオブジェクトを自作することができるモジュールです。
ブックモジュール
ブックを開くと同時に発動するマクロや、ブックの保存をトリガーとするマクロを作成することができるモジュールです。試験範囲ではありませんが、別途解説します。
シートモジュール
セルが変更されると発動するマクロや、別シートへ操作が移ることをトリガーとするマクロを作成することができるモジュールです。試験範囲ではありませんが、別途解説します。
モジュールの操作
標準モジュールを挿入する
プロジェクトエクスプローラーで右クリック⇒「挿入」⇒「標準モジュール」を選択する
VBEを起動(「Alt」+「F11」)し、プロジェクトエクスプローラーで右クリックして表示されるメニューから「挿入」⇒「標準モジュール」を選択します。
標準モジュールが作成されました
標準モジュールの名称を変更する
プロパティウィンドウを開いておく
先に「表示」タブからプロパティウィンドウを開いておきます。「F4」でも開くことができます。
プロパティウィンドウでオブジェクト名を編集する
作成したモジュールがプロジェクトエクスプローラーで選択された状態でプロパティウィンドウのオブジェクト名を編集します。
標準モジュールを削除する
プロジェクトエクスプローラーで右クリック⇒「~解放」を選択する
プロジェクトエクスプローラーで右クリック「<モジュール名>の解放」を選択します。
ダイアログボックスが表示されるため「はい」か「いいえ」を選択する
次に表示されるダイアログボックスで「いいえ」を選択するとそのまま標準モジュールが削除されます。エクスポート(Excel外に保存)しておきたい場合は「はい」を選択し、任意の場所へ保存します。
標準モジュールをコピーする
標準モジュールをコピーする方法は2つあります。ひとつはエクスポートしたモジュールをインポートすることです。コピー先が別ブックである場合、ドラッグ&ドロップでもコピーが可能です。
外部保存してあるファイルをインポートする
ドラッグ&ドロップでモジュールをコピーする
補記:VBEからシート名を変更してみる
プロパティウィンドウを使うとVBEからシート名を変更することもできます。
「Microsoft Excel Objects」のシートモジュールを選択する
プロパティウィンドウの「Name」を任意の名称へ変更する
シート名が変更されました
プロシージャ
プロシージャとは
ExcelVBAで作成されたプログラムのことを一般にマクロと呼びます。マクロと言ってもユーザーフォームや、Webスクレイピングなどの複雑な処理をするマクロもあれば、シートのデータを削除するだけの単純なマクロもあります。マクロの最も最小の実行単位を「プロシージャ」と呼び、どんなマクロもこのプロシージャの組み合わせで作成されています。
プロシージャの例
下記画像では「M01_Main」というモジュール内に「Main」と「SubProcess」という2つプロシージャがあり、「Public Sub Main()」~「End Sub」まで「Public Function SubProcess() As String」~「End Function」までのそれぞれが一つのプロシージャのかたまりです。
プロシージャの種類
Subプロシージャ
値を返すことができないプロシージャです。このプロシージャはシート上に配置したボタンや、開発タブのマクロから発動することができます。「Sub 〇〇」~「End Sub」までのかたまりを指します。
Functionプロシージャ
呼び出し元に値を返すことができるプロシージャです。このプロシージャはシート上に配置したボタンなどからの発動はできませんが、Excelの関数(SUMとかVLOOKUPとか)と同じようにセル上に記述し呼び出すことができます(ユーザー定義関数)。「Function 〇〇」~「End Function」までのかたまりを指します。
Propertyプロシージャ
よくクラスモジュールで使用するものと説明されていますが、標準モジュールでも使用できます。このあとの解説で登場する「オブジェクト」の要素であるメソッドとプロパティの「プロパティ」にあたる機能を提供するプロシージャです。使いどころは前述の2つのプロシージャとはかなり違います。「Property 〇〇」~「End Property」までのかたまりを指します。
マクロの記録
「マクロの記録」の機能と目的
「マクロの記録」はExcel上での操作を記録し、Excelが自動でマクロを記述してくれる機能です。これはExcelVBA(マクロ)を学び始めるきっかけとして非常に優れた機能です。しかし、実務上この機能を使う機会はスキルが向上するほど少なくなっていきます。「マクロの記録」で記述されるコードは人間の動きをそのままトレースしており、非効率な動きもすべて記録してしまうからです。強いて「マクロの記録」に目的を与えるとすると、マクロの関数や構文を調べることです。シート名を変更したり、データが入力されている最終行まで移動したりするようなマクロをパッと書けないとき「マクロの記録」で生成されたマクロから必要な部分を抜き出し、自身のマクロの組み込むという使用方法です。公式テキストでも推奨されています。
「マクロの記録」の使用方法
「マクロの記録」ボタンを押下
「開発」タブ⇒「コード」⇒「マクロの記録」ボタンを押下します。「マクロの記録」のダイアログボックスが開きます。開発タブが表示されていない方はこちらの記事を参照してください:開発タブを表示する
ダイアログに設定を入力し、OKを押下
「マクロの記録」をする際に設定できる項目は以下の通りです。
マクロ名(M)
任意のマクロの名称を入力します。命名規則は以下の通り
①名前の先頭は英文字、ひらがな、カタカナ、漢字のいずれかである必要があります。
②名前に、空白、「?」、「*」等の記号の使用不可。「_」は使用可。
ショートカットキー(K)
半角アルファベットを指定できます。入力しない場合、ショートカットキーは設定されません。既存のショートカットキーと同じアルファベットを指定することもでき、その場合、マクロのショートカットが優先されます。大文字を指定した場合「Ctrl」+「Shft」+「アルファベット」がショートカットキーとなります。
マクロの保存先(I)
■作業中のブック
マクロの記録を実行するブックにマクロが記述されます。
■新しいブック
マクロの記録開始時に、新しいブックが開き、新しいブックにマクロが記述されます。
■個人用マクロブック
後述します。
説明(D)
マクロの説明を記述できます。「開発」タブ⇒「コード」⇒「マクロ」から説明を見ることができます。
Excel上でマクロに記述したい任意の動きをする
新しいブックを開いてみたり、データが入力されている最終行までジャンプしてみたり、シートを追加してみたり、マクロの記述方法を調べたい動きをします。
「記録終了」ボタンを押下
マクロの記録を開始すると「マクロの記録」ボタンが「記録終了」ボタンに切り替わっています。調べたい動作を終了したら「記録終了」を押下します。
※「マクロの記録」「記録終了」ボタンはステータスバーからでも操作可能です。
記録されたマクロの確認
「マクロの記録」で記述されたマクロは標準モジュールに記録されます。ブックを起動して最初に記録するマクロはデフォルトで「Module1」に「Macro1」として記録されています。VBEを起動(「Alt」+「F11」)し確認してみましょう。
個人用マクロブック
個人用マクロブックとは
個人用マクロブックとは「マクロの記録」の保存先として指定できるマクロを保存可能なExcelブックのことです。個人用マクロブックにマクロを記録・記述して保存すると、次回以降のExcelブック起動時に、非表示で個人用マクロブックが開かれるようになります。個人用マクロブックに保存されたマクロをいつでも呼び出せるようになります。マクロが有効ではない「.xlsx」形式のExcelでもマクロを実行できる気分を味わうことができます。
個人用マクロブックの保存先
「C:\Users\≪ユーザー名≫\AppData\Roaming\Microsoft\Excel\XLSTART」に自動的に保存されます。個人用マクロブックを削除するためにはExcelファイルが起動していない状態で、上記フォルダへアクセスし「PERSONAL.XLSB」を削除します。
個人用マクロブックの編集
個人用マクロブックは他のマクロと同様、VBEで内容を確認することができます。VBEを起動(「Alt」+「F11」)し確認してみましょう。ここのマクロのコードを書き換えることもできます。
補記:XLSTARTフォルダについて
この先の解説は直接VBAエキスパート試験には関わりのない内容です。読むと業務に応用するヒントが得られるかもしれません。個人用マクロブックはExcelを起動したときに自動的に非表示で開かれるブックであると説明を受けます。しかしこの捉え方は正確ではありません。下記のように任意の名称で「.xlsx」「.xlsm」「.xlsb」ファイルを「XLSTART」フォルダに保存してみました。
上記の状態でExcelをすべて閉じて、新しくExcelを起動してみると以下のようになります。
■「.xlsb」:Microsoft Excel バイナリワークシート
「PERSONAL.XLSB」ファイルと同様、非表示で開きます。
■「.xlsm」:Microsoft Excel マクロ有効ワークシート
マクロが有効なブックですが、表示された状態で開きます。
■「.xlsx」:Microsoft Excel ワークシート
マクロが保存されていないブックですが、こちらも表示された状態で開きます。
以上から、Excelを開いたときに自動的にファイルを立ち上げる機能は「XLSTART」フォルダに与えられた役割であり「.xlsb」ファイルはあくまでもブックを開くときに非表示状態となるファイルであることがわかります。
Comment