【VBAリファレンス|実務向け】VBAで業務効率化!「オートフィル」をコードで自在に操るテクニック

スポンサーリンク

1. 導入:なぜVBAでオートフィルを自動化するのか

実務において、連番を振る作業は日常茶飯事です。手作業でフィルハンドルをドラッグすれば簡単ですが、データ行数が数千、数万と増えた場合、あるいは「条件によって開始行や終了行が変わる」ような動的な帳票を作成する場合、手作業ではミスが発生しやすくなります。
VBAでオートフィルを制御できるようになれば、ボタン一つで「常に最新のデータ量に合わせて正確な連番を生成する」ことが可能になり、作業の正確性とスピードが格段に向上します。

2. 基礎知識:オートフィルをVBAで表現する「AutoFillメソッド」

VBAでオートフィルを実行するには、RangeオブジェクトのAutoFillメソッドを使用します。
基本となるロジックは以下の通りです。
1. 基準となるセル(開始値と規則性)を準備する。
2. 基準セルから目的の範囲までを「範囲指定」する。
3. 基準セルに対してAutoFillメソッドを実行し、目的の範囲を引数として渡す。

ここで重要なのは、「基準となるセルにはあらかじめ2つのセル分以上のデータ(例:1と2)を入力しておく必要がある」という点です。これをVBAで再現することがポイントとなります。

3. 実装:柔軟な連番生成の論理

実務では、データが入っている最終行を自動取得して連番を振るのが一般的です。
1. 最終行を「Cells(Rows.Count, 列番号).End(xlUp).Row」で取得する。
2. 基準セルに「1」「2」を入力する。
3. AutoFillメソッドを使い、基準セルから最終行までの範囲を埋める。

4. サンプルプログラム:汎用的な連番生成マクロ

以下のコードは、A列のデータが存在する最終行まで、B列に「1, 2, 3…」と連番を振る実用的なサンプルです。

Sub FillSequenceNumbers()
Dim lastRow As Long

‘ A列の最終行を取得(データが入っている最後の行を特定)
lastRow = Cells(Rows.Count, “A”).End(xlUp).Row

‘ B1セルに「1」、B2セルに「2」を入力して連番の規則を作る
Range(“B1”).Value = 1
Range(“B2”).Value = 2

‘ B1:B2の範囲を基準として、B1から最終行までの範囲にオートフィルを実行
‘ Destination引数に、コピー先となる全範囲(B1から最終行まで)を指定
Range(“B1:B2”).AutoFill Destination:=Range(“B1:B” & lastRow)

MsgBox “連番の作成が完了しました!”
End Sub

5. 応用・注意点:現場でハマりやすい罠

・「基準範囲」の指定ミスに注意
AutoFillメソッドを使う際、Destination(コピー先)には必ず「基準となる範囲(今回ならB1:B2)」を含めて指定する必要があります。ここを「B3:B10」のように指定してしまうと、エラーが発生します。

・処理速度の高速化
もし数万行を一気に処理する場合は、AutoFillよりも「Range(“B1:B” & lastRow).Value = Evaluate(“ROW(1:” & lastRow & “)”)」のように、配列や関数を利用して一括入力する手法の方が、処理が速くメモリの負荷も抑えられます。まずはAutoFillで基本を理解し、データ量に応じて手法を使い分けていきましょう。

タイトルとURLをコピーしました