数式内にコメントを記述する


VBAでは、ソースコードの途中にコメントを記述することができます。

コメントには、そのマクロがどんな動作を行うかとか、そこで指定している数値の意味とか、あとでマクロを編集するときに役立つ情報を記述しておきます。

では、セルに入力した数式に、何らかのコメントを記述したいときはどうしましょう。Excelには、その名の通り「コメント」という機能がありますので、(数式ではなく)セルにコメントを挿入するのが一般的です。

その数式にとって必要な注釈や情報を、数式に影響しない状態で記述するという点では、こうしたセルのコメントは有効ですし、これがセオリーといってもいいでしょう。しかし、コメントは誰にでも読まれてしまいます。たとえば、セルの数式が表示されないように設定しても、コメントまで隠すことはできません。Excelの設定を変えて、コメントが表示されないようにすると、今度は自分も読めなくなってしまいます。こんなとき、数式の中にコメントを記述できたら便利かもしれません。あまり使う機会が多いとは思いませんが、こんなこともできるという例として、考え方を解説します。

まず、ひとつ実験をしてみます。

下図は、セル範囲A1:A3に適当な数値を入力し、セルC2の数式で合計しています。正しく計算が行われていますが、しかし、よく見てください。IF関数内で指定している2番目の関数はスペルが間違っています。こんな名前の関数はExcelにありません。

IF関数の構文は次の通りです。

上で入力したIF関数では、条件が「A1>0」ですから、セルA1が0より大きいとき「条件が正しい(TRUE))」です。IF関数は、条件が正しいとき、最初の式を計算して、2番目の式は計算されません。

条件が正しい(TRUE)とき、2番目の式は計算されません。いわば、無視されるようなものです。だから、関数のスペルを間違えて、正しくない数式が入力されていてもエラーにならなかったのです。ということは、IF関数の条件が正しい(TRUE)ときは、2番目の「条件が正しくないときの式」に何を書いてもエラーにならないということです。

つまり、IF関数の条件が必ず正しい(TRUE)のなら、2番目の式に好きな文字列を入力できるわけです。これは、コメントの記述として使えそうです。

しかし、セルA1にどんなデータが入力されるかわかりません。IF関数の条件が必ず正しく(TRUE)なるなんてことが、できるのでしょうか。できます。条件に正しい(TRUE)と直接指定してしまえばいいんです。

上図のIF関数は、どんなときも条件が正しい(TRUE)ので、2番目の式が計算されることはありません。なので、本来計算したい式を次のように記述することで、数式内にコメントを記述することができるわけです。

ちなみに、本来計算したい式の計算結果が、必ず数値になるのでしたら、次のようにN関数を使う手もあります。

N関数は、引数に指定した文字列を数値に変換する関数ですが、変換できないときは0を返します。数値に0を加えても、計算結果は変わりません。ちなみに、このN関数を使うと、次のようなコメントも可能です。

ただし、本来計算したい式が文字列を返すような式だったり、コメントとして入力する文字列が、たとえば日付のように数値へ変換できてしまう場合には、N関数によるコメントは使えませんね。数式の計算結果が文字列になる場合はどうしましょう。

今までのようにN関数を使ってコメントを記述すると、次のようにマヌケな結果になります。

計算結果が文字列になるのですから「+N()」ではなく「&N()」となるのはいいですね。文字列は計算できませんから。しかし、N関数は、数値の0を返します。この0を結合すると上図のようになってしまいます。このように、数式の計算結果が文字列になる場合は、次のようになればいいわけです。

任意の文字列を空欄("")に変換するにはどうしたらいいでしょう。これにはT関数を使います。T関数は、引数に文字列が指定されると、その文字列を返し、引数に数値や論理値が指定されると空欄("")を返します。

  • 任意の文字列をN関数に渡すと、数値の0になる
  • 数値をT関数に渡すと、空欄("")になる
  • 計算結果の文字列に、空欄("")を結合しても結果は変わらない

ということですから、こうすればいいです。

この、N関数とT関数を組み合わせれば、コメントが日付形式でも対応できます。