マクロを管理したり、改良したりするときのために、「わかりやすいマクロ」を作成することが大切です。ここでは、そのためのルールを、基本用語とともに紹介していきます。
VBAで記述された命令や記述全体のことを「コード」と呼びます。1行の文、マクロ全体、行の中の一部分のいずれもコードと呼ばれます。
※「マクロ」とは、Excelに組み込んだ処理のまとまりのことで、内部的には「プロシージャ」と呼ばれる単位で構成されています。通常は Sub マクロ名()
~ End Sub
の間にコードを書きます。
補足:VBAのプロシージャにはいくつか種類があります。もっともよく使うのは「Sub プロシージャ」で、これを一般的に「マクロ」と呼びます。このほか、値を計算して返す「Function プロシージャ」、Excel のオブジェクトの性質を操作する「Property プロシージャ」などもありますが、初心者のうちはまず Sub プロシージャ を使いこなすことを目標にしましょう。
自分で作成したマクロでも、時間が経つとコードの意味や意図を忘れがちです。後日編集するときのために、また、複数人で作業している場合のメンバーに引き継ぐ時のために、マクロにメモや覚書を残しておきましょう。「コメント」という機能を使うと、マクロの中に自由に書きたいことを書けます。
コメントを入れるには、「'
」(シングルクォーテーション)に続けてコメントの内容を入力します。「'
」から行末までがコメントとみなされます。標準設定では緑色で表示されます(※色は環境設定で変更可能です)。
1行まるごとコメントにすることも、コードの末尾にコメントを入れることもできます。
Sub マクロ名()
から End Sub
の間のコードは、通常字下げして入力します。この字下げのことを「インデント」と呼びます。インデントを付けることでマクロの始まりと終わりがわかりやすくなります。
行頭で Tab キーを押すとインデントが設定されます。既定では半角スペース4つ分に相当しますが、環境設定によって幅を変更できます。解除する場合は Backspace キーを押します。
また、マクロの中に空白行を入れても構いません。処理のまとまりごとに空白行を入れると、コードが読みやすくなります。
インデントは「見た目」ではなく、コードの意味を読み取りやすくする大事な約束事です。次の最低限を守るだけで、将来の自分や他の人が読んだときにグッと理解しやすくなります。
If
文やFor
文などの入れ子構造(ネスト)は、外側よりも内側をさらに1段下げて書きます。
これにより、「どの処理がどこまで続いているか」が一目で分かるようになります。
VBA
If 条件 Then
For i = 1 To 10
' この部分は2段階インデント
Cells(i, 1).Value = i
Next i
End If
環境によっては、タブとスペースが混ざると見た目がずれてしまいます。
VBE の既定タブ幅は 4(スペース相当)です。Tab とスペースの混在はズレの原因になるため、プロジェクト内でどちらかに統一しましょう。
※補足:[ツール]→[オプション]→[エディタ]でタブ幅と自動インデントを調整できる。
代入やWith
句の中のプロパティなどは縦に揃えると読みやすくなります。
VBA
With Range("A1")
.Value = "テスト"
.Font.Size = 12
.Font.Bold = True
End With
縦揃えは読みやすくなりますが、将来の編集でズレやすい点に注意し、やり過ぎない範囲で使いましょう。
空白行を多用しすぎると逆に見づらくなるので、「初期化処理」「計算処理」「結果出力」など、論理的なかたまりごとに1行空けるとベストです。
行継続文字(_
)を使う場合、2行目以降にインデントを入れると、「続きの式」であることが直感的に分かるようになります。
VBA
If (条件1 = True And 条件2 = True) _
Or (条件3 = True And 条件4 = True) Then
MsgBox "条件を満たしました"
End If
コードを読む時間は、書く時間よりもはるかに長いです。インデントを整えることは、「読み手に優しいマクロ」を作るための最低限のマナーです。
コードが長くなると読みにくくなります。長いコードは適宜改行しましょう。また、意味の切れ目で改行すると、コードの意味がわかりやすくなるメリットもあります。ただし、勝手な位置で改行してしまうとエラーになります。
コードを複数行に分けるときは、半角スペースの直後にアンダースコア(_
)を置いてから改行します(スペース + _
は必須)。この「_
」を「行継続文字」と呼びます(行継続の書式は スペース + _ + 改行
です)。
※アンダースコアの入力方法は、日本語キーボードの場合 Shift + ろ キーです。英語配列キーボードでは位置が異なるため、キートップを確認してください。
なお、行継続文字は、文字列の途中に入れられません。コードに含まれる「=
」「.
」「,
」「()
」などの記号の前後の区切りの良い位置に入れましょう。その際、2行目以降の行にインデントを付けると、ひと続きのコードであることがわかりやすくなります。
行継続文字(_
)を置いた行の末尾には、空白(スペースやタブ)以外の文字を置けません。そのため、同じ行の _
の後ろにコメント('
)を書くことはできません。コメントを付けたい場合は、次の行に書くか、継続前の行に書きましょう。
NG(コンパイルエラー)
VBA
If 条件1 And _ ' ← この行(_の後ろ)にコメントは置けない
条件2 Then
MsgBox "OK"
End If
OK
VBA
' 継続前の説明コメント
If 条件1 And _
条件2 Then ' ← 継続「後」の行や最終行末尾にはコメントを書ける
MsgBox "OK"
End If
_
は式や文の継続を示す記号であり、リテラル文字列の継続には使えません。そのため長い文字列は一度閉じて &
で結合します(行末で &
のあとに スペース + _
を置いて改行します)。
VBA
MsgBox "これは長いメッセージの前半です。" & _
"こちらが後半です。"