【VBA】Resizeでエラーが発生する原因(実行時エラー1004)
Resizeプロパティを使っていると実行時エラー1004が発生することがあります。
今回はエラーが発生する原因を紹介します。
エラー原因:負の値を指定している
Sub ResizeError()
'''Resizeプロパティでエラーとなる
Dim rngResize As Range
'A5セルを基準に1つ上の行、3つの列を取得したい
Set rngResize = Range("A5").Resize(-1, 3)
End Sub
このサンプルコードではA5セルを基準に1つ上の行、3つの列を取得しようとしています。
しかし、このコードを実行するとエラーが発生します。
エラー原因は1つ上の行を指定しようとしてResizeプロパティの引数に-1を指定していることです。
Resizeプロパティの引数には負の値を入れることができません。
そのためResizeプロパティでは基準セルの上や左のセルを指定することはできません。
エラー対策:負の数はOffsetプロパティに置き替える
Sub ResizeNotError()
'''負の数はOffsetに置き替える
Dim rngResize As Range
'Offsetで1つ上のセルを取得して、Resizeで3つの列に広げる
Set rngResize = Range("A5").Offset(-1).Resize(, 3)
End Sub
基準セルの上や左のセルを指定したいときはOffsetプロパティを組み合わせます。
Offsetプロパティはセルを移動させるプロパティです。
例えばOffset(-1 , -1)とすれば1つ上で1つ左のセルに移動させることができます。
サンプルコードではOffsetプロパティで1つ上のセルに移動して、その後Resizeプロパティで列の範囲を広げています。
ちなみに、ResizeプロパティではResize(, 3)のように第1引数を省略すると列方向にだけ範囲を広げることができます。
詳しくはこちらの記事を参照ください。