Excel仕様書の段落番号を自動採番する

Excelで仕様書を書くのは嫌な作業だけれど、時に段落番号の手打ちが苦痛だったので、自動 採番する数式を考えた。段落番号のフォーマットは、各階層の番号をデリミタでつな ぐものとした。(例: 1-1-1.)

=MID(INDIRECT("$B" & MAX(IF($B$3:$B7<>"",ROW($B$3:$B7)))),1,LEN(INDIRECT("$B"&MAX(IF($B$3:$B7<>"",ROW($B$3:$B7)))))-1) & "-" & COUNTA(INDIRECT(ADDRESS((MAX(IF($B$3:B7<>"",(ROW($B$3:$B7))))+1),COLUMN()) & ":" & ADDRESS((ROW()-1),COLUMN())))+1 & "."

配列数式なので、貼った後にCtrl+Shift+Enterする。

動作

一つ上の段落から、最後の要素を探して、同じ段落中の自分の連番を末尾に追加する。 こんなイメージ。

f:id:tei6:20170724234627p:plain

以下の式で上の段落の最後の要素を参照する。

INDIRECT("$B" & MAX(IF($B$3:$B7<>"",ROW($B$3:$B7))))[f:id:tei6:20170724234627p:plain]

また、

COUNTA(INDIRECT(ADDRESS((MAX(IF($B$3:B7<>"",(ROW($B$3:$B7))))+1),COLUMN()) & ":" & ADDRESS((ROW()-1),COLUMN())))

で自セルの段落中の通番をカウントする。