こんにちは!ぐーです。
いつもブログをご覧いただき、ありがとうございます!
突然ですが、Excelでデータを作るとき、セルの右下にある「+(プラス)」マークをマウスで掴んで、ずっと下まで引っ張っていませんか?
あれ、行数が10行や20行ならいいんです。でも、仕事をしていると、1,000行とか10,000行のデータを扱うこと、よくありますよね。
マウスをドラッグしたままフリーズしたり、行き過ぎて戻ったり、途中で指を離してしまったり……。
今日は、「VBAでオートフィル(自動入力)をする方法」をお伝えします。
「ミスしない安心感」はプライスレスです。
基本のコード:Range.AutoFill
さっそくコードを見てみましょう。
VBAでは AutoFill という命令を使います。
これは、Excelのメニューにある「オートフィル」機能と同じ動きをプログラムで行うものです 。
例えばA列に商品名が入っています。B列に「1, 2, 3…」と連番を振りたいとします。
B1セルに「1」、B2セルに「2」と入力した状態で、以下のコードを実行します。
Sub AutoFill_SerialNumbers()
Dim lastRow As Long
' A列のデータの最終行を取得
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
' B1:B2のパターンを元に、最終行までオートフィルを実行
Range("B1:B2").AutoFill Destination:=Range("B1:B" & lastRow)
MsgBox "連番の入力が完了しました!", vbInformation
End Sub
解説:ここがポイント!
ポイントは「どこまでやるか(最終行)」を自動で見つけることです。
コードの中にある Cells(Rows.Count, 1).End(xlUp).Row という部分は、「A列の一番下のデータはどこ?」とExcelに聞いています。
これがあるおかげで、データが100行でも1万行でも、勝手に長さを調節してくれます。
マウスでダブルクリックしたオートフィルだとA列の途中で空白があるとそこで止まってしまいますが、これなら大丈夫です。
応用:数式を一気に反映させる
オートフィルをよく使うのは、一度組んだ関数などの「数式のコピー」ですよね。
例えば、C列に 単価 × 数量 の計算式が入っているとして、それを下まで反映させてみましょう。
Sub AutoFill_Formula()
Dim lastRow As Long
' A列を基準に最終行を取得
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
' C2セルに入っている数式を、最終行までオートフィル
Range("C2").AutoFill Destination:=Range("C2:C" & lastRow), Type:=xlFillDefault
MsgBox "計算式のコピーが終わりました!”, vbInformation
End Sub
これを標準モジュールにコピペして実行してみてください。
一瞬ですべての行に計算式が入ります。
VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。

コメント