[PR]当サイトはアフィリエイト広告を利用しています。
はじめに
ここまでVBA入門記事では何気なくインデントを使っていました。
インデントとはタブやスペースでブロックを表すプログラムの書き方のことです。
インデントを意識したほうがバグが少なくなります。
一度きちんと解説したほうが、プログラミングをより理解しやすくなると思ったので今回解説します。
インデント具体例レベル1
まずシンプルなコードで見ていきましょう。
Sub ex1()
Range("D3").Value = 1
End Sub
VBAはSubとEnd Subで囲んだ部分がコードになります。
ここで
Range(“D3”).Value = 1
の前にタブが挿入されて一段この行が下がっています。
これがインデントです。
自動インデント設定
インデントしたブロックと同じ段にもう一つブロックを書くとき、例えば複数のIf文を連続して書くときなどは自動インデント設定をしておけば、Enterキーを押すだけで勝手にインデントしてくれて便利です。
やり方はエディタを開いて、「ツール」→「オプション」→「自動インデント」のチェックを付けます。インデントの深さもここで調整できます。
インデント具体例レベル2
次にこのコードにもう一つブロックを追加します。
Sub ex1()
Range("D3").Value = 1
Dim a As Integer
a = Range("D3").Value
If a = 1 Then
Range("E3").Value = 2
End If
End Sub
全体的に一つタブで字下げされていて、If文の中だけさらに字下げされています。
プログラムは上から実行されていくという前提のもと、コードを上から見ていきます。
まず2行目から4行目までは一行ずつコードが実行されています。
この意味でこの2行目から4行目までは同じ次元です。
5行目のIf文を見てみましょう。
If文の本体である6行目はIf文の中だけで有効です。
つまり2行目から4行目までのコードからは独立して動きます。
この意味で6行目は2行目から4行目とは違う次元です。
こういうとき、その部分をインデントします。
インデント具体例レベル3
さらにこのコードに追加します。
Sub ex1()
Range("D3").Value = 1
Dim a As Integer
a = Range("D3").Value
If a = 1 Then
Range("E3").Value = 2
End If
Dim i As Integer
If a = 1 Then
For i = 1 To 3
Cells(2 + i, 6).Value = i
Next i
End If
End Sub
9行目から13行目まででさらにインデントが深くなっていますね。
10行目から12行目までのFor文は9行目と13行目のIf文の中身なので5行目から7行目のIf文同様一つインデントがされています。
そして11行目のコードはFor文の本体で、ここは他のコードからは独立しています。
よってこの部分をさらにインデントします。
インデント具体例レベル4
さらに追加します。
Sub ex1()
Range("D3").Value = 1
Dim a As Integer
a = Range("D3").Value
If a = 1 Then
Range("E3").Value = 2
End If
Dim i As Integer
If a = 1 Then
For i = 1 To 3
Cells(2 + i, 6).Value = i
Next i
For i = 2 To 4
Cells(2 + i, 7).Value = i
Next i
End If
End Sub
For文が二つになりましたね。
一つ目のFor文と二つ目のFor文を見ていきます。
まず一つ目のFor文が実行されてから二つ目のFor文が実行されますね。
この意味で一つ目のFor文と二つ目のFor文は同じ次元です。
For文をブロックとみなせば、ブロック二つが順に実行されていくのがわかると思います。
このためこの二つのFor文は同じ深さのインデントとなります。
そしてそれぞれのFor文の本体(Cellsの部分)は他の行からは独立しているのでそこもインデントします。
インデントは深すぎると(何重もの入れ子)コードがわかりにくくなってしまいますが、適度な深さで適切にインデントすると、コードの流れがつかみやすくなります。
コードの可読性を高めるためにもインデントを適切に使いましょう。
とりあえず動くが可読性が悪いコード
こういうインデントがめちゃくちゃなコードは可読性が悪いので避けたほうがいいです。
Sub ex2()
Range("D7").Value = 1
Dim a As Integer
a = Range("D7").Value
If a = 1 Then
Range("E7").Value = 2
End If
Dim i As Integer
If a = 1 Then
For i = 1 To 3
Cells(6 + i, 6).Value = i
Next i
For i = 2 To 4
Cells(5 + i, 7).Value = i
Next i
End If
End Sub
基本的に一文は一行に書きます。
二文を一行に書いてはいけません。
インデントはタブでもスペースでもよいですが、はじめのうちはタブを使って字下げすることをおすすめします。
タブでインデントしたほうが、深さが際立って、下がっているというのを認識しやすいです。
まとめ
今回はインデントについて書きました。
インデントはコードの可読性を上げるテクニックです。
きれいなコードは他人が見ても、自分が後から見ても、理解しやすくなります。
インデントを適切に使っていきましょう。