エクセルのマクロを勉強して使えるようになりたいという方は、まずVBE(Visual Basic Editor)の使い方をマスターする必要があります。
実のところ、世の中には多くのプログラミング言語はあるのですが、プログラムを組むための環境を整えるということと、エディターの機能を知っておくということがまず始めに大切なことです。
かといって全部を最初から知っておくのは無理なので、最低限の使い方を覚えながら、少しづつプログラムの作成方法を覚えていくのがいいと思います。
1.エクセルに「開発」タブを表示させよう
エクセルの初期状態では、VBAのための「開発」タブが表示されていません。
なので、まず最初は「開発」タブを表示させてみましょう。
「ファイル」タブをクリック、左のメニューから「オプション」をクリック、オプションの画面が出てきたら、左のメニューから「リボンのユーザー設定」をクリックします。
画面の右側に「メインタブ」が出てきていると思いますので、その中にある「開発」にチェックを入れて、右下の「OK」ボタンをクリックします。
これで、エクセルの画面の上部にあるタブの並びの中に「開発」という文字が現れてくると思います。
それでは、「開発」タブをクリックしてください。
表示されるリボンの左端に、上記のようなものが表示されていると思います。
まず、ここに表示されているボタンの意味について説明しておきますね。
(1)Visual Basic
Visual Basic Editerを起動させるボタンです。このボタンをクリックすると、マクロプログラムを作成するためのウィンドウが新たに表示されます。
(2)マクロ
このボタンは、すでに作成されているマクロプログラムの一覧を表示させるものです。ここから、マクロプログラムの編集や実行を行うこともできます。
(3)マクロの記録
このボタンは、マクロを簡単に作ってみたい人のために用意されたもので、このボタンを押した後に、マクロ名を確認してOKすると、自分が行ったエクセルの操作をそのままマクロプログラムとして記述してくれるというありがたいものです。
操作が始まると、「マクロの記録」は「記録終了」というボタンになりますので、操作終了後は、必ず「記録終了」をクリックして終わらせる必要があります。
(4)相対参照で記録
エクセルには、絶対参照と相対参照という言葉がありますが、通常「マクロの記録」は絶対参照という形で行われます。これは選択したセルの位置が絶対参照的なものでプログラムが組まれるという意味です。
これに対して、「相対参照で記録」のボタンをONにしてから「マクロの記録」ボタンを押すと、最初に選択されているセルを基準にして、相対的なセルの位置を認識してプログラムが組まれることになります。
例えば、選択したセルの背景色を変更するマクロプログラムを作成したとすれば、絶対参照の場合は、常に同じセルの背景色を変更するだけですが、相対参照のプログラムでは、最初に不特定のセルをクリックしてマクロを実行させれば、その選ばれたセルの背景の色が変化するようになります。
(5)マクロのセキュリティ
このボタンを押すと、トラストセンターという画面が現れます。一番上に「マクロの設定」という項目があり、その下に4つのラジオボタンの選択があります。
初期状態では、「警告して、VBAマクロを無効にする」という所が選択されていると思います。この意味は、マクロを持っているエクセルファイル(*.xlsm)を開いた時に、エクセルの画面の上に「セキュリティの警告 マクロが無効にされました」という黄色い帯が出て、「コンテンツの有効化」ボタンをクリックすることで、マクロが実行可能になるという意味です。この設定はそのままにして変更しないでください。
2.VBE(Visual Basic Editor)を起動してみよう
それでは、開発タブの中の「Visual Basic」のボタンをクリックしてください。
以下のような画面が現れます。
この画面は、エクセルの画面とは別のウィンドウとして現れてきますので、エクセルのウィンドウとVBEのウィンドウを左右に並べてディスプレイに表示するのがいいと思います。
ちなみに、この画面の出し方はもう1つあって、「Alt」+「F11」のキーで表示させることもできます。
3.標準モジュールを新しく作成しよう
マクロプログラムを書くための1つのメモ帳みたいなものが「標準モジュール」と呼ばれているものです。これは、何個でも作成することができます。
とりあえず、1つ作成してみましょう。
メニューの「挿入」から「標準モジュール」をクリックします。
上記のように真っ白い画面が右に出てきたと思います。ここにプログラムを書くことになります。
左側の上の欄に「プロジェクト」という部分があって、その中に「標準モジュール」という項目が出来て、さらにその配下に「Module1」というものが見えると思います。これが今作成した標準モジュールの名前になります。
実はこの「Module1」という名前は変更することもできます。左側の下の欄に「プロパティ」というところがありますが、その中に(オブジェクト名)という項目があります。その部分に書かれた「Module1」という部分の文字を変更することで、名前を変更できます。
それでは、試しに名前を「メイン」という名前に変更してみましょう。
「Module1」の文字を「メイン」に変更してEnterキーを押してみましょう。
「Module1」が「メイン」に変更されました。
4.「プロシージャ」を新しく作成してみよう
プロシージャというのは、プログラムの1つの単位だと考えてください。
エクセルマクロには、プロシージャの種類が3つあります。
・Subプロシージャ
・Propertyプロシージャ
・Functionプロシージャ
PropertyプロシージャとFunctionプロシージャは、最初は難しいので覚えなくても大丈夫です。Subプロシージャをまず覚えてください。
Subプロシージャには、以下の2つがあります。
・Public Subプロシージャ
・Private Subプロシージャ
1つの小さなプログラムの場合は、それほど区別する必要はないのですが、複数のプロシージャが連携して、大きなプログラムを組むような場合に、大切になります。
Private Subプロシージャは、1つの標準モジュール内の範囲でのみ、相手のプロシージャと関連することができるものです。
これに対して、Public Subプロシージャは、複数の標準モジュールをまたいで、相手のプロシージャと関連することができます。
多くの場合、使われるのは、Public Subプロシージャとなります。
それでは、メニューの「挿入」から「プロシージャ」をクリックしてください。
そうすると、以下の画面が現れます。
名前という欄に「テスト」と入力してください。
プロシージャの名前には以下の条件があります。
(1)文字(英語か日本語)で始まっている
※数字から始まってはいけません。
(2)スペースや記号は使用できません。
※「_」(文字の途中でアンダーバーは使用できます)
※「.」については一部例外はあります。
(3)80文字以下で設定する必要があります。
(4)プログラムで使用するようなコマンドの文字は使えません。
種類は、「Subプロシージャ」、適用範囲は「Publicプロシージャ」という状態のまま、OKボタンを押してください。
Public Sub テスト()
End Sub
上記のように表示されたと思います。
実際には、プロシージャの挿入はメニューの挿入から行うことは稀で、直接モジュールの中に以下のように書いてEnterすることが一般的です。
Sub テスト()
この場合、Publicは書いていませんが、単にSubと書いた場合は、自動的にPublicだと解釈されています。この場合、Subの後ろは半角スペース、最後の括弧は半角で名前のすぐ後にくっつけて書きます。
Sub テスト()
End Sub
Enterキーを押すと、自動的にEnd Subが表示されます。
もう1つ、その下にSubプロシージャを作成してみると、プロシージャの間に線が引かれていて、区別されることが分かります。
なお、同じ名前のプロシージャは設定してはいけませんので、必ず別名で作成してください。プロシージャ名は、いつでも変更可能です。なるべくわかりやすい名前で設定する方がいいでしょう。
マクロのプログラムは、Sub~End Subの間に記述することになります。
5.一番簡単なプログラムを作ってみよう
(1)メッセージボックスを出してみよう
以下のプログラムを記述してみましょう。
Sub テスト()
msgbox "こんにちは!"
End Sub
「msgbox」と小文字で書いても、自動で「MsgBox」に変換されます。
このプログラムを実行する場合は、MsgBoxと書かれている行内にまずカーソルを置いてください。
それから、以下のツールバーの三角ボタンをクリックします。
「こんにちは!」というメッセージボックスが現れますので、OKボタンを押してください。
この場合、OKボタンを押さないとプログラムは終了しないので、注意してください。
(2)Debug.Printをやってみよう
Debug.Printというのは、プログラムの途中で何かを表示させたいという時に使うコマンドです。
このコマンドを使う場合には、「イミディエイトウィンドウ」というものを画面上にあらかじめ表示させておく必要があります。
メニューの「表示」から「イミディエイトウィンドウ」をクリックしてください。
画面の下に「イミディエイト」という欄が現れます。
この「イミディエイトウィンドウ」は、Debug.Printのコマンドの表示先になるものです。その他の用途もあるのですが、今後紹介します。
それでは、以下のプログラムを記述してみてください。
Sub テスト2()
debug.print "こんにちは"
End Sub
「debug.print」と記述しても、自動で「Debug.Print」と変換されますので、コマンドは小文字で書いても大丈夫です。
それでは、カーソルをdebug.printの行のどこかに置いてから、実行の三角ボタンを押してみてください。
上記の図のように、イミディエイトの欄に「こんにちは」と表示されたら成功です。
6.まとめ
今回は、エクセルマクロの初心者の方に、マクロを作成するためのVBE(Visual Basic Editor)の簡単な使い方を見ていただきました。
エクセルマクロは、プログラムを初めて作成する人にも理解しやすいと思いますので、少しづつ作り方を覚えていくのがいいと思います。
最終的にはエクセルで複雑な操作を行いたいと思っている方も多いと思いますが、プログラムの上達は急がば回れで、基礎をきちんと理解することが最も大切です。
今後も、マクロの初心者向けに、わかりやすい記事を書いていきたいと思います。