Excel VBA | Offset × Resize の応用問題(初心者〜中級向け)

VBA
スポンサーリンク

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
VB
  • Resize で「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 に組み合わせると、実務で役立つマクロが作れます。

VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました