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)で下方向に展開
💡 実務では「隣列に加工結果を出す」「表を拡張してコピー」「自動入力で効率化」が頻出です。
