エクセル VBA エラー値の扱い(備忘録)

全部を試したわけではないですが、下記のようなエラーがセルにあった場合、マクロで値を書き写す時、マクロが止まる場合と止まらない場合があります。(エクセル2016で検証)

<エラー値>
#VALUE!
#DIV/0!
#REF!
#NAME?
#N/A
#NULL!
#NUM!
こんな表示のエラーの対処について

 

エラーの出ない例1
Sub hairetu_sonomama() '実行するとエラーの入った計算式でなく値を転記する(エラーは起こさない)

Dim MyArray As Variant
MyArray = Range("B1:D10")
'・・・処理・・・
Range("B21:D30") = MyArray

End Sub

エラーの出ない例2
Sub hairetu_tukawanai() '実行するとエラーの入った計算式でなく値を転記する(エラーは起こさない)
Dim i As Long
Dim j As Long
For i = 1 To 10
For j = 2 To 4
Cells(i + 30, j) = Cells(i, j)
Next j
Next i
End Sub

エラーの出る例3
Sub hairetu_tukawanai_joukenari() 'if文でエラー入ったセルを参照するとエラー(仮に数式でなく#VALUE!という文字であってもエラー)
Dim i As Long
Dim j As Long
For i = 1 To 10
For j = 2 To 4
If Cells(i, j) <> "" Then 'エラー///////////////////////////
Cells(i + 40, j) = Cells(i, j)
End If
Next j
Next i
End Sub

その他参考例(エラーではないが、桁数が多くセルの表示が変わる場合は問題なし)
(例)1E+10(表示)10000000000(セルの内容)

Sub ketasuu_hyouji_no_error()  'if文でも問題なし
If Cells(9, 4) <> "" Then
Cells(9, 10) = Cells(9, 4)
End If
End Sub

 

なぜかを考えていました。
上記の通りエラー値のセルを転記(値として)することはできるけど、if条件などを付けたらエラーになるって、びっくりです。(ちなみにセルの数式を消して「#VALUE!」等の値にしてもエラーになります。)

結局、on error resume nextでマクロの止まる箇所にメッセージを出して、エラー値があるというようにしました。