VBAの初歩の初歩・VBAの書き方・基本的な作法を解説

Excel VBA

マクロを組んでみたいけど、VBAは敷居が高いと感じている方もいるかもしれません。
でも、実はやり方さえ分かってしまえば、決して敷居は高くないのです。
この記事では、マクロの作り方、VBAの書き方の作法について、初めての方でも理解できるように解説していきます。

VBAには作法がありますが、決して難しくありません。
怖れずにチャレンジしましょう。

全てはVBEで!

VBEとは、Visual Basic Editorの略です。
VBAは全てVBEで書きます。

このVBEを出すのは、初期設定だと隠れたところにあるので、少し分かりにくいかもしれません。

(以下、Excel 2010の場合で解説します)

まず、リボンに「開発」タブを出します。
ファイル→オプション→リボンのユーザー設定
と進んでください。

この画面です。
ここで、右側の「開発」をチェックします。
すると、「開発」タブが出現します。

「開発」タブをクリックしてみましょう。

一番左の、「Visual Basic」をクリックします。

VBEが表示されました。

マクロの作り方

マクロを作るのに分かりやすい方法(そして実際にも最も頻繁に使われる方法)は、ボタンを設置することです。
ボタンをクリックするとVBAのコードが実行されるようにできます。

「開発」タブの「挿入」から、ボタンをクリックします。
それでボタンを設置します。

設置すると、

こういう画面になりますので、マクロ名を入力し、「新規作成」をクリックします。
ここでは「サンプル」としました。

するとこういうVBEの画面になります。
ここにVBAのコードを記述していきます。

SubとEnd Subの間に書く

上の画面で、

Sub サンプル()

End Sub

は自動で挿入されたものです。
ボタンをクリックするとこの「サンプル()」の中のコードを実行します。
こういったマクロは「プロシージャ」と呼ばれ、Subで始まりEnd Subで終わります。
VBAのコードはSubとEnd Subの間に書きます。

Function

VBAには、プロシージャの他に「関数」というものもあります。

関数はFunctionで始めます。

Functionに続いて関数名を打つと、

Function f()

End Function

というコードが生成されます。関数はFunctionとEnd Functionの間に書きます。

関数はプロシージャ内の同一の処理を1箇所にまとめたり、何か特別な処理をして値を返すのに使います。

値を返すには、関数名に値を代入します。

上記のfでしたら、例えば

f = 2

とします。

関数を上手に使うと処理が見渡しやすくなり、バグも予防できるので、覚えておいてください。

モジュールとは?

ところでVBEの左側を見てみましょう。

「標準モジュール」という項目が加わり、その下に「Module1」というのがありますね。
「Module1」というのは、今右側に表示されているコード編集画面です。

VBAは、この「モジュール」の単位でマクロを管理します。
「モジュール」とは、「まとまり」だと思ってください。
基本的には1モジュールに1つのマクロのVBAのコードを書きます。

モジュール単位で他のExcelブックにマクロを移したり(エクスポート)、逆にマクロを入れたりできます(インポート)。
モジュールとはVBAのコードを管理する単位です。

シート、ブック固有の機能

左側に、
「Sheet1(Sheet1)」
「ThisWorkbook」
というのも表示されていますね。

ここには、
「そのシートだけで実行したいマクロ」
「このブックで実行したいマクロ」
を書きます。

ここに書いたコードは、
「シートを開いたとき」
「ブックを開いたとき」
といった、特定のタイミングで実行されます(タイミングは細かく指定可能です)。

VBAの経験が増えると、ここも使うかもしれません。
覚えておきましょう。

スペースを入れる

ところで、

End Sub

はEndとSubの間にスペースが入っていますね。

これはこういう決まりです。絶対にスペースを入れないといけません。

他にも、

a = 1 + 1

なら=の前後、+の前後に必ずスペースが入ります。

これは意識しなくても構いません。
VBEでコードを書いていると、VBEが勝手に補正してスペースを入れてくれるのです。
消そうとしても消せません。

なので、打ってないのにスペースが入っていても、気にしないでください。そういうものです。

インデント

コードは行の先頭から書き始めて構いません。

ですが、例えば

If a = 1 Then
MsgBox ("aは1です")
End If

なら、

If a = 1 Then
    MsgBox ("aは1です")
End If

と書いた方が、どこからどこまでがIfのブロックなのか一目で分かり、コードが見やすくなります。
これを「インデント」と言います。

インデントはコードを見やすくするために必須です。
コードは長年保守するものですし、他の人も読むものだから、見やすく書かないといけません。
Forブロックなどもインデントしましょう。

VBAはインデントがなくても動作する言語ですが、意識的にインデントするようにしてください。

変数名

変数名は、アルファベットでも日本語でも大丈夫です。
これは好みの問題です。一般的にエンジニアはアルファベットの変数名を付ける傾向がありますが、固執する必要はありません。分かりやすいと思ったら日本語でも全然構いません。

まとめ

この記事では、マクロの作り方、VBAのコードの書き方について解説してきました。

標準設定で「開発」タブが出ていないのが、VBAの敷居が高いと感じる一番の理由のように考えます。でも、VBAを始めることは、この記事で解説した通り、決して難しくはありません。分かってしまえば、いつも同じ手順でVBAのコードをメンテナンスできます。
あなたも怖れずに、VBAにチャレンジしてみてください。