其ノ6 論理的であること
今回は、直接Excelの話ではないのですが、読み物だと思ってください。
其ノ4でAND関数が出てきたので、ここらでちょっと論理学について話しておこうかと。
…あ、今渋い顔しました?「なんかむずかしそうだな…」って。
…うーん、もしかしたら難しいのかもしれません、が、
Excelの基礎にあたる部分の話なので、一回聞いておいて損はないかな、と思いまして。
お付き合いください。
さて、「論理的」ってあまり日常使うことばじゃないと思います。 むしろ、「論理的な人」って毛嫌いされてるかも。 「カタイなあ~」とか、「正しいかもしれないけど、ヒトの気持ちってモンがわかってないわ」とか言われちゃってるかもしれません。 そんな決して好かれていない「論理的」の代表といえば、「三段論法」です。三段論法ってこういう↓ヤツね。
<○論理的の例>
人間は必ず死ぬ。
ソクラテスは人間である。
(したがって)ソクラテスは必ず死ぬ。
ぶっそうな文ですが、こういう時「論理的」って言うんですね。
似たような文ですが、次のは論理的ではありません。
<×論理的ではない例>
ソクラテスは必ず死ぬ。
ソクラテスは人間である。
(したがって)人間は必ず死ぬ。
残念ながら、これは論理的ではありません。
たしかに、実際人間は必ず死にます。
けれども、上の2つの文から「人間は必ず死ぬ」という文は論理的には導かれません。
論理性と事実性は別モノなんです。
上の<○論理的の例>の方を見てください。
まず最初の文で、人間という集合全体について規定している。
そして第2の文で、ソクラテスが人間(という集合)のひとつであることが語られる。
だから、第3の文が必然的に導かれる、というワケです。
でも、<×論理的ではない例>の方は、第1の文も第2の文も、ソクラテスというひとりの人間の事例についてしか語っていません。
個別事例からは、人間一般についての規定は出てこないんです。
さて、Excelには「AND関数」と「OR関数」というのがありまして、
こいつらは「論理関数」と呼ばれるのですが、
この「AND」と「OR」の話をしたいと思います。
以下のような4人の男女がいるとしましょう。
1.41歳 男
2.39歳 男
3.41歳 女
4.39歳 女
このグループにおいて、<40歳以上、かつ男性>という条件を満たすのは誰でしょうか? この「かつ」を、Excelでは「AND」で表現するのですが、 <40歳以上 AND 男性>という式の結果はどうなるでしょうか?
<40歳以上 AND 男性>
1.41歳 男 … TRUE
2.39歳 男 … FALSE
3.41歳 女 … FALSE
4.39歳 女 … FALSE
「TRUE」というのが「論理的に正しい」、「FALSE」が「論理的に間違っている」という意味です。こうなりますね。
40歳以上の男性、1.の人だけですもんね。
Excelで表現するとこう↓です※1 ※2。
では、<40歳以上、または男性>の場合は?
<40歳以上 OR 男性>
1.41歳 男 … TRUE
2.39歳 男 … TRUE
3.41歳 女 … TRUE
4.39歳 女 … FALSE
こうですよね。「男性」なら何歳でもOKだから2.も含まれるし、 「40歳以上」なら性別を問うてないので3.も合致する※3 ※4。
ここで注目してほしいのが、「40歳以上」と「男性」という2つの条件を両方とも満たす1.も「TRUE」なことです。
例えば飛行機の中で「コーヒー or 紅茶?」と聞かれて「両方!」と答えたら、
たぶんサービスの良い日本なら両方もらえるとは思うけど、怪訝な顔されますよね(←実際やったりしないように)。
でも、論理学的には「OR」は両方でもOKなんです。
論理関数の代表としてもう1コ、「IF関数」ってのがあります。
IFはむずかしいんですよ。
IF関数については改めて(其ノ7で)語るつもりなんですが、
ここではIFの論理性について。
IF関数について、次のようなケースがよく例として引き合いに出されます※5。
60点以上なら「合格」、そうでない場合は「不合格」と表示される、ってヤツです。
IF関数のつくりって、
=if(条件となる式 , 式を満たすとき , 満たさないとき)
となっていて、「条件を満たさないとき」を必ず入力するようになっているんですね。
コレ、なぜなんでしょうか。
ちょっと上のIF関数から一旦離れて、<60点以上ならば合格>という条件だけだったとしましょう。
<60点以上ならば合格>ですよ。それ以外の条件はナシです。論理的にはどうなるでしょうか?
1.65点で合格した
これは当然「TRUE」です。そりゃそうですよね、条件どおりですもの。
2.65点で不合格だった
もちろん「FALSE」です。条件と合致しないので、あり得ません。
問題はここからです。
3.55点で不合格だった
しょうがないか…。点数が基準に満たなかったんだもんね…。
厳しい結果ですが、全然あり得る話です。
4.55点で合格した
・
・
コレ、「TRUE」なんですよ。
<60点以上ならば合格>という条件だけだったら、コレ、論理的には「TRUE」なんです。
こういうことが起こる理由、考えてみてください。理由はいろいろありますよね。
例えば、「内申書が良かった」とか、「面接のウケが良かった」とか、「すごい美人だった」とか。
と言うか、ね、<60点以上ならば合格>とは言ったけど、
<60点に満たないならば不合格>とは誰も言ってないじゃないですか。
いや、とんちじゃないですよ。論理学的にはこうなるんです。
でも、安心してください。
ExcelのIF関数は、この辺りがわかりやすく作られていて、
「条件を満たさないとき」を明確に規定するように出来ているんです。
※5をもう一度見てください。
60点以上「じゃない時」を指示するようになっているでしょ?
つまり、「60点以上のときどうするか」だけでなく、
「60点未満のときどうするか」についても命令してますよね。
けど、このIF関数の第3引数「60点未満のときは「不合格」と表示せよ」という命令の部分は、
論理学から見れば一種のサービスです。論理学的には、「60点未満のときどうするか」はあらためて命令してあげなくてはなりません。
このちがいが明確に現れるのは、vbaのIF構文です。
vbaっていうのは、Excelのプログラム言語のことです。書いておくとExcelが自動で仕事してくれるというスグレものです。
ただ、書き方にコツがある、というか、練習が必要なので、現在わからなくても全然問題ないのですが、
そのvbaで、例えば、
If Cells(1,1).Value >= 60 Then
Cells(1,2).Value = "合格"
End If
と書く。「1行目1列目のセルの値が60以上なら、隣のセルに「合格」と表示してね」という意味です
(繰り返しますが、わからなくても問題ないですよ)。
しかし、こう書いても、59点以下のときに「不合格」と表示されたりはしません。
上の命令は「60点以上のときどうするか」の命令であって、
「60点未満のときどうするか」は命令していないからです。
60点未満のとき、何かして欲しいのであれば、あらためて指示してあげなくてはなりません。
不親切と言えば不親切ですが、論理学的にはこちらの方が標準仕様だったり…。
それに対して、ExcelワークシートのIF関数の方は、この「60点未満のときどうするか」
の命令もセットになっているんです。
論理学の話はこの辺にしておきましょう。
Excel仕事に直接役立つかというと、そうでないかもしれません。
ただ、Excelの基礎にあるものではあるので、知っておいて損はないと思います。
IF式については、次回其ノ7で、あらためて語りたいと思います。