なぜ他人のコードは読みにくいのか?
実務でVBAを扱っていると、「誰が作ったか分からないマクロ」や「前任者が残した複雑な処理」に直面することは少なくありません。特に始めたばかりの方にとって、他人のVBAコードは次のような理由でとっつきにくく感じられます。
- 変数名がわかりづらい
- コメントがない、または中途半端
- 処理の流れが飛び飛び
- 無駄な選択(
Select
やActivate
)が多い
このようなコードをどのように読み解いていけばよいか、実際のコード例を交えて解説していきます。
コツ1:全体構成をざっくり把握する
まずは、コード全体の長さや構造をざっと眺めましょう。特に次のポイントをチェックします。
Sub ~ End Sub
で囲まれた単位はいくつあるか?For
やIf
などの構造の深さは?- 変数の宣言はどこで行われているか?
関数や引数のない、プロシージャ(Sub〜End Subの一かたまりのこと)だけで構成されたマクロであれば、比較的読みやすくなっています。
コードの例
Sub Main()
Dim i As Long
For i = 1 To 10
If Cells(i, 1).Value <> "" Then
Call 処理A
End If
Next i
End Sub
解説
Main
というマクロの中で繰り返し処理が行われている- 条件に合うときだけ「処理A」という別のマクロを呼び出している
このように、まず「全体の流れ」をつかむことが大事です。
コツ2:変数を日本語に置き換えてみる
変数はシンプルにするために1文字で使うことも多いですが、頭の中で日本語に置き換えてみましょう。
例
Dim x As Long
Dim y As String
x = Cells(1, 1).Value
If x > 0 Then
y = "OK"
End If
読み替え
x
→ 「セルA1の値」y
→ 「判定結果」
xにはA1の値を入れて、そのxが0よりも大きい場合にはyに「OK」と入れるというマクロです。
このように、変数をそのままx、yと読むのではなくて、どのような内容が入っているかを意識し、その内容を日本語で考えることで、理解しやすくなります。
コツ3:コメントを自分で書き足す
コメントがないコードほど読みにくいものはありません。読みながら、自分が理解したことをコメントとして書き足していくと理解が深まります。
例:コメントなしの状態
For i = 1 To 10
If Cells(i, 1).Value = "" Then
Exit For
End If
Cells(i, 2).Value = i * 10
Next i
コメントを加えた例
For i = 1 To 10
' A列のセルが空欄になったらループを終了する
If Cells(i, 1).Value = "" Then
Exit For
End If
' B列にi×10の結果を代入する
Cells(i, 2).Value = i * 10
Next i
このように書き足しながら読むことで、コードの意図が明確になります。
コツ4:実際に動かしてみる
どんなにコードを眺めても、実行しないと分からないことは多いです。特に始めたばかりの方には「ステップイン」や「ブレークポイント」を使った方法がおすすめです。
- ステップイン(F8キー)で1行ずつ実行し、動きを目で追う
- ブレークポイント(F9キー)を使って、特定の行で一時停止させる
- 実行を止めた状態で、カーソルを変数にあてるとその値がポップアップで表示される
たとえば i
や Cells(i, 1).Value
にカーソルを当てると、実行中にその時点での値がすぐに確認できます。これにより、どこまで処理が進んでいて、何が起きているのかを視覚的に理解できます。
例:繰り返し処理でF8を使って確認
For i = 1 To 10
If Cells(i, 1).Value = "" Then
Exit For
End If
Cells(i, 2).Value = i * 10
Next i
このコードにステップインすると、変数 i
の値や Cells(i, 1).Value
の内容を1つずつ確認しながら進めることができます。 実行しながら理解を深めていくのは、とても効果的な学習方法です。
コツ5:構造を図解してみる
- 条件分岐や繰り返しの流れを紙に書いてみる
- 関数呼び出しの関係を図にする
条件分岐や繰り返しが多いとコードを見ているだけでは理解ができないことが多いです。そのため、紙に書き出すのは私も良くやります。視覚的に把握することで、頭の整理がつきやすくなります。
よくある読みづらいコード例と対策
例1:変数名がシンプル
Dim a, b, c
For構文に利用する繰り返しのための変数は1文字などでいいと思いますが、シートを入れる変数などは、例えば「ws_data(WorkSheetのデータシート)」などのように意味がわかりやすいものにしておくと、その変数だけ見てもわかりやすくなります。
例2:SelectやActivateの多用
Range("A1").Select
Selection.Value = 100
Selectionを使うこともありますが、セルを選択した直後に記載するのであれば、次のように記載するのがコードも短くなるのでシンプルです。
必要な場合にはSelectionを使ってもいいですが、省略できる部分はコードの見やすさの観点からもシンプルに書くことをお勧めします。
Range("A1").Value = 100
例3:処理の分岐が多くて複雑
If score >= 80 Then
result = "合格(優)"
ElseIf score >= 60 Then
result = "合格"
Else
result = "不合格"
End If
上記のように条件が複数ある場合、すべてを一度に理解しようとせず、 「たとえば scoreが85のときはどうなる?」というように、1つの具体例に絞ってコードを追ってみましょう。
このように1つの流れを丁寧に追うことで、全体像が見えやすくなります。 次に別の値でも同様に確認していけば、コード全体の意図がつかめてきます。
まとめ
他人の書いたVBAは、最初はとても読みづらく感じるかもしれません。でも、読み解くための「型」や「視点」を持てば、少しずつ理解できるようになります。
- 全体をざっくり見る
- 変数名を日本語で考える
- コメントを書き足す
- 実際に動かして動作を確認する
まずは「怖がらずに触ってみる」ことが、上達の第一歩です。 読み解けるようになれば、自分の書くコードにも自信がついてきます。
コメント