Excel VBA | Offset × Resize × ForEach の 黄金 100 パターン集

VBA
スポンサーリンク

表構造(Offset × Resize × 自動検出テンプレ集)

ここでは Offset × Resize × 自動検出 を組み合わせて「表全体を柔軟に扱う」ための基本パターンをまとめます。
実務でよくある「ヘッダ検出」「データ抽出」「表拡張」「コピー」などを一気に整理しました。


41. ヘッダ行を自動検出

Dim headerRow As Long
headerRow = Range("A1").Row   ' 通常は1行目がヘッダ
Range("A" & headerRow).Resize(1, Cells(1, Columns.Count).End(xlToLeft).Column).Font.Bold = True
VB

👉 ヘッダ行を自動検出して太字に。


42. データ部分だけ Resize で抽出

Dim lastRow As Long, lastCol As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
lastCol = Cells(1, Columns.Count).End(xlToLeft).Column
Range("A2").Resize(lastRow - 1, lastCol).Select
VB

👉 ヘッダを除いた「データ部分」だけを抽出。


43. 最終行と最終列を同時に検出

Dim lastRow As Long, lastCol As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
lastCol = Cells(1, Columns.Count).End(xlToLeft).Column
MsgBox "最終行: " & lastRow & " 最終列: " & lastCol
VB

👉 表のサイズを自動検出。


44. 表全体のブロックを一括取得

Dim tbl As Range
Dim lastRow As Long, lastCol As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
lastCol = Cells(1, Columns.Count).End(xlToLeft).Column
Set tbl = Range("A1").Resize(lastRow, lastCol)
tbl.Select
VB

👉 表全体を一括で範囲化。


45. 表の右側にサマリー列追加

Dim tbl As Range
Set tbl = Range("A1").CurrentRegion
tbl.Offset(0, tbl.Columns.Count).Resize(tbl.Rows.Count, 1).Value = "Summary"
VB

👉 表の右隣に「サマリー列」を追加。


46. 表の下に集計行を追加

Dim tbl As Range
Set tbl = Range("A1").CurrentRegion
tbl.Offset(tbl.Rows.Count, 0).Resize(1, tbl.Columns.Count).FormulaR1C1 = "=SUM(R1C:R[-1]C)"
VB

👉 表の下に「合計行」を追加。


47. 表の左にフラグ列を自動挿入

Dim tbl As Range
Set tbl = Range("A1").CurrentRegion
tbl.Offset(0, -1).Resize(tbl.Rows.Count, 1).Value = "FLAG"
VB

👉 表の左側に「フラグ列」を追加。


48. 表の右下に更新日時を記録

Dim tbl As Range
Set tbl = Range("A1").CurrentRegion
tbl.Cells(tbl.Rows.Count, tbl.Columns.Count).Offset(1, 0).Value = "更新: " & Now
VB

👉 表の右下に更新日時を記録。


49. 表サイズに応じて拡張処理

Dim tbl As Range
Set tbl = Range("A1").CurrentRegion
tbl.Resize(tbl.Rows.Count + 2, tbl.Columns.Count + 1).Interior.Color = vbCyan
VB

👉 表サイズを拡張して処理(例: 色付け)。


50. 表範囲を Offset し別シートへコピー

Dim tbl As Range
Set tbl = Range("A1").CurrentRegion
tbl.Copy Destination:=Sheets("Sheet2").Range("B2")
VB

👉 表全体を別シートの指定位置へコピー。


✅ まとめ

  • CurrentRegion → 表全体を自動検出
  • Resize → 表サイズを拡張・縮小
  • Offset → 表の左右上下に列や行を追加
  • 最終行・最終列検出 → 実務で必須の「動的表処理」

💡 この 10 パターンをベースにすれば「表構造の自動検出と拡張処理」が自在にできます。

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