Offset は「基準からずらす」、Resize は「範囲の大きさを変える」機能です。
この2つを組み合わせると「基準セルから相対的にずらした位置に、任意サイズの範囲を取得」できるようになります。
つまり 「出発点をずらす」+「範囲を広げる」 で柔軟な操作が可能になります。
基本の使い方
Range("B2").Offset(1, 2).Resize(3, 4)
VB- 基準: B2
- Offset(1,2): 下へ1行、右へ2列 → D3 が基準点
- Resize(3,4): 3行×4列の範囲に拡大 → D3:G5
応用問題例
問題1:表の見出しの下にある「5行×2列の範囲」を色付けせよ
Sub Ex1()
Range("B1").Offset(1, 0).Resize(5, 2).Interior.Color = RGB(200, 255, 200)
End Sub
VB- B1を基準に「1行下」から「5行×2列」を取得 → B2:C6 を緑色に。
問題2:A列の2行目から始まる「10行分のデータ」を右隣の列へコピーせよ
Sub Ex2()
Dim src As Range, dst As Range
Set src = Range("A2").Resize(10, 1) ' A2:A11
Set dst = src.Offset(0, 1) ' B2:B11
dst.Value = src.Value
End Sub
VBResizeで「10行分」をまとめて指定。Offsetで「右隣の列」にコピー。
問題3:C3セルを基準に「下へ2行・右へ1列」から始まる「4行×3列の範囲」を赤く塗れ
Sub Ex3()
Range("C3").Offset(2, 1).Resize(4, 3).Interior.Color = vbRed
End Sub
VB- 基準 C3 → Offset(2,1) → D5
- Resize(4,3) → D5:F8 を赤色に。
問題4:選択セルを基準に「下方向にデータが続く範囲」を取得し、右隣にコピーせよ
Sub Ex4()
Dim base As Range, src As Range, dst As Range
Set base = Selection
Set src = base.Resize(base.End(xlDown).Row - base.Row + 1, 1)
Set dst = src.Offset(0, 1)
dst.Value = src.Value
End Sub
VB- 選択セルから最終行までを
Resizeで拡張。 Offsetで右隣にコピー。- 実務で「縦に並んだデータを隣列へ加工」する場面で便利。
問題5:表の左上セル(A1)から「3行下・2列右」を基準に「5行×5列の範囲」を取得し、合計値を表示せよ
Sub Ex5()
Dim rng As Range
Set rng = Range("A1").Offset(3, 2).Resize(5, 5) ' C4:G8
MsgBox "合計は " & WorksheetFunction.Sum(rng)
End Sub
VB- A1 → Offset(3,2) → C4
- Resize(5,5) → C4:G8
- 合計をメッセージボックスで表示。
練習のポイント
- Offsetで「スタート位置」をずらす
- Resizeで「範囲の大きさ」を決める
- 組み合わせると「任意の場所・任意のサイズ」を一発で指定できる。
👉 次のステップとして「動的に範囲を決める」練習がおすすめです。
例えば「最終行まで」「入力されている列数まで」などを Resize に組み合わせると、実務で役立つマクロが作れます。
