VBAで驚くほどきれいなコメントが書けるようになる5つのコツ
「コメントをきれいにすれば修正も、コードも読みやすくなる。」

ひたすら業務でVBAを使っててあみだした、分かりやすく見やすいきれいなコメントが書けるようになるコツを5つ紹介していこう。

きれいなコメントが書けるようになる5つのコツ

  1. 最初に'----の点線で区切る
  2. コメントの前に1行空ける
  3. なぜそのコードを書いたかをコメントする
  4. どんなコード処理なのかを簡潔にコメントする
  5. ムダなコメントを書かない

この5つがコメントを書くときに重要になっていく。きれいなコメントを書くためには必須ということ。くわしく話していこう。

1, 最初に'----の点線で区切る

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
' -------------------------------------------------------
' -------------------------------------------------------
' -------------------------------------------------------

点線で区切るだけ。スクロールしててもパッとみどこからどんな処理か見やすくなる。この点線は、各プロシージャごと。またはファンクションごとに設定するといい。

2, コメントの前に1行空ける

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
Sub exampleProcess()
' ここにコメント--うえ1行は空白
Dim i As Long
' ここにコメント--うえ1行は空白
For i = 1 To 10
  -- なにかの処理 --
Next i
End Sub
Sub exampleProcess() ' ここにコメント--うえ1行は空白 Dim i As Long ' ここにコメント--うえ1行は空白 For i = 1 To 10   -- なにかの処理 -- Next i End Sub
Sub exampleProcess()

  ' ここにコメント--うえ1行は空白
  Dim i As Long

  ' ここにコメント--うえ1行は空白
  For i = 1 To 10
     -- なにかの処理 --
  Next i

End Sub

コメントはなるべく1行あけて書こう。適度に空白があって、どこに対してコメントしてるか分かりやすくなるから

空白がないと無意識にコードを見たくなくなる→コードが理解できない→「あ~もういいや!」

ってなる。

1行空けてないコードは、びっしり文字が書いてある辞書だと思ってもらえばいい。最初から最後まで読みたいと思わないだろ?

3, なぜそのコードを書いたかをコメントする

なぜそのコードを書いたか?をコメントするといい。「もっとこう書けばいいのになんでこんなコード処理にしたんだろ?」って思うときがかならずくるから

他人のコードだけじゃなく、とうぜんあなた自身で書いたコードもだ。

' 配列のほうが早い。けど処理が複雑になるので、可読性のためにWorkSheetFunctionをつかう

みたいに。なぜそのコードを書いたか?っていうコメントを書くといい。

4, どんなコード処理なのかを簡潔にコメントする

ちょっと考えないとわからないようなコードは、コメントを書くことで一瞬で理解できる。他人からもあなた自身からも。

コードを読むときは、ストレスなく読めるほうがいい

たとえば、つぎのコード。「' ネットワークフォルダに対応するための処理をする」みたいにすれば一瞬で理解できる。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
Sub multipleLayersMkDir(ByVal output_folder_path As String)
Dim file_system As New FileSystemObject
Dim folder_lists As Variant
Dim i As Long
Dim folder_path As String
folder_lists = Split(output_folder_path, "\")
For i = LBound(folder_lists) To UBound(folder_lists)
folder_path = folder_path + folder_lists(i) & "\"
' ネットワークフォルダに対応するための処理をする
If folder_path = "\" Then
folder_path = folder_path
ElseIf folder_path = "\\" Then
i = i + 1
folder_path = folder_path + folder_lists(i) & "\"
ElseIf file_system.FolderExists(folder_path) = False Then
MkDir folder_path
End If
Next i
End Sub
Sub multipleLayersMkDir(ByVal output_folder_path As String) Dim file_system As New FileSystemObject Dim folder_lists As Variant Dim i As Long Dim folder_path As String folder_lists = Split(output_folder_path, "\") For i = LBound(folder_lists) To UBound(folder_lists) folder_path = folder_path + folder_lists(i) & "\" ' ネットワークフォルダに対応するための処理をする If folder_path = "\" Then folder_path = folder_path ElseIf folder_path = "\\" Then i = i + 1 folder_path = folder_path + folder_lists(i) & "\" ElseIf file_system.FolderExists(folder_path) = False Then MkDir folder_path End If Next i End Sub
Sub multipleLayersMkDir(ByVal output_folder_path As String)

    Dim file_system As New FileSystemObject
    Dim folder_lists As Variant
    Dim i As Long
    Dim folder_path As String

    folder_lists = Split(output_folder_path, "\")

    For i = LBound(folder_lists) To UBound(folder_lists)
        folder_path = folder_path + folder_lists(i) & "\"
        
        ' ネットワークフォルダに対応するための処理をする
        If folder_path = "\" Then
            folder_path = folder_path
        ElseIf folder_path = "\\" Then
            i = i + 1
            folder_path = folder_path + folder_lists(i) & "\"
        ElseIf file_system.FolderExists(folder_path) = False Then
            MkDir folder_path
        End If

    Next i

End Sub

5, ムダなコメントを書かない

コメントは書けばいいってもんじゃないんだ。それこそコード書くたびにそのコードの説明とかいちいちいらん

コードで書いてあることを復唱するようなコメントはムダ

たとえばつぎのコメントはムダの典型。コードを見れば分かること。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
' ここからif文
Dim is_name As Boolean
' is_nameがTrueだったら処理する
If is_name = True Then
End If
' ここからfor文で繰り返し処理
Dim i As Long
' iを1から10まで処理する
For i = 1 To 10
Next i
' ここからif文 Dim is_name As Boolean ' is_nameがTrueだったら処理する If is_name = True Then End If ' ここからfor文で繰り返し処理 Dim i As Long ' iを1から10まで処理する For i = 1 To 10 Next i
' ここからif文
Dim is_name As Boolean

' is_nameがTrueだったら処理する
If is_name = True Then

End If

' ここからfor文で繰り返し処理
Dim i As Long

' iを1から10まで処理する
For i = 1 To 10

Next i

まとめ: コメントは重要。でも使いどき間違えないでね。

  1. 最初に'----の点線で区切る
  2. コメントの前に1行空ける
  3. なぜそのコードを書いたかをコメントする
  4. どんなコード処理なのかを簡潔にコメントする
  5. ムダなコメントを書かない

ちなみに、コメントを書くことは重要。他の人がみたとき短時間でパッと理解できるとかメリットはけっこうある。でもなんでも書けばいいってもんじゃない。

今回話したことがちゃんと腑に落ちるようになるには、リーダブルコードを読んでみるといい。

リーダブルコードをAmazonでチェック! https://amzn.to/3o55Dhl