Rangeオブジェクト VBAテクニック集 VBA一覧 オブジェクト操作

【VBA】Excel VBAで.Resizeメソッドを活用する方法を徹底解説

Excel VBAでセル範囲を操作する処理は、業務自動化において非常に重要な役割を果たします。
中でも .Resize メソッドは、範囲を拡張・縮小するための基本かつ強力な手段ですが、「使いどころがよく分からない」「Offsetとの違いが曖昧」「実務でどう活かせばいいのか分からない」と感じている方も多いのではないでしょうか。

.Resizeメソッドは見た目を変えるための機能ではなく、Rangeオブジェクトが参照する“範囲そのもの”を動的に作り替えるためのメソッドです。
この考え方を理解せずに使うと、コードが読みづらくなったり、意図しないセルを操作してしまう原因になります。

この記事では、Excel VBAのResizeメソッドについて、基本構文から実務での活用例、Offsetとの違い、よくあるミス、設計上の考え方までを体系的に解説します。
Resizeメソッドを正しく理解することで、可読性が高く、拡張しやすいVBAコードを書けるようになるはずです。

✅ Resizeメソッドとは何かを正しく理解する

.Resizeメソッドは、Rangeオブジェクトに対して使用するメソッドです。
指定したセル範囲を基準として、行数・列数を変更した新しいRangeを取得できます。

重要なのは、Resizeメソッドは
セルの値や書式を変更するのではなく、参照範囲を変更するだけ
という点です。

つまり、Resizeは「操作」ではなく「参照の再定義」を行うメソッドです。
この違いを理解していないと、「なぜResizeを使うのか」が分からなくなります。


✅ Resizeメソッドの基本構文

Resizeメソッドの基本構文は以下のとおりです。

Rangeオブジェクト.Resize(RowSize, ColumnSize)
  • RowSize:行数
  • ColumnSize:列数

この2つの引数で、基準となるRangeの左上セルを起点として、新しい範囲が作られます。

・最もシンプルな例

Range("A1").Resize(3, 2).Select

このコードでは、
A1セルを起点として「3行×2列」の範囲(A1:B3)が選択されます。


✅ Resizeメソッドが使われる典型的な場面

Resizeメソッドは、次のような場面で特に威力を発揮します。

  • データ件数に応じて処理範囲を変えたい
  • 見出し行+データ行をまとめて扱いたい
  • 固定範囲ではなく、可変範囲を前提に処理したい

実務では「行数や列数が毎回変わる」ケースがほとんどです。
そのため、Resizeは動的なRange操作の基礎とも言えます。


✅ Offsetとの違いを理解することが重要

Resizeと混同されやすいメソッドに .Offset があります。
この2つは用途が異なります。

・Offsetメソッドの役割

Offsetは「位置をずらす」ためのメソッドです。

Range("A1").Offset(1, 0).Select

これはA1から1行下のA2を指します。

参考:【VBA】範囲指定の使い方:Offsetプロパティ

・Resizeとの決定的な違い

  • Offset:起点を移動する
  • Resize:範囲の大きさを変える

この違いを理解せずに使うと、コードが意図とズレていきます。


✅ OffsetとResizeを組み合わせる実務パターン

実務では、OffsetとResizeを組み合わせて使うケースが非常に多くあります。

・見出しを除いたデータ範囲を取得する例

Dim rngData As Range
Set rngData = Range("A1").Offset(1, 0).Resize(10, 3)

このコードでは、

  1. A1を基準に1行下へ移動(見出し除外)
  2. 10行×3列のデータ範囲を取得

という処理を行っています。

このように、
Offsetで位置を決め、Resizeで範囲を決める
という考え方が重要です。


✅ 最終行・最終列とResizeを組み合わせる考え方

Resizeは、最終行・最終列を取得する処理と非常に相性が良いです。

・最終行を基準に範囲を取得する例

Dim lastRow As Long
lastRow = Cells(Rows.Count, "A").End(xlUp).Row

Range("A2").Resize(lastRow - 1, 5).Select

このコードでは、

  • A列の最終行を取得
  • 見出し行を除いたデータ範囲を動的に指定

しています。

固定範囲で処理を書くよりも、
データ増減に強いコードになります。

参考:【VBA】最終行を取得する方法|Rowsを活用して効率的にデータ範囲を特定する


✅ Resizeメソッドを使った値の一括処理

Resizeは、値の代入や取得でも活躍します。

・同じ値を一括で設定する例

Range("A1").Resize(5, 3).Value = "完了"

この1行で、A1:C5に同じ値を一括で設定できます。

・配列と組み合わせた高速処理

Dim arr As Variant
arr = Range("A1").Resize(5, 3).Value

Resizeを使えば、
配列への読み込み・書き戻しも簡潔に書けます。


✅ Resizeを使うことで可読性が上がる理由

Resizeを使わずに、以下のようなコードを書くことも可能です。

Range("A1:C5").Value = "完了"

一見シンプルですが、この書き方には問題があります。

  • 範囲が固定されている
  • 行数・列数の意味が分かりにくい

Resizeを使うと、

Range("A1").Resize(5, 3).Value = "完了"

となり、

  • 起点セルが明確
  • 行数・列数の意図が明確

になります。
これは保守性の高いコードを書く上で非常に重要です。


✅ よくあるミスと注意点

・Resizeの引数を省略できると勘違いする

Resizeは、RowSize・ColumnSizeの両方を指定する必要があります。
片方だけ省略することはできません。

・基準セルを意識せずに使う

Resizeは「左上セル」を基準に動作します。
意図しないセルを起点にしてしまうと、範囲がズレます。


✅ 実務での典型的な活用例

・表全体をまとめて処理する

  • 並べ替え
  • 書式設定
  • 条件付き処理

これらはResizeで範囲を定義してから処理すると、コードが整理されます。

・帳票出力やテンプレート生成

固定フォーマット+可変行数の帳票では、Resizeが欠かせません。


✅ Resizeメソッドを設計レベルで使いこなす考え方

Resizeは単なる便利メソッドではありません。
「このRangeはどこを起点に、どの大きさなのか」
という設計意図をコードに表現するための手段です。

  • 起点を明示する
  • サイズを数値で表す
  • 可変前提で考える

この3点を意識するだけで、VBAコードの品質は大きく変わります。


✅ 将来の自動化・拡張を見据えたResizeの使い方

Resizeを使ったコードは、

  • データ件数が増えても壊れにくい
  • RPAや外部連携でも扱いやすい

という特徴があります。
そのため、将来的な自動化を考える場合にも非常に有効です。


 

✅ まとめ:ResizeメソッドはRange操作の基礎であり武器になる

  • ResizeはRangeの参照範囲を変更するメソッド
  • Offsetと役割を混同しないことが重要
  • 可変データに強い設計ができる
  • 可読性・保守性が大きく向上する

Resizeメソッドを正しく理解すると、
Excel VBAでのRange操作は一段階レベルアップします。
場当たり的な範囲指定から卒業し、
意図が伝わるVBAコードを書けるようになりましょう。

参考:【VBA】Range型の使い方|セル範囲を自在に操作する基本と応用テクニック

    -Rangeオブジェクト, VBAテクニック集, VBA一覧, オブジェクト操作