dポイントプレゼントキャンペーン実施中!

Aの最終行を参照してU列を最終行までコピーするマクロです。
もしA列が1行しかない場合エラーを無視させたいのですがエラーが出ます。
※2回目以降はエラーを無視してくれるようになります。
どうすれば1回目実行したときからエラーを解消することができますか?

'式の結果を一番下(変数)までコピー
On Error Resume Next
Dim LastRow As Long
LastRow = Cells(Rows.Count, "A").End(xlUp).Row


Range("U2").AutoFill Destination:=Range("U2:U" & LastRow)
On Error GoTo 0
Selection.Copy
ActiveSheet.Paste

質問者からの補足コメント

  • すみません若干訂正があります。

    1行目は見出しで2行目のA列以降を参照する感じです。
    なので2行目しかない場合にエラーが出てしまうのですがそれを無視をしたいです。

    ご教授頂いたコードで出来ますでしょうか?(><)すみません、まだ確認できてないです。明日確認予定です。。。

    No.1の回答に寄せられた補足コメントです。 補足日時:2017/09/28 21:12

A 回答 (2件)

こんにちは



On Error~~はエラー処理をするための構文で、エラーを無視するためのものとは思わない方が良いです。
「発生したエラーを無視する」という考え方は、正しく動作するプログラムを作成する大きな妨げになると思います。
わかっているエラーであれば、No1様の回答のようにエラーが発生しないようにするのがよろしいかと。

なさりたいことがはっきりとはわかりませんが、
>Range("U2").AutoFill Destination:=Range("U2:U" & LastRow)
では、U2セルの値と同じ値をU列に代入なさりたいのでしょうか? それともオートフィル?
…というのも、U2セルに「9/25」などの日付が入っていると、AutoFillメソッドを使用すると、以下9/26、9/27・・・のようになります。
このような機能も含めて利用するおつもりなら良いのですが、「まったく同じ値を代入したい」という意図であれば
 対象セル範囲.Value = Range("U2").Value
のような記述法の方が確実だと思います。
(実際の意図が不明なのでわかりませんが…)

さて、AutoFillの場合、対象とするセル範囲が元となるセル範囲より大きくないとエラーになるようです。
意味的には、範囲は同じでもよさそうな気はしますが(実際には何もしない)、MSの仕様のようで、同じ範囲ではエラーになるようですね。
それなので、
>Range("U2").AutoFill Destination:=Range("U2:U" & LastRow)
が実行されるためには、LastRowが正の値で2以外であることが必要になります。
実際には、1行目のタイトル行にコピーすることはないでしょうから、結果的に、LastRow>2であることのチェックを事前に行えばよいことになります。

例えば、
 LastRow = Cells(Rows.Count, "A").End(xlUp).Row
 If LastRow < 3 Then Exit Sub
 Range("U2").AutoFill Destination:=Range("U2:U" & LastRow)
とか。

AutoFillを利用しない方法であれば、
 LastRow = Cells(Rows.Count, "A").End(xlUp).Row
 If LastRow < 3 Then Exit Sub
 Range("U2:U" & LastRow).Value = Range("U2").Value
とか。


ついでながら、最後の2行
>Selection.Copy
>ActiveSheet.Paste
は意図的にいれているのでない限り意味はないと思いますので、削除してもよろしいかと。
    • good
    • 0

>もしA列が1行しかない場合エラーを無視させたいのですがエラーが出ます。


までわかっているのであれば
LastRow = Cells(Rows.Count, "A").End(xlUp).Row
If LastRow=1 Then Exit Sub
ではダメでしょうか。
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!