🗣️

IF関数を和で表す

に公開

IFを和で表す

関数 IF を 論理式Pとある代数の元A, Bを引数とする関数として、

\mathtt{IF}(P,A,B) = \begin{cases} A & \cdots& P =& \mathtt{TRUE} \\ B & \cdots& P =& \mathtt{FALSE} \end{cases}

と定義しましょう。イメージしているのはExcelです。もし、A, B について和が定義できるとすれば、この関数IF

\mathtt{IF}(P,A,B) = PA + \bar{P}B

というで表すことができます。ただし、\bar{P}は論理式Pの否定とします。PAというのは、論理式Pを代数の元A係数倍(スカラー倍)したものです。このように定義します。

PA = \begin{cases} A & \cdots& P =& \mathtt{TRUE} \\ 0 & \cdots& P =& \mathtt{FALSE} \end{cases}

このように係数倍を定義すると、たしかに\mathtt{IF}(P,A,B) = PA + \bar{P}Bが成り立つことが次のように確かめられます。

  • P = \mathtt{TRUE} のとき
\begin{align*} PA + \bar{P}B &= (\mathtt{TRUE})A + (\mathtt{FALSE})B \\ & = A + 0 \\ & = A \\ \end{align*}
  • P = \mathtt{FALSE} のとき
\begin{align*} PA + \bar{P}B &= (\mathtt{FALSE})A + (\mathtt{TRUE})B \\ & = 0 + B \\ & = B \\ \end{align*}

たしかに関数IFの結果と一致しています。

Excelにおける係数倍

整数

Aが整数のとき、ExcelTRUEFALSEを整数10として評価するため、係数倍は整数倍*で表せます。論理式をA1 < 2019とすると、

= (A1 < 2019)*(A1 - 1988)

と書けば、A12019未満のときA1 - 19882019以上のとき0になります。

文字列

文字列を与えられた整数(0以上)の回数繰り返す関数REPTで表現できます。

= REPT("平成", A1 < 2019)

と書けば、A12019未満のとき"平成"2019以上のとき""になります。

ExcelでIFを和にする

整数

IF(A1 < 2019, A1 - 1988, A1 - 2018)は次の式と結果が同じになります。

= (A1 < 2019)*(A1 - 1988) + (A1 >= 2019)*(A1 - 2018)

確かめてみましょう。たとえば、A12025とします。このとき、A1 < 2019FALSEA1 >= 2019TRUEです。そのため、この式は

= 0*(2025 - 1988) + 1*(2025 - 2018) 

となり、

= 7

と評価されます。

文字列

IF(A1 < 2019, "平成", "令和")は次の式と結果が同じになります。

= REPT("平成",A1 < 2019) & REPT("令和",A1 >= 2019)

ただし、&Excelの文字列連結演算子です。

こちらも確かめてみましょう。たとえば、A12000であるとします。この式は

= REPT("平成",1) & REPT("令和",0)

と同じ意味になります。よって、

= "平成" & ""

となり、結果は"平成"になります。

係数倍の分配法則

P(A + B)PA + PB分配することができます。つまり、

P(A + B) = PA + PB

が成り立ちます。

  • P = \mathtt{TRUE} のとき
\begin{align*} P(A + B) &= (\mathtt{TRUE})(A + B) \\ & = A + B \\ PA + PB &= (\mathtt{TRUE})A + (\mathtt{TRUE})B \\ & = A + B \\ \end{align*}
  • P = \mathtt{FALSE} のとき
\begin{align*} P(A + B) &= (\mathtt{FALSE})(A + B) \\ & = 0 + 0 \\ & = 0\\ PA + PB &= (\mathtt{FALSE})A + (\mathtt{FALSE})B \\ & = 0 + 0 \\ & = 0 \\ \end{align*}

たしかに、P(A + B) = PA + PBが成り立ちます。

係数倍の係数倍

論理式P,Qがあったとき係数倍の係数倍P(QA)はどのように計算できるでしょうか。

\begin{align*} P(QA) &= \begin{cases} QA & \cdots& P =& \mathtt{TRUE} \\ 0 & \cdots& P =& \mathtt{FALSE} \end{cases} \\ &= \begin{cases} A & \cdots& (P,Q) =& (\mathtt{TRUE}, \mathtt{TRUE}) \\ 0 & \cdots& (P,Q) =& (\mathtt{TRUE}, \mathtt{FALSE}) \\ 0 & \cdots& (P,Q) =& (\mathtt{FALSE}, \mathtt{TRUE}) \\ 0 & \cdots& (P,Q) =& (\mathtt{FALSE}, \mathtt{FALSE}) \\ \end{cases} \\ \end{align*}

この結果から次が成り立ちます。

P(QA) = (P \land Q)A

ただし、P \land QPQ論理積(and)です。なぜなら、

\begin{align*} P \land Q &= \begin{cases} \mathtt{TRUE} & \cdots& (P,Q) =& (\mathtt{TRUE}, \mathtt{TRUE}) \\ \mathtt{FALSE} & \cdots& (P,Q) =& (\mathtt{TRUE}, \mathtt{FALSE}) \\ \mathtt{FALSE} & \cdots& (P,Q) =& (\mathtt{FALSE}, \mathtt{TRUE}) \\ \mathtt{FALSE} & \cdots& (P,Q) =& (\mathtt{FALSE}, \mathtt{FALSE}) \\ \end{cases} \\ \end{align*}

が成り立つからです。

IFの中にIFがあるとき

\mathtt{IF}(P, A, \mathtt{IF}(Q, B, C)) という IFの中にIF があるときはどのように和に展開できるでしょうか。

\begin{align*} \mathtt{IF}(P,A,\mathtt{IF}(Q, B, C)) &= PA + \bar{P}(QB + \bar{Q}C) \\ &= PA + (\bar{P}\land Q)B + (\bar{P} \land \bar{Q})C \end{align*}

同様に、

\begin{align*} \mathtt{IF}(P,\mathtt{IF}(Q, A, B), C) &= P(QA + \bar{Q}B) + QC \\ &= (P \land Q)A + (P \land \bar{Q})B + \bar{Q}C \end{align*}

も成り立ちます。

ExcelでIFIFを和にする

整数

IF(A1 < 2019, IF(A1 < 1989, A1 - 1925, A1 - 1988), A1 - 2018)を計算しましょう。

\begin{align*} &\mathtt{IF}(A < 2019,\mathtt{IF}(A < 1989, A - 1925, A - 1988), A - 2018) \\ = &(A < 2019 \land A < 1989)(A - 1925) \\ + &(A < 2019 \land A ≥ 1989)(A - 1988) \\ + &(A ≥ 2019)(A - 2018) \end{align*}

ここでA < 1989ならばA < 2019が成り立ちますので、A < 2019 \land A < 1989 = A < 1989 です。よって、この式は次のように書けます。

=(A1 <  1989)*(A1 - 1925)
+(A1 <  2019)*(A1 >= 1989)*(A1 - 1988)
+(A1 >= 2019)*(A1 - 2018)

係数倍を右にすれば、

=(A1 - 1925)*(A1 <  1989)
+(A1 - 1988)*(A1 <  2019)*(A1 >= 1989)
+(A1 - 2018)*(A1 >= 2019)

文字列

IF(A1 < 2019, IF(A1 < 1989, "昭和", "平成"), "令和")を計算しましょう。

整数の計算とほとんど同じです。

=REPT("昭和", A1 <  1989)
+REPT("平成",(A1 <  2019)*(A1 >= 1989))
+REPT("令和", A1 >= 2019)

補足(論理和)

論理積は係数倍と次のような関係にありました。

P(QA) = (P \land Q)A

それでは論理和P \lor Qはどうでしょうか。PA + QA = (P \lor Q)Aは一般には成り立ちません。成り立つのは

PA + QA = (P \lor Q)A + (P \land Q)A

です。P, Q排他的P \land Q = \mathtt{FALSE})であるときに限り、

PA + QA = (P \lor Q)A

が成り立ちます。

補足(排他的場合分けと順序付き場合分け)

場合分けは一般にこう表せます。

= \begin{cases} A_1 & \cdots& P_1 \\ A_2 & \cdots& P_2 \\ & \vdots \\ A_n & \cdots& P_n \end{cases}

論理式P_1が成り立つときA_1P_2 が成り立つときA_2、…、P_nが成り立つときA_nです。

Excelでは場合分けIFSで表せます。つまり、

=\mathtt{IFS}(P_1, A_1, P_2, A_2, \cdots, P_n, A_n)

です。注意して欲しいのが、この式を和にしたときには、

= P_1 A_1 + P_2 A_2 + \cdots + P_n A_n

とは一般にはならないということです。

というのも、IFSP_1, P_2, \cdots , P_nに順序があります。たとえば、TRUEになるのがP_i, P_j, P_kとします。このとき、IFSはもっとも先に評価されるP_iによって値A_iが確定します。しかし、和の場合は

= A_i + A_j + A_k

となります。

もしIFSと等しい和を作るとすれば、

\begin{align*} =& P_1 A_1 + \bar{P_1}(P_2 A_2 + \bar{P_2}(\cdots)) \\ =& P_1 A_1 + (\bar{P_1} \land P_2) A_2 + \cdots + (\bar{P_1} \land \bar{P_2} \land \cdots \land \bar{P}_{n-1} \land P_n) A_n \end{align*}

逆にこの式が

= P_1 A_1 + P_2 A_2 + \cdots + P_n A_n

となるのは、P_1, P_2, \cdots , P_n排他的のときです。排他的であるとは\mathtt{TRUE}となるP_i一意に定まるということです。

GitHubで編集を提案

Discussion