pagetakaBlog

最近リフォームと鳥取県日南町の記事多め。写真、PC、ネット等の話題も

VBA:Excel「範囲の次のセル」で条件によってはエラー発生

とある本には実行できるように書いてあるのでやってみたらエラーが発生しました。

ExcleVBA、実行時エラー1004
[画像:ExcleVBA、実行時エラー1004]

VBAを実行したところエラーが発生し、エラーコードは「1004」ということだそうです。「アプリケーション定義またはオブジェクト定義のエラーです。」と案内がついています。

本の解説が違うんだろうかと、いろいろやっているうち、「Offset() 」が何を指しているか状況によって違うのではないかと想像し、チェックしてみました。

<エラーは最初のデータのコピペで発生する>

Sub down_Offset()
On Error GoTo Err1
Range("A2").Copy Range("A5").End(xlDown).Offset(1, 0)
Debug.Print "実行 " & Now
Exit Sub

Err1:
Range("A2").Copy Range("A500").End(xlUp).Offset(1, 0)
Debug.Print "エラー発生 " & Now
End Sub

VBAの概要は、A2に入力されたデータをコピーし、A5の下から始まる下方向のセルで、文字などが入っていない(≒空白)最初のセルに貼り付けなさい、というものです。ただし、この概要説明は、VBAを読める人には正確でない、ということになるのですが、ひとまず放置…。
で、この結果、A2に入力した後、VBA「down_Offset()」を実行すると、値があるセルの一行下にコピペされる、というものです。

エラー処理(On Error GoTo Err1)は、エラーの発生時、それを回避する「一つの方法」として仮に設定してみました。

[画像:最初のデータ入力前]
上のVBAを実行すると、下のようになりました。
[[画像:最初のデータ入力後、VBA実行するとエラーになる]]
[画像:最初のデータ入力後、VBA実行するとエラーになる]

エラー処理の結果が、「イミディエイト」ウインドウにタイムスタンプとともに表示されています。エラーが発生したときは、500行目から逆向きにチェックするという「仮対策」的な命令により、実際には(当面)問題なく動作するようにしています。

<2回目からのデータ入力、VBAではエラーが発生しない>

2回目からのデータ入力、VBAではエラーが発生しない
[画像:2回目からのデータ入力、VBAではエラーが発生しない]

「イミディエイト」ウインドウ(画像上)を見ると、2回目の時はエラーが発生していないことがわかります。

<横着にエラーを回避することはできなかった>

以下のVBAは、1回目のみ動きますが、2回目以降も第6行にコピペしてうまくいきません…シクシク。

Sub down_Offset()
Range("A2").Copy Range("A4").End(xlDown).Offset(1, 0)
End Sub

横着にエラーを回避するVBA、どうやったらできるんだろう…。お分かりの方、お知らせください~。