論理値 - TRUEとFALSE -


プログラミングの世界では、よく論理値という仕組みが使われます。

論理値には

  • TRUE (トゥルー) 「真実の」「本当の」などを意味する英単語
  • FALSE (フォルス) 「偽りの」「誤った」などを意味する英単語

の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では、論理値を計算として使うときには

  • TRUE → 1
  • FALSE → 0

という数値とみなされます。一方、論理値を条件として使うときには

  • TRUE → 0ではない数値
  • FALSE → 0

と判断されます。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関数を使ったのと同じ計算結果を得られます。