Excel で空行やセル結合が混じっても連番を振る関数

Excel で連番を振る時、数値そのままだと行追加や行削除のせいでズレる時があるし、ROW() 関数だと見出し行などを調整している間に中の数字がズレてしまうことがある。

そこで、ちょっと複雑な数式の組み合わせで、空行やセル結合が間に混じっても正しく連番を振ってみる。

縦に連番を振る場合

縦に連番を振る時は以下の関数を縦に並べていく。

=IFERROR(MAX(INDIRECT(ADDRESS(1,COLUMN())):INDIRECT(ADDRESS(ROW()-1,COLUMN())))+1,1)

この関数だけを縦に並べれば 1 からの連番になるが、先頭行に任意の数字を入力しておくと、その数字からインクリメントした連番になる。

横に連番を振る場合

横に連番を振る時は以下の関数を使う。

=IFERROR(MAX(INDIRECT(ADDRESS(ROW(),1)):INDIRECT(ADDRESS(ROW(),COLUMN()-1)))+1,1)

毎度入力するのが大変なのでマクロにする

毎回この数式をコピペしたりするのは面倒なので、個人用マクロブックなりアドインなりで入力できるようにしておく。

連番を振りたいセル範囲を選択した状態で以下のマクロを呼び出せば、選択していたセルにこの数式が埋め込まれていく。

Sub 縦に連番()
  Selection.Formula = "=IFERROR(MAX(INDIRECT(ADDRESS(1,COLUMN())):INDIRECT(ADDRESS(ROW()-1,COLUMN())))+1,1)"
End Sub

参考