Excel VBA > VBA:実務活用 > 「Range,Cells」と「Resize」のセル範囲指定を比べてみる
このエントリーをはてなブックマークに追加

「Range,Cells」と「Resize」のセル範囲指定を比べてみる

「Range、Cells組み合わせ」と「Resize」での範囲指定

セル範囲の取得や設定はいくつかの方法がありますが、とりわけ今回提示しているプロパティについては、頭のなかで混乱している点も有り自身への確認を込めて比べてみました(笑)。

「Range、Cells組み合わせ」と「Resize」の違いはあるか

これらプロパティで混乱するのは範囲の指定方法です。そこで同じ表をそれぞれの方法で選択することで違いを見ていきたいと思います。

「Range,Cells」と「Resize」のセル範囲指定を比べてみる_01
上記の表を「Range、Cells組み合わせ」と「Resize」の両方で指定してみます。
下記は、それぞれの方法で指定した範囲を選択するマクロです。

Sub 表を選択()

    '' ——————————
    '' A1から始まる表の範囲を選択する
    '' ——————————

    With Worksheets(“Sheet1”)

        '' RangeとCells
        .Range(.Cells(1, 1), .Cells(4, 2)).Select

        '' Resize
        .Cells(1, 1).Resize(4, 2).Select

    End With

End Sub

「Range,Cells」と「Resize」のセル範囲指定を比べてみる_02

それぞれの選択した結果については割愛しますが、各コードの黄色部分、2つ目の行と列の位置で指定していますが、共に元の表と同じ範囲を選択しますね。
つまり上記の2つの方法は結果だけを見ればどちらでも良いということになります。

「Range、Cells組み合わせ」と「Resize」の明らかな違い

では、違いがあるのはどんな場合でしょうか?例えば以下の表の場合です。

「Range,Cells」と「Resize」のセル範囲指定を比べてみる_03

今度は表の表の大きさを変えずに開始位置を変更します。

Sub 表を選択2()

    '' ——————————
    '' A1から始まる表の範囲を選択する
    '' ——————————

    With Worksheets(“Sheet1”)

        '' RangeとCells
        .Range(.Cells(2, 3), .Cells(4, 2)).Select

        '' Resize
        .Cells(2, 3).Resize(4, 2).Select

    End With

End Sub

上記の黄色は表の始点の行列位置を変えたところです。
この結果以下の通りになりました。
「RangeとCellsの組み合わせ」の選択結果
「Range,Cells」と「Resize」のセル範囲指定を比べてみる_04

「Resize」の選択結果
「Range,Cells」と「Resize」のセル範囲指定を比べてみる_05

「RangeとCellsの組み合わせ」は、先ほどのコードの先頭部分を変えただけでは期待した範囲が取得できなくなることが分かります。

そもそも
「RangeとCellsの組み合わせ」

→「開始行列位置」と「終了行列位置」

「Resize」

→「開始行列位置」と「(開始からの)行数と列数」

と求められる数値が変わってきます。
この結果として2つ目の表では違いが明らかになりました。
数値のベタ打ちだと気づきやすいですが、配列の要素数等で指定する際は要注意ですね。

どちらが適しているかはケースバイケースになるかと思いますが、Rangeを使う場合、前提としてRangeが参照しているシートがアクティブになっていないとエラーになる点を考えると、複数シートが含まれる処理をする時などは、セル範囲の取得や設定では「Resize」の方が勝手がよいかもしれません。

カテゴリ:VBA:実務活用