プログラミングの世界では、よく論理値という仕組みが使われます。
論理値には
の2つがあります。
ザックリ言うと、TRUEは「正しい」でFALSEは「正しくない」ということですが、論理値の仕組みは、プログラミング言語によって微妙に異なります。Excelでは、ワークシート上とVBAで論理値が使われますが、両者も少しだけ挙動が違います。ここでは、ワークシート上で使用される論理値について解説します。
TRUEは、いわば"正しい"という状態です。下図のセルA1には10が入力されています。10は5より大きいです。したがって「A1>5」は正しいのでTRUEを返します。
上図のように、セルにTRUE(という状態)が入力されると、セルには「TRUE」と表示されます。また、Excelには「TRUEを返すワークシート関数」もあります。その名の通り「TRUE関数」です。
もちろん、FALSEについても同じことが言えます。
さて、論理値の実体を探ってみましょう。先に書いたように、TRUE関数はTRUEを返し、FALSE関数はFALSEを返します。これらの論理値に「×1」して、論理値がいくつなのか調べてみます。
セルB2にTRUE関数を入力しました。そのセルB2を「×1」すると、計算結果は「1」となりました。では、FALSEはどうでしょう。
FALSEを「×1」したら「0」となりました。以上のことから、TRUEの実体は1、FALSEの実体は0とわかりました。
ちなみに、VBAでは少し違います。Falseが0というのは同じですが、Trueは1ではなく-1です。
Sub Sample1() MsgBox "True → " & True * 1 & vbCrLf & _ "False → " & False * 1 End Sub
さて、ワークシート上の論理値をもう少し調べてみましょう。ワークシート上で論理値が登場する場面といえば、何と言ってもIF関数です。IF関数は、条件に指定した式がTUREかFALSEで動作が異なります。
IF関数の条件に、TRUE関数やFALSE関数を指定してみます。
TRUEの実体は「1」で、FALSEの実体は「0」でしたね。そこで今度は、条件に数値を指定しました。
ここまではいいですね。では、今度は、条件に「0と1ではない数値」を指定してみましょう。
IF関数の条件に「0と1ではない数値」を指定したところ、条件がTRUEのときの式1が計算されました。つまり、1024や-256はTRUEであると認識されたのです。ここから、1に限らず、0ではない数値はすべてTRUEであると考えられます。
このようにExcelでは、論理値を計算として使うときには
という数値とみなされます。一方、論理値を条件として使うときには
と判断されます。0ではない数値というのは、言い方を変えるとFALSEではない値ということです。
これは、VBAでも同じです。
Sub Sample2() If 1024 Then MsgBox "○" Else MsgBox "×" End If End Sub
論理値を計算で使うと、TRUEは「1」でFALSEは「0」とみなされます。この特性を利用して計算してみましょう。
下図のような表があります。性別が"男"のときは「金額1×2」を金額2に入力し、性別が"女"のときは金額2に「金額1×1.5」を計算するものとします。普通にIF関数でやるなら、次のようになります。
これを、論理値を使った論理式で計算してみます。まず、セルD2に「=B2="男"」という数式を入力しましょう。
これは「セルB2が"男"である」という意味ですので、それが正しいときはTRUEが返ります。セルD2をセルD13までコピーすると、性別が"男"の行だけTRUEになるのがわかります。
論理値を計算するとき、TRUEは「1」でFALSEは「0」とみなされます。つまり、これは下図のように入力されているのと同じ意味です。
さて、任意の数値に1をかけても数値は変化しませんが、任意の数値に0をかけると0になります。そこで「性別="男"」という論理式の結果と「金額1」の数値をかけ算します。セルD2の数式を「=(B2="男")*C2」として、セルD13までコピーします。
【セルB2が"男"のとき】
【セルB2が"女"のとき】
これで、性別が"男"のときだけC列の数値を参照することができました。これを「×2」してやれば、男性の計算は完了です。
女性の計算も同じ考え方で可能です。
それぞれの計算ができましたので、2つの式を合体させます。
性別が"男"のときは、後半部分の「(B2="女")*C2*1.5」が0となり、性別が"女"なら前半部分の「(B2="男")*C2*2」が0になりますので、IF関数を使ったのと同じ計算結果を得られます。