Excel VBA | 実務レベルで役立つ Offset 活用テンプレ集

VBA
スポンサーリンク

Excel VBAでよくある「隣列に集計」「表を拡張」「自動入力」などの処理を、Offset × Resize を組み合わせてテンプレ化しました。現場でそのまま応用できる形にしています。


1. 隣列に集計結果を書き込む

用途: 元データの隣に合計や平均を出す

Sub SumToNextColumn()
    Dim rng As Range, lastRow As Long
    
    ' 最終行を取得(A列にデータがある前提)
    lastRow = Cells(Rows.Count, 1).End(xlUp).Row
    
    ' A2:A最終行を範囲に
    Set rng = Range("A2:A" & lastRow)
    
    ' 隣列(B列)に合計値を出力
    rng.Offset(0, 1).FormulaR1C1 = "=RC[-1]*2"  ' 例: 値を2倍して出力
End Sub
VB

👉 ポイント: rng.Offset(0,1) で「隣の列」を一括指定。


2. 表を自動で拡張してコピー

用途: 入力済みの表を右隣に複製して拡張

Sub ExpandTableRight()
    Dim tbl As Range
    
    ' 基準表(A1:D10)
    Set tbl = Range("A1:D10")
    
    ' 右隣にコピー(E1:H10)
    tbl.Offset(0, tbl.Columns.Count).Value = tbl.Value
End Sub
VB

👉 ポイント: tbl.Columns.Count を使うと「表の幅分」右へずらせる。


3. 自動入力(連番や日付を下方向に展開)

用途: 基準セルから下に連番や日付を自動入力

Sub AutoFillNumbers()
    Dim i As Long
    For i = 0 To 9
        Range("B2").Offset(i, 0).Value = i + 1  ' B2〜B11に1〜10
    Next i
End Sub
VB

👉 ポイント: Offset(i,0) で「下にi行」ずらして処理。


4. データの隣列に集計結果をまとめて出力

用途: 各行の売上を隣列に「累計」として出す

Sub RunningTotal()
    Dim lastRow As Long, i As Long
    lastRow = Cells(Rows.Count, 2).End(xlUp).Row
    
    For i = 2 To lastRow
        Cells(i, 2).Offset(0, 1).Value = WorksheetFunction.Sum(Range("B2:B" & i))
    Next i
End Sub
VB

👉 ポイント: Offset(0,1) で「隣列に累計」を出力。


5. 入力済みデータを自動で右隣に加工して出力

用途: 元データを加工して隣列に書き出す

Sub ProcessDataNextColumn()
    Dim lastRow As Long, i As Long
    lastRow = Cells(Rows.Count, 3).End(xlUp).Row
    
    For i = 2 To lastRow
        Cells(i, 3).Offset(0, 1).Value = "加工済:" & Cells(i, 3).Value
    Next i
End Sub
VB

👉 ポイント: 「隣列に加工結果を出す」パターンは業務で頻出。


6. 表のサイズを動的に拡張して処理

用途: 入力済みの表を「最終行まで自動認識」して処理

Sub DynamicTableProcess()
    Dim base As Range, tbl As Range
    Set base = Range("A1")
    
    ' 最終行・最終列を取得
    Dim lastRow As Long, lastCol As Long
    lastRow = Cells(Rows.Count, base.Column).End(xlUp).Row
    lastCol = Cells(base.Row, Columns.Count).End(xlToLeft).Column
    
    ' Resizeで表全体を範囲化
    Set tbl = base.Resize(lastRow - base.Row + 1, lastCol - base.Column + 1)
    
    ' 隣列にコピー
    tbl.Offset(0, tbl.Columns.Count).Value = tbl.Value
End Sub
VB

👉 ポイント: Resize で「表全体」を動的に取得 → Offset で拡張。


まとめ

  • 隣列集計: Offset(0,1) を使う
  • 表拡張: Resize で表サイズを動的に → Offset でコピー
  • 自動入力: ループ+Offset(i,0) で下方向に展開

💡 実務では「隣列に加工結果を出す」「表を拡張してコピー」「自動入力で効率化」が頻出です。

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