📊 Excel VBA Top100
⚡

AutoFillSeries

自動化

選択セルの値を起点に連続データを下方向に自動入力します

指定した開始値からステップ値ずつ増加または減少する連続データを、指定した件数分自動入力するマクロです。日付の連続・曜日の繰り返し・数値の等差数列・月名の連続など様々なパターンの連続データを素早く生成できます。Excelのオートフィル機能のVBA版で、大量データの生成やテンプレート作成の際に活躍します。ユーザーがダイアログで開始値・ステップ・件数を指定するだけで処理が完了します。内部ではRange.DataSeriesメソッドまたはStep値を使ったループ処理で連続データを生成しており、Excel標準のオートフィルハンドルをドラッグする操作と同じ結果を再現します。AutoNumberRowsが「行の連番」に特化しているのに対し、本マクロは日付・数値・文字列など幅広いパターンに対応できる汎用性が特徴です。

AutoFillSeries デモ

📖 使い方

  1. VBAエディタを開く(Alt + F11)
  2. モジュールを挿入(挿入 > モジュール)
  3. 下記VBAコードをコピー&ペースト
  4. ブック上で実行(Alt + F8 でマクロ選択)
💡 実行例: 起点となるセルを選択してから AutoFillSeries を実行します

🎯 活用シーン

  • ✓スケジュール表の日付欄に1月1日から12月31日まで365日分の日付を一括入力して、年間カレンダーを素早く作成したいとき
  • ✓実験データやサンプルデータとして1から1000まで等差数列を素早く生成して、テスト用のデータセットを用意したいとき
  • ✓月次レポートの見出し行に「1月・2月・3月…12月」と12ヶ月分の月名を一括入力して、テンプレートを完成させたいとき
  • ✓会員番号や伝票番号など、規則性のある識別子を大量に生成したいとき
  • ✓研修用のダミーデータセットを短時間で用意して、Excel演習教材を作成したいとき

💡 実装のヒント

  • ▸日付の連続データを入力する場合は、開始日をシリアル値または日付文字列で指定できます。ステップに「1」を指定すれば翌日の日付が順に入力されます。
  • ▸曜日や月名などの文字列の連続データはExcelのカスタムリスト機能を利用しているため、カスタムリストに登録されたパターンであれば自動的に繰り返し入力されます。
  • ▸大量のデータを一度に生成する場合は処理速度を考慮してください。Application.ScreenUpdatingをFalseに設定してから実行すると高速化できます。
  • ▸等比数列(倍々に増加するデータ)を生成したい場合は、Stepを乗算処理に変更したロジックへカスタマイズしてください。
  • ▸生成する件数が多い場合はApplication.ScreenUpdatingをFalseにしてから実行すると処理が高速化します。

💻 VBAコード

' AutoFillSeries
' -----------------
' Macro Name: AutoFillSeries
' Description: 選択セルの値を起点に連続データを下方向に自動入力します
' Parameters: なし
' Returns: なし
' Usage: 起点となるセルを選択してから AutoFillSeries を実行します
' -----------------

Sub AutoFillSeries()
    On Error GoTo ErrorHandler

    Dim startCell As Range
    Dim countStr As String
    Dim fillCount As Long
    Dim fillRange As Range

    If TypeName(Selection) <> "Range" Then
        MsgBox "起点セルを選択してから実行してください", vbCritical, "エラー"
        Exit Sub
    End If

    Set startCell = Selection.Cells(1, 1)

    countStr = InputBox("入力する件数を入力してください", "件数", "10")
    If countStr = "" Then Exit Sub
    If Not IsNumeric(countStr) Then
        MsgBox "数値を入力してください", vbCritical, "エラー"
        Exit Sub
    End If

    fillCount = CLng(countStr)
    Set fillRange = startCell.Resize(fillCount, 1)
    startCell.AutoFill Destination:=fillRange, Type:=xlFillSeries

    MsgBox fillCount & " 件の連続データを入力しました", vbInformation, "完了"

    Exit Sub

ErrorHandler:
    MsgBox "エラーが発生しました:" & vbCrLf & Err.Description, vbCritical, "エラー"
End Sub