Excelで名簿や一覧表を管理していると、 連番(No.)を振り直したい場面はよくあります。
- 途中の行を削除した
- 並び替えをした
- 抽出結果だけを残した
こうなると、連番が「1, 2, 4, 7…」のようにバラバラになりがちです。
そこで今回は、空白行を無視して、きれいに連番を振り直すExcelVBAマクロをご紹介します。
この記事でできること
- 空白行をスキップして連番を振る
- 途中に空白があってもズレない
- 指定列に連番を自動入力
- 何度でも再実行できる
今回使用するシート例(途中空白行あり
今回はこのシートを使用します。
4行目をわざと空白行として、ただしく動作するか検証していきます。
※シート名は任意で問題ありません。

空白を無視して連番を振るマクロ(コピペOK)
以下のコードを標準モジュールに貼り付けてください。
Option Explicit
Sub AutoNumberIgnoreBlank()
Dim ws As Worksheet
Dim lastRow As Long
Dim r As Long
Dim no As Long
' ===== 設定 =====
Set ws = ActiveSheet
Const TARGET_COL As Long = 1 ' 連番を振る列(A列=1)
Const CHECK_COL As Long = 2 ' 空白判定に使う列(氏名列など)
' =================
' 最終行を取得(CHECK_COL基準)
lastRow = ws.Cells(ws.Rows.Count, CHECK_COL).End(xlUp).Row
no = 1
For r = 2 To lastRow
' チェック列が空白でなければ連番を振る
If ws.Cells(r, CHECK_COL).Value <> "" Then
ws.Cells(r, TARGET_COL).Value = no
no = no + 1
Else
' 空白行は連番をクリア
ws.Cells(r, TARGET_COL).ClearContents
End If
Next r
MsgBox "連番の再作成が完了しました。", vbInformation
End Sub
コード解説(初心者向け)
① 空白判定に使う列を決める
Const CHECK_COL As Long = 2
この列にデータが入っている行だけを「有効な行」として扱います。
通常は「氏名」「ID」「商品名」など、必ず入る列を指定します。
② 空白行はカウントしない
If ws.Cells(r, CHECK_COL).Value <> "" Then
この条件により、 途中に空白行があっても連番がズレません。
③ 再実行しても安心
毎回 A列を一度クリアしながら振り直すので、 並び替え・抽出後でも何度でも正しく再採番できます。
よくある応用
① ヘッダーがない表の場合
ループ開始を For r = 1 To lastRow に変更してください。
② 抽出後のデータだけ連番を振りたい
オートフィルターと組み合わせて、 表示されている行だけに連番を振ることも可能です(応用編)。
③ 連番ではなく「管理番号」を振りたい
ws.Cells(r, TARGET_COL).Value = "ID-" & Format(no, "000")
→ ID-001、ID-002 のような形式にもできます。
実行手順
- 対象のExcelシートを表示
- Alt + F11 → 標準モジュールを追加
- マクロを貼り付け
- AutoNumberIgnoreBlank を実行
まとめ:連番は「空白無視」が実務では正解
連番は一見簡単そうですが、 削除・並び替え・抽出をするとすぐ崩れます。
- 空白行を無視して採番
- 基準列で「有効行」を判定
- 何度でも再実行できる
今回のVBAを使えば、 実務で使える安定した連番処理が簡単に実装できます。
ぜひ、名簿・管理表・一覧表で活用してみてください。


コメント