【入門編】VBEの「コードの自動インデント」を使いこなす:可読性を維持するコーディング規約 – Excel VBA解析バイブル

スポンサーリンク

こんにちは!VBAの世界へようこそ。
マクロの記録ボタンを押して「動くことは動くけれど、中身を見たらなんだか暗号みたい……」と途方に暮れていませんか?

大丈夫、ここをクリアすれば、Excel VBAの基本はバッチリですよ。今日は、チーム開発でも自分自身の未来のメンテナンスでも絶対に武器になる「VBEの自動インデント設定」と「美しいコードを書くための作法」について、現場のプロの視点から優しく、そして深く解説していきますね。

—

1. なぜ「インデント(字下げ)」がプログラミングの命なのか?

初学者のうちは、「コードが動けば見た目はどうでもいいや」と思いがちです。しかし、仕事でVBAを書くようになると、コードは「書く時間」よりも「読む時間(直す時間)」の方が圧倒的に長くなります。

例えば、次の2つのコードを見比べてみてください。

【パターンA:インデントなし(読めないコード)】

Sub CheckSales()
Dim rng As Range
For Each rng In Range(“A1:A10”)
If rng.Value > 1000 Then
rng.Interior.Color = RGB(255, 230, 230)
If rng.Offset(0, 1).Value = “東京” Then
rng.Offset(0, 2).Value = “要確認”
End If
End If
Next rng
End Sub

【パターンB:適切なインデントあり(美しいコード)】

Sub CheckSales()
Dim rng As Range

For Each rng In Range(“A1:A10”)
‘ 1000を超える売上の場合にハイライト
If rng.Value > 1000 Then
rng.Interior.Color = RGB(255, 230, 230)

‘ さらに東京支店ならフラグを立てる
If rng.Offset(0, 1).Value = “東京” Then
rng.Offset(0, 2).Value = “要確認”
End If

End If
Next rng
End Sub

どうですか? パターンBの方が、`For` や `If` の「入れ子(ネスト)」の構造が一目でわかりますよね。
人間は、「左側の余白(インデント)」の深さによって、処理のグループを無意識に認識しています。ここが崩れているコードは、いわば「句読点のない小説」のようなもの。読むだけで脳のメモリを消耗してしまいます。

—

2. VBEの「自動インデント」を最強の状態にセットアップしよう

「じゃあ、スペースキーやTabキーを自分で何度も押して調整しなきゃいけないの?」と思ったそこのあなた。ご安心ください。ExcelのVBE(Visual Basic Editor)には、コードを書くだけで勝手にいい感じにインデントを整えてくれる機能が備わっています。

まずは、VBEの神設定を確認・変更していきましょう。

VBE設定の手順

1. Excelを開き、`[Alt] + [F11]` キーを押してVBE画面を開きます。
2. メニューバーの [ツール] > [オプション] をクリックします。
3. [エディター] タブを開きます。

ここでチェックしておきたいポイントがこちらです:

  • 自動構文チェック (Auto Syntax Check)
  • 推奨:ON (コードミスをした瞬間にポップアップで教えてくれます)
  • 変数の宣言を強制する (Require Variable Declaration)
  • 推奨:絶対ON(これについては後述します!)
  • タブ幅 (Tab Width)
  • 推奨:4 (デフォルトのままでOKですが、視認性の高い4文字分を維持しましょう)

【裏技】エディターをさらに見やすくするコツ

VBEのデフォルトフォントは少し古臭く、記号(`I` と `l` や、`0` と `O`)の見分けがつきにくいことがあります。
同じく [オプション] の [エディターの設定] タブから、フォントを `MS ゴシック` から `Consolas` や `Meiryo Ke_Gothic` などのプロポーショナル(等幅)ではない綺麗なフォントに変更すると、一気にモダンな開発環境になりますよ。

—

3. 陥りがちな罠:「変数の宣言忘れ」と「インデント崩れ」のエラー

コードを書き進めていくうちに、よくある初心者の壁が「あれ?動かない…」「変なエラーが出る…」という現象です。

罠1:インデントがズタズタになり、`End If` が迷子になる

`If` 文や `For` 文を書いた際、対応する `End If` や `Next` がどこにあるかわからなくなる現象です。これは大抵、途中でコードをコピペしたり、行を削除したりした時に発生します。

【解決策】
VBE上でコードを書くとき、「Tabキーで1段下げ、Shift + Tabキーで1段戻す」というクセをつけましょう。
また、プロのエンジニアは、`If` を書いた瞬間に、中身を書く前に 先に `End If` を打つ という習慣を持っています。これだけで「End が足りないエラー」を100%防げます。

罠2:変数名のタイポ(スペルミス)によるバグ

例えば、`totalCount` という変数を作ったつもりが、下の方でうっかり `totaCount` と打ってしまったとします。VBEの初期設定のままだと、VBAはこれを「新しい別の変数だ」と勝手に判断し、値が `0` のまま処理が進んでしまいます。原因不明のバグの完成です。

これを一発で防ぐ魔法の呪文が、先ほど紹介した設定にある `Option Explicit` です。

—

4. 現場で即戦力になる「コーディング規約」の基本ルール

チーム開発、あるいは未来の自分のために、最低限守りたい「美学(コーディング規約)」を3つ伝授します。これらを意識するだけで、あなたのVBAコードは「初心者卒業」の域に達します。

ルール①:モジュールの先頭には必ず `Option Explicit` を書く

変数の宣言を強制する設定です。これを書いておくと、宣言していない変数を使った瞬間にVBEが赤字で怒ってくれます。タイポによるバグを根絶できる、エンジニアの必須マナーです。

ルール②:コメントは「なぜそうしたか」を書く

よく「`i = i + 1` → iに1を足す」のような、コードを見ればわかるコメントを書く人がいますが、これは逆効果です。
コメントには、「なぜこの処理が必要なのか(ビジネス上の理由や、特殊な仕様)」を日本語で残しましょう。

ルール③:意味のあるまとまりごとに空行を入れる

ベタ書きされたコードは読みにくいです。「変数の宣言」「データの取得」「メインのループ処理」「結果の出力」といった論理的なブロックごとに、1行だけ空行を入れましょう。

—

5. 【実践】綺麗で美しいプロシージャの全貌

最後に、これまで解説した「自動インデント」「命名規則」「コメント」「Option Explicit」のすべてを詰め込んだ、実務でそのまま使えるサンプルコードをプレゼントします。

Option Explicit ‘ ← これをモジュールの最上部に必ず書く!

Sub ApplyDiscountToActiveSheet()
‘
‘ 概要: アクティブシートのB列にある価格に対し、条件に応じた割引率を適用する
‘ 作成日: 202X/XX/XX
‘

‘ 1. 変数の宣言(見やすく型を明示する)
Dim targetRange As Range
Dim cell As Range
Dim originalPrice As Currency

‘ 2. 対象範囲の定義(マジックナンバーを排除)
Set targetRange = Range(“B2:B100”)

‘ 3. メインのループ処理(インデントが綺麗に揃っていることに注目)
For Each cell In targetRange

‘ 空白セルであれば処理をスキップ
If cell.Value <> “” Then

originalPrice = cell.Value

‘ 10,000円以上の場合は10%OFF、それ以外は5%OFF
If originalPrice >= 10000 Then
cell.Offset(0, 1).Value = originalPrice 0.9
cell.Offset(0, 2).Value = “10%OFF適用”
Else
cell.Offset(0, 1).Value = originalPrice 0.95
cell.Offset(0, 2).Value = “5%OFF適用”
End If

End If

Next cell

‘ 4. 完了メッセージ
MsgBox “割引計算が正常に完了しました!”, vbInformation

End Sub

—

まとめ

いかがでしたでしょうか?
コードの美しさは、そのままあなたの論理的思考の美しさ、そして仕事の丁寧さに直結します。

最初は窮屈に感じるかもしれませんが、VBEの自動インデントを味方につけ、綺麗にレイアウトされたコードを書く快感を知ってしまえば、もう崩れたコードには戻れなくなりますよ。

一歩ずつ、確実にスキルアップしていきましょう。あなたのVBAライフを、心から応援しています!

タイトルとURLをコピーしました