/【さらばインデント地獄】Excelの関数で項目番号を自動化2019-04-20【さらばインデント地獄】Excelの関数で項目番号を自動化Tweet設計書や仕様書のインデントに苦しんでいるエンジニアは数多くいるのではないでしょうか。私が今の現場で使っている仕様書のフォーマットは、とにかくインデントの項目番号を振る作業がメンドくさい......やっと重い腰を上げて、自動化できる関数を作成してみたので、よろしければ参考にしてみて下さい。こんなフォーマットです私が現在使っている仕様書のフォーマットはこのようなものです。入力するセルの列を変えることでインデント(字下げ)をする方式のものです。全ての項目番号を振り直さなければいけません。いい加減嫌気がさしたので、自動化できる関数を作ってみました。4種類の関数で自動化できるじゃん蓋を開けてみれば、上記の画像のように4ブロックに分けて関数作成するだけで、自動化ができました。A列はF列B列はG列C列はH列D列はI列をそれぞれ対象行として参照しています。入力されていなかったら0を返すようになっています。それではブロックごとに説明していきます。1単純に1と0を入力4ブロックの関数と言いましたが、実はこの部分だけ関数は必要ありません。A2に1、B2からD2に0を入力するだけです。関数を使いたいのであれば、A2セルに=IF(F2<>””,ROW()-1,0)と入力して、D2セルまでコピペして下さい。対象行に値が入力されていたら、行数マイナス1を返す関数です。この場合、先頭に行を追加したら値がずれるので注意です。2対象行、一つ上のセル、一つ右のセル、を参照A3セルの数式はこちら=IF(F3<>””,A2+1,IF(B3<>0,A2,0))これをC17セルまでコピペして下さい。対象行に値が入っていたら一つ上のセルにプラス1対象行が空で、一つ右が0以外の場合一つ上のセルと同じ値を返す対象行が空で、一つ右が0の場合0を返すというものです。・上の値にプラス1・上と同じ値を返す・0を返すという3パターンの出力が求められるので、IF文が2つ重なるようになります。3対象行と一つ上のセルを参照こちらはシンプルです。対象行に値が入っていなかったら0を返します。D3セルに=IF(I3<>””,D2+1,0)を入力して、一番下までコピペして下さい。最後は出力をする関数です。C2セルに下の関数を入力して、一番下までコピペして下さい。項目番号が0の場合一つ左のセルまでをハイフン区切りで表示する(0以外の値をハイフンで表示する)というものです。完成!あとはA列からD列を非表示にして、見た目を整えたら完成!これで間に処理が増えても、項目番号を振り直すのは簡単です。処理が増えた場合、追加したい箇所に行を挿入して......関数が入力されている部分を選んで、オートフィル(右下の四角を引っ張るやつ)でズラーっと......はい完成!まとめいかがだったでしょうか。頻繁に修正が入るようなドキュメントだったら便利だと思います。「もっと楽に出来る方法があるんじゃね?」ということを常に考えて、とにかくそれを実践してみることが重要なのだと思います。効率化を考える癖をつけて、失敗してもいいからやってみる、ということがスキルアップに繋がるのではないかなーと。