2016年6月10日金曜日

【VBAリファレンス】記載するコードは長くても短くてもコメントはたっぷりお願いします。

VBAのコード入力も波に乗ってくると
調子にものって、ガツガツたくさんのコードを1つのプロシージャに
書いてしまいがちです。

VBAのコードというのは皆様もご存知の通り
英字と数字と記号を主に記述します。
日本語が入る時は、大体If文の条件分岐とかで
特定のワードに対して使ったり
ワークシートに対する処理を行うときなどに日本語が入り混じります。

さて、ひとまず以下のコードをご覧ください(ちょっと長いです)
---------------------------------------------------------------------------------
Sub Maxif()

Dim datavalue, cntvalue, d_one, d_two, Boobyvalue, Lastvalue, Maxvalue As Long

Maxvalue = WorksheetFunction.Max(Range("B1:B40"))

For cntvalue = 1 To Maxvalue
Lastvalue = 0

    For datavalue = 1 To 40
    Boobyvalue = Lastvalue

            If Cells(datavalue, 2) = cntvalue Then
            d_one = Cells(datavalue, 3)
            Else
            d_one = 0
            End If
       
            If Cells(datavalue + 1, 2) = cntvalue Then
            d_two = Cells(datavalue + 1, 3)
            Else
            d_two = 0
            End If
       
        If d_one > d_two Then
        Lastvalue = d_one
        ElseIf d_one < d_two Then
        Lastvalue = d_two
        Else
        End If
   
        If Lastvalue > Boobyvalue Then
        Lastvalue = Lastvalue
        ElseIf Lastvalue < Boobyvalue Then
        Lastvalue = Boobyvalue
        Else
   
        End If
         Cells(cntvalue, 7).Value = Lastvalue

    Next datavalue

Next cntvalue
End Sub
---------------------------------------------------------------------------------

これは実際に数日前に私が記述した
Maxifの代用で試しに起こしてみたコードです。

これをみて、若干イヤんなちゃった人は少なくないはずです。
これでも、そこまで長くはない記述ですが
こんなコードがたくさんあって、プロシージャがさらに連なってってなると
もう、見るだけで嫌になります。

当然のことです。


VBAではコードを記述する際
どういった処理のコードか、メモ書きのようにしておける機能があります。
人はそれをコメントといいます。

シングルクォーテーションを最初に入れて
そのあとに入れたい文字を入れます。

-----------------------------------
Sub test()

'セルのA1にこんにちはと入れる
Range("A1").Value = "こんにちは"

End Sub
-----------------------------------
VBAに記述する際もシングルクォーテーションを入れた後
文字は緑色になり
その行の最後までは処理に関係のないものとされます。
つまり、メモを入れるということになります。
改行をする場合は新たにシングルクォーテーションをつける必要があります。

記述したコードは
何も自分ばかりが見るものではなく、他の方が見たり
手入れしたりする可能性もあります。
その際、どの部分でどういった処理が起こるか
その簡易説明があるかないか
確認作業や修正作業
さらには、人に説明をしなければいけない場合など、
作業が円滑に進むものです。

おそらく、こういった作業は個人差(性格)が出るものですが
出来る限り分かりやすく、簡潔に書いておくことに越したことはありません。

今日お仕事で、私はそのコメントの記述を怠ったばかりに
どういった処理が行われているか、すぐに説明できませんでした。
戒めの意味で、自分のメガネをヤスリでサッ!ってやっておきます。


意外と軽視されがちですが
やはりコメントというのは重要です。
それは、たくさんのコードを書けば書くほど身に染みるものです。

だからといってやたらめったら書いていいものではないです。
先ほども申し上げましたが
出来る限り分かりやすく、簡潔に書くというのが前提です。

さて、先ほどのコード。
コードが付いているものを改めて乗せてみたいと思います。
---------------------------------------------------------------------------------
Sub Maxif()

Dim datavalue, cntvalue, d_one, d_two, Boobyvalue, Lastvalue, Maxvalue As Long

'B1~40までの最大値をMaxvalueに代入
Maxvalue = WorksheetFunction.Max(Range("B1:B40"))

For cntvalue = 1 To Maxvalue  'Maxvalueの数だけループ
Lastvalue = 0  'Lastvalueを初期化

    For datavalue = 1 To 40   '元データの末端行の値
    Boobyvalue = Lastvalue  'LastvalueデータをBoobyvalueデータに移行

     'd_oneに1個目のデータを代入 なければ0で初期化
            If Cells(datavalue, 2) = cntvalue Then
            d_one = Cells(datavalue, 3)
            Else
            d_one = 0
            End If
          
     'd_twoに2個目のデータを代入 なければ初期化
            If Cells(datavalue + 1, 2) = cntvalue Then
            d_two = Cells(datavalue + 1, 3)
            Else
            d_two = 0
            End If
       
        'd_oneとd_twoを比較し、大きい方をLastvalueに代入
        If d_one > d_two Then
        Lastvalue = d_one
        ElseIf d_one < d_two Then
        Lastvalue = d_two
        Else
        End If
   
        'この前にLastvalueからBoobyvalueに代入していた値と最新のLastvalueを比較し、
        '大きい方をLastvalueに代入
        If Lastvalue > Boobyvalue Then
        Lastvalue = Lastvalue
        ElseIf Lastvalue < Boobyvalue Then
        Lastvalue = Boobyvalue
        Else
   
        End If
         Cells(cntvalue, 7).Value = Lastvalue

    Next datavalue

Next cntvalue
End Sub
---------------------------------------------------------------------------------
このようにコメントの記載があるかないかで
読みにいく気持ちも変わってきます。

他人のためでもあり、自分のためのコメントなので
長い、短いにかかわらず、コメントはたっぷりしっかり記述するようにしましょう。


0 件のコメント:

コメントを投稿