Offset を使った「大量データ表の自動生成」テンプレート集
Excel VBAで大量データを扱うときは、セルを1つずつ操作するのではなく
- 配列にまとめて処理
- Offsetで相対位置を指定して一括書き込み
を組み合わせると高速で柔軟に表を生成できます。
基本テンプレ:連番表の自動生成
Sub GenerateTable_Basic()
Dim i As Long
Dim base As Range
Set base = Range("A2") ' 表の開始セル
' 100行分の連番を生成
For i = 0 To 99
base.Offset(i, 0).Value = i + 1 ' A列に連番
base.Offset(i, 1).Value = "商品" & i + 1 ' B列に商品名
base.Offset(i, 2).Value = Rnd() * 1000 ' C列にランダム売上
Next i
End Sub
VB👉 ポイント: Offset(i,列番号) で「基準から相対的にセルを指定」して大量データを展開。
高速版:配列を使った一括書き込み
Sub GenerateTable_Array()
Dim dataArr() As Variant
Dim i As Long
' 100行×3列の配列を用意
ReDim dataArr(1 To 100, 1 To 3)
For i = 1 To 100
dataArr(i, 1) = i
dataArr(i, 2) = "商品" & i
dataArr(i, 3) = Rnd() * 1000
Next i
' A2セルを基準に一括書き込み
Range("A2").Resize(100, 3).Value = dataArr
End Sub
VB👉 ポイント:
- 配列にまとめて処理 → 1回の書き込みで高速化
Resizeで表サイズを指定 →Offsetと組み合わせれば「隣列や下方向」にも展開可能
応用テンプレ:日付 × 商品 × 売上の表生成
Sub GenerateTable_DateProduct()
Dim dataArr() As Variant
Dim i As Long, j As Long
Dim products As Variant
products = Array("りんご", "みかん", "バナナ")
ReDim dataArr(1 To 30 * UBound(products) + 30, 1 To 3)
Dim rowIdx As Long: rowIdx = 1
For i = 1 To 30
For j = LBound(products) To UBound(products)
dataArr(rowIdx, 1) = DateSerial(2025, 11, i) ' 日付
dataArr(rowIdx, 2) = products(j) ' 商品
dataArr(rowIdx, 3) = Rnd() * 5000 ' 売上
rowIdx = rowIdx + 1
Next j
Next i
' A2セルから表を展開
Range("A2").Resize(rowIdx - 1, 3).Value = dataArr
End Sub
VB👉 ポイント:
- 日付 × 商品の組み合わせをループで生成
- 大量データでも配列にまとめて一括書き込み
実務での使いどころ
- 売上表の自動生成: 日付 × 商品 × 金額を一括展開
- 勤怠表の自動入力: 社員 × 日付 × 勤務時間を自動生成
- 在庫表の拡張: 商品 × 倉庫 × 在庫数を一括書き込み
✅ まとめ
- Offset: 相対位置指定で「隣列・下方向」へ展開
- Resize: 表サイズを動的に指定
- 配列: 大量データを一括処理して高速化

