調子にものって、ガツガツたくさんのコードを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
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 件のコメント:
コメントを投稿