|
こんにちは。かみちゃん です。
▼甘木 さん:
>コードの短さという点からは、かみちゃんさんのご指摘のとおりです。
>
>関連してエラー対応という観点からいくつかメモしておきます。
>1.まず、On Error Resume Next の意味を理解してください。
> エラーが発生してもそれにかまわず(止まらず)次の行に制御を
> 進めるというステートメントです。既にご存知かもしれませんが。
>
>2. On Error Resume Next
> はむやみに使わず、なおかつ、できるだけ最小限の範囲で使い、
> On Error GoTo 0
>でできるだけ早い時点で元に戻す習慣をつけておいてください。
>宣言しっぱなしにしておくと、意図しない部分でのエラーを隠蔽してしまいますから。プロシージャーから抜けると元に戻りはしますが、明示的に書いたほうが
>良いと個人的には思います。(異なる意見も有り得ます。)
>
>3. またエラー部分の判定は
> If return_val Is Nothing Then は NG
> If return_val = "" Then は OK
>であることも注意しておいてください。
いろいろとメモを書かれているのですが、
Dim return_val
という宣言をしているのであれば、
On Error Resume Next
On Error GoTo 0
でエラートラップをしているのには、違和感があります。
エラーが発生したときは、
return_val
には、エラー値が格納されることを利用すればいいので、
> On Error Resume Next
> はむやみに使わず、なおかつ、できるだけ最小限の範囲で使い
と言う観点では、今回の場合は、使わないほうがいいということになります。
Function time_to_data1(Id As Integer, Data_Range As Range, Line As Integer)
Dim return_val
return_val = Application.VLookup(Id, Data_Range, Line, False)
If IsError(return_val) Then
time_to_data1 = 0
Else
time_to_data1 = return_val
End If
End Function
Dim return_val
は、
Dim return_val As Variant
と宣言しているのと同じですが、
Application.VLookup
などと、記述する場合に、エラー値が得られるので、それで分岐するときには
重宝すると思います。
以上、余計なコメントとは思いましたが、気になりましたので、書かせていただきました。
|
|