マクロでIFERRORを使ってみる(失敗談)
例えば、こんな値が並んでいるとする。
数字の各値に10を加えて右隣に表示したいのだが、数字以外の値に10を加えれば、エラーになってしまう。
こんな時は、IFERROR関数を用いると便利だ。
support.office.com
平たく言うと、「エラーだったら、何表示します?」って関数だ。
例えば今回、「10を加えてエラーだったら、元の数字を表示する」のような使い方が出来る。
では、これをマクロで使用することはできるのだろうか。先程の内容をマクロで再現してみた。
Sub test() Dim r As Range For Each r In Selection r.Offset(, 1).Value = WorksheetFunction.IfError(r.Value + 10, r.Value) Next End Sub
結果は失敗。「型が違う」と怒られてしまった。
IFERRORで評価する前に、VBAがエラーを拾ってしまうということだろうか。
もしマクロで再現するとしたら、一旦エラーを無視して処理を実行し、エラーだった場合は処理前の値をセットするなどが考えられる。
Sub test() Dim r As Range Dim Result As Variant For Each r In Selection On Error Resume Next Result = r.Value + 10 Select Case Err.Number Case 0 r.Offset(, 1) = Result Case Else r.Offset(, 1) = r.Value End Select On Error GoTo 0 Next End Sub
もっともこの場合に限って言えば、先に数値か否かを評価する方がスマートかも。
Sub test() Dim r As Range For Each r In Selection If IsNumeric(r.Value) Then r.Offset(, 1) = r + 10 Else r.Offset(, 1) = r End If Next End Sub
未だ、道半ば。もう少し検討したうえで、昨日の内容と合流する予定です。
参考まで。