【さらばインデント地獄】Excelの関数で項目番号を自動化

  • このエントリーをはてなブックマークに追加

設計書や仕様書のインデントに苦しんでいるエンジニアは

数多くいるのではないでしょうか。

私が今の現場で使っている仕様書のフォーマットは、

とにかくインデントの項目番号を振る作業がメンドくさい……

やっと重い腰を上げて、自動化できる関数を作成してみたので、

よろしければ参考にしてみて下さい。

こんなフォーマットです

私が現在使っている仕様書のフォーマットはこのようなものです。

入力するセルの列を変えることでインデント(字下げ)をする方式のものです。

スペースやタブをカチカチ打って字下げする必要がないので、便利は便利ですが、

とにかく項目番号を振るのがめんどくさい!

項目が増えれば増えるほど、番号は長くなっていくし、

仕様が変わって、最初に行う処理が増えた日には、

全ての項目番号を振り直さなければいけません。

いい加減嫌気がさしたので、自動化できる関数を作ってみました。

 

4種類の関数で自動化できるじゃん

蓋を開けてみれば、上記の画像のように4ブロックに分けて関数作成するだけで、自動化ができました。

 

まず、

A列はF

B列はG

C列はH

D列はI

をそれぞれ対象行として参照しています。

対象行に値が入力されていた場合数値を返し、

入力されていなかったら0を返すようになっています。

それではブロックごとに説明していきます。

①単純に10を入力

4ブロックの関数と言いましたが、実はこの部分だけ関数は必要ありません。

A21B2からD20を入力するだけです。

あえて関数を使いたいのであれば、

A2セルに

=IF(F2<>””,ROW()-1,0)

と入力して、D2セルまでコピペして下さい。

対象行が空の場合0

対象行に値が入力されていたら、行数マイナス1を返す関数です。

この場合、先頭に行を追加したら値がずれるので注意です。

 

②対象行、一つ上のセル、一つ右のセル、を参照

A3セルの数式はこちら

=IF(F3<>””,A2+1,IF(B3<>0,A2,0))

これをC17セルまでコピペして下さい。

IF文が二つ重なっているので、少しややこしいですね

内容は、

対象行に値が入っていたら一つ上のセルにプラス1

対象行が空で、一つ右が0以外の場合一つ上のセルと同じ値を返す

対象行が空で、一つ右が0の場合0を返す

というものです。

・上の値にプラス1

・上と同じ値を返す

・0を返す

という3パターンの出力が求められるので、IF文が2つ重なるようになります。

 

③対象行と一つ上のセルを参照

こちらはシンプルです。

対象行(I列)に値が入っていたら一つ上の値プラス1を返し、

対象行に値が入っていなかったら0を返します。

D3セルに

=IF(I3<>””,D2+1,0)

を入力して、一番下までコピペして下さい。

④算出された値をハイフン区切りで出力

最後は出力をする関数です。

C2セルに下の関数を入力して、一番下までコピペして下さい。

=IF(B2=0,A2,IF(C2=0,A2&-B2,IF(D2=0,A2&-B2&-C2,A2&-B2&-C2&-D2)))

数式自体は長いですが、内容は単純で、

項目番号が0の場合一つ左のセルまでをハイフン区切りで表示する

(0以外の値をハイフンで表示する)というものです。

完成!

あとはA列からD列を非表示にして、見た目を整えたら完成!

これで間に処理が増えても、項目番号を振り直すのは簡単です。

 

処理が増えた場合、追加したい箇所に行を挿入して……

関数が入力されている部分を選んで、オートフィル(右下の四角を引っ張るやつ)で

ズラーっと……

はい完成!

 

まとめ

いかがだったでしょうか。

まあ、ぶっちゃけ、この機能を作る手間と、手動で項目番号を振り直すのは、

どっちが楽かというと、なんとも言えませんが……笑

頻繁に修正が入るようなドキュメントだったら便利だと思います。

 

実際に作ってみて感じたことは、

自動化が出来る、出来ないとか、

それを作る工数がどうとかではなく、

「もっと楽に出来る方法があるんじゃね?」

ということを常に考えて、とにかくそれを実践してみることが重要なのだと思います。

 

結果、大した工数削減にならなかったとしても、

効率化を考える癖をつけて、失敗してもいいからやってみる、ということが

スキルアップに繋がるのではないかなーと。

 

ぜひ、参考にしてみて下さい!

  • このエントリーをはてなブックマークに追加