おしゃれにいけてる?

散歩やお買い物のことなどを書いています・・・

Entries

 EXCEL VBA TIPs. (エラー処理ざんまい)

 エクセル・マスターなら知ってる事も、ジョニーの様な初心者は知らない、エクセルマクロのちょっとした TIPs。今日のは、

   「ジョウシキテキ。」

かも。

 ワークシート関数を使うと、セルの状態によっては、思いもかけずエラーが出てしまうことがある。エラー処理は必須。対処方法はいくつかある。

 まずは、エラーを無視する方法。エラーが出ても問題ないのなら、無視していい。エラーが出る関数の直前で以下のステートメントを書く。

   On Error Resume Next

これを書いとくと、エラーの出た次の行から、何事もなかったかのように、実行が続けられる。

この後発生したエラーはすべて無視されるので、エラーが出る関数の後に、

   On Error Goto 0

を書いて、エラー処理を無効化しておくのを忘れずに。毎回やっといた方が、バグが少なくなる気がする。

 次は、エラーが発生したら、エラー処理部分にジャンプする方法。エラーが発生する関数の前に、On Error Goto LABEL を書いておくと、エラーが発生した瞬間、LABEL 行にジャンプしてくれる。

   Dim retI As Integer
   On Error GoTo ERROR
   retvI = Application.WorksheetFunction. _
         Match("おしゃいけ", Range("BLOGName"), 0)
   正常に取得できた時の処理を書く
     ・
     ・
   Exit Sub
  ERROR:
   エラー処理を書く
  End Sub

この方法を使うと、ラベル行にジャンプしてしまうので、プログラムの見通しが悪くなる。

 そこで、エラーが発生するワークシート関数を使う場合は、必ず Function を使ってラップしてしまうってのが、グー。

   Public Fuction wrapMatch(param As String)
    Dim retI As Integer
    On Error GoTo ERROR
     retI = Application.WorksheetFunction. _
         Match( param, Range("BLOGName"), 0)
     wrapMatch = retI
    Exit Function
   ERROR:
     wrapMatch = -1
   End Function

これを見て、

   「 retI 使わないで、直接 wrapMatch に代入しろよ!」

って思うかもしれない。

   wrapMatch = Application.WorksheetFunction. _
         Match( param,Range("BLOGName"), 0)

って感じで。

でも、それだと、wrapMatch は Variant 型なのでエラーにならない。で、呼び出し元に「#エラー#」が返ってしまって、そこで止まってしまう。

 これを回避する方法が、次。

   Public Fuction wrapMatch(param As String)
    wrapMatch = Application.WorksheetFunction. _
         Match( param, Range("BLOGName"), 0)
    If IsError(wrapMatch) Then
     wrapMatch = -1
    End If
   End Function

IsError() は Variant 型の変数の値がエラーかどうか判断してくれる。これが一番すっきりしてるかも。

 って事で、おすすめのワークシート関数のエラー処理は、

   ・Fuction で wrap する。
   ・IsError 関数でエラーを検出する

かな?

スポンサードリンク

Comment

Comment_form

管理者のみ表示。

左サイドメニュー

プロフィール

Author:ジョニー

ゆるゆると日々を過ごしてしまう、ダメダメ野郎の航海日記。



クリック (・。・)yoro

このブログ内を検索

最近の記事

カテゴリー

最近のコメント

QRコード

QRコード

月別アーカイブ

右サイドメニュー

カレンダー

02 | 2020/03 | 04
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -

スポンサードリンク

FC2カウンター

#1136