Excelの数式は一行で書かなければなりません。
セルに数式を入力する時は、数式バーを縦に広げることで数式全体を見渡せるのでまだ良いのですが、下記の場合ははとても過酷な状況で作業することを強いられます。
- 条件付き書式で「数式を使用して、書式設定するセルを決定」する場合のルールの内容を編集するエリア
- 数式タブ→「定義された名前」リボングループの「名前の定義」で参照範囲に入力する数式
- データタブ→「データツール」リボングループの「データの入力規則」で入力値の種類を「ユーザ設定」にした時の数式欄
関数の補助機能が無いのは仕方ないにしても、矢印キーがセル範囲指定に割り当てられているために、入力する場所をポイントする時はマウスを使うしかなく、しかも左右に動かそうといると、ちょっと動かしただけで直ぐに先頭や末尾までカーソルが動いてしまい、大変な苦労をすることになります。
そこで長い数式をメンテナンスする時に少しだけではありますが、入力の負荷軽減と数式の可読性向上に役立つツールをXLSXファイルで作ることにしました。
このツールで実現できること
XLSXファイルだと「たいしたことはできないよね」というのは事実ですが、できる限り可読性向上に努めております。
具体的にツールの内容を説明する前に、プログラミングの可読性を向上させる方法論を簡単にまとめて置きたいと存じます。
プログラムの可読性を向上させる方法とは
ウィキペディアによると、「構造化プログラミング」と「構造化定理」は別物であると書かれていますので、本説明では正しく使い分けすることを目指します。
プログラミング上、Excelの数式でできることはIF文と独自に定義したものも含めた関数だけで、goto文やwhile文はありません。
そのため構造化定理の「順次、反復、分岐」の制御は非常な制約された形にはなりますが、できるといえばできます。
順次、反復は複数セルを使用することにはなりますが、例えば5回処理を繰り返す必要がある場合は、5つのセルで順次処理を繰り返して処理された結果を参照するようにすれば、やれなくはないです。
ただし「現実的か?」と言われたら、現実的ではありません。
構造化定理では、このような制御を『直列または入れ子状に配置する事でプログラムの構造化を実現する』が求められるようです。
そう考えるとExcelの数式は構造化定理から外れた書き方ができない言語仕様になっていると言えます。
ただ、それが「読み易く、見た目に解り易いものか?」と言われたらそうではない認識です。
数式の中ではIF関数が多用されることになりますが、IF関数で使われる引数の括り記号は、その他の関数の引数の括り記号と同じであるがゆえに、開く「(」と閉じる「)」の数がずれたりすることが頻繁に起こります。
また、「IF…THEN」、「IF…THEN…ELSE」でインデント(字下げ)が付けられる訳でもないので、「パッと見」何がどうなっているのか理解することは難しいです。
本ツールの機能
本ツールは、指定のセルに値貼付けされた数式に対して、つぎのような整形を加えてから、形状を元に戻します。
- 指定した区切り文字列で数式を分解する。
- 分解されたパーツに含まれている開く「(」と閉じる「)」の数の差分に応じて、指定されたインデントをパーツの先頭に付加して表示する。
- 分解されたパーツを修正したり、コーディングの追加・削除をした後で、再度パーツからインデントを除外して数式に戻す。
- 最終的に数式に設定されている開く「(」と閉じる「)」の数が等しいことを確認し、間違っている場合は条件付き書式により色で間違いを指摘する。ただし最終合計値の違いのみで、ピンポイントで間違いを指定できる訳ではありません。
ツールは「数式セット」と「数式リビルド」の2つのシートで構成されています。
まとめ
本来であれば、Microsoftさんが関数のヘルプ機能付きで数式ビルダーを提供していただけるのが、一番望まれることと存じます。
本ツールは、どちらかというと「知っていると得するかもしれないExcelの癖」シリーズの下記テーマの動くサンプル的な意味合いの方が強いです。
以上、最後までご一読いただきありがとうございました。