このサイトの記事内では「アフィリエイト広告」などの広告を掲載している場合があります。
消費者庁が問題としている「誇大な宣伝や表現」とならないよう配慮しコンテンツを制作しておりますのでご安心ください。
問題のある表現が見つかりましたらお問い合わせよりご一報いただけますと幸いです。

【VBA】Resizeでエラーが発生する原因(実行時エラー1004)

2024年3月29日

【VBA】Resizeでエラーが発生する原因(実行時エラー1004)

Resizeプロパティを使っていると実行時エラー1004が発生することがあります。

今回はエラーが発生する原因を紹介します。

VBAが難しいと感じたら
ココナラにてマクロ(VBA)の作成代行を始めました。
ご依頼はこちらから

エラー原因:負の値を指定している

Excelシート
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引数を省略すると列方向にだけ範囲を広げることができます。

詳しくはこちらの記事を参照ください。

VBAが難しいと感じたら
ココナラにてマクロ(VBA)の作成代行を始めました。
ご依頼はこちらから

VBA

Posted by やろまい