Functionプロシージャの書き方
長年プログラムを書いていますと、ある定まった形にしておいた方が見た目もスッキリしてミスが少なくなる場合があります。
今回はBoolean型を返すFunctionの定型を紹介します。
慣れれば他の型にも転用できますので、是非マスターしてください。
冒頭に返すべき型の変数を定義しておく
以前書いたプログラムを例に挙げます。
Function IsExistsSheet(sheetName) As Boolean
Dim b As Boolean '①
b = False '②
Dim sh
For Each sh In Worksheets
If sh.Name = sheetName Then
b = True '④
Exit For
End If
Next sh
IsExistsSheet = b '③
End Function
①まずは、Functionで返すべき型の変数を用意しておきます。
②次に何も起こらなかった場合(デフォルトの状態)を示すFalseを変数にセットします。
③そして最後に、Functionプロシージャ名 = b として結果を出力させます。
④途中でTrueとなるケースを書く事になると思いますが、この時点では変数 b に値をセットさせるだけで、最後の③までFunctionの出力を行わないのがコツです。
こうする事で、後で条件を変更したいなど改造する時に一貫性が保たれるため保守しやすくなります。
最後に結果を出力させるのがコツ
Boolean型ではなく、文字列などを出力する場合でも、この方法が役に立ちます。
最初に良くない例を示します。
'良くない例
Function getSN(name As String) As stirng
Select Case name
Case "リンゴ"
getSN = "F-001"
Case "いちご"
getSN = "F-002"
Case "オレンジ"
getSN = "F-003"
Case "パイン"
getSN = "F-004"
Case "スイカ"
getSN = "F-005"
Case Else
getSN = ""
End Select
End Function
この場合、プロシージャ名を変更して別の同じようなプロシージャを作る時、変更する箇所が増えて扱いずらくなります。
以下が最後に結果を出力させる例です。
'良い例
Function getSN(name As String) As stirng
Dim result As String
result = ""
Select Case name
Case "リンゴ"
result = "F-001"
Case "いちご"
result = "F-002"
Case "オレンジ"
result = "F-003"
Case "パイン"
result = "F-004"
Case "スイカ"
result = "F-005"
Case Else
End Select
getSN = result
End Function
この方法ですとプロシージャ名を変更しても最後の行だけを変更すればOKです。
Case Else は書かなくてもOKです。
まとめ
プログラムの書き方は色々な流儀があると思います。
・For文のカウント変数は i を使う
・ワークシートを示す変数は、ws や sh を使う
・Boolean型の変数には bFlag などと b で始める
・自作のプロシージャ名には myProg などと my を付ける
・Rangeは絶対的参照に使い、Cellsは相対的な参照に使う
これらは筆者の自己流の決まり事としています。
守らないといけないというよりは自発的なルールになります。
プログラムのコツは「わかりやすい事」「見やすい事」「後から理解しやすい事」だと思います。
(3つとも同じような内容ですが,,,)
Web上にはさまざまなサンプルコードが出ており、筆者も大いに参考にさせてもらっています。
中でも「見やすいなぁ」とか「わかりやすいなぁ」と感じるコードに関しては書き方も真似るようにすると良いでしょう。
そういう事を続けていく中で、バグが起こりにくいコードに集約されて行くと思いますので、積極的に取り入れていくようにしましょう。