Excel VBA | Offset を使った 大量データ表の自動生成テンプレ

VBA
スポンサーリンク

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: 表サイズを動的に指定
  • 配列: 大量データを一括処理して高速化
VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました