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が成り立つことが次のように確かめられます。
\begin{align*}
PA + \bar{P}B
&= (\mathtt{TRUE})A + (\mathtt{FALSE})B \\
& = A + 0 \\
& = A \\
\end{align*}
\begin{align*}
PA + \bar{P}B
&= (\mathtt{FALSE})A + (\mathtt{TRUE})B \\
& = 0 + B \\
& = B \\
\end{align*}
たしかに関数IF
の結果と一致しています。
Excelにおける係数倍
整数
Aが整数のとき、ExcelはTRUE
とFALSE
を整数1
と0
として評価するため、係数倍は整数倍*
で表せます。論理式をA1 < 2019
とすると、
= (A1 < 2019)*(A1 - 1988)
と書けば、A1
が2019
未満のときA1 - 1988
、2019
以上のとき0
になります。
文字列
文字列を与えられた整数(0以上)の回数繰り返す関数REPT
で表現できます。
と書けば、A1
が2019
未満のとき"平成"
、2019
以上のとき""
になります。
ExcelでIF
を和にする
整数
式IF(A1 < 2019, A1 - 1988, A1 - 2018)
は次の式と結果が同じになります。
= (A1 < 2019)*(A1 - 1988) + (A1 >= 2019)*(A1 - 2018)
確かめてみましょう。たとえば、A1
が2025
とします。このとき、A1 < 2019
はFALSE
、A1 >= 2019
はTRUE
です。そのため、この式は
= 0*(2025 - 1988) + 1*(2025 - 2018)
となり、
と評価されます。
文字列
式IF(A1 < 2019, "平成", "令和")
は次の式と結果が同じになります。
= REPT("平成",A1 < 2019) & REPT("令和",A1 >= 2019)
ただし、&
はExcelの文字列連結演算子です。
こちらも確かめてみましょう。たとえば、A1
が2000
であるとします。この式は
= REPT("平成",1) & REPT("令和",0)
と同じ意味になります。よって、
となり、結果は"平成"
になります。
係数倍の分配法則
P(A + B)はPA + PBと分配することができます。つまり、
が成り立ちます。
\begin{align*}
P(A + B)
&= (\mathtt{TRUE})(A + B) \\
& = A + B \\
PA + PB
&= (\mathtt{TRUE})A + (\mathtt{TRUE})B \\
& = A + B \\
\end{align*}
\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 \land QはPとQの論理積(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でIF
のIF
を和にする
整数
式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 \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})であるときに限り、
が成り立ちます。
補足(排他的場合分けと順序付き場合分け)
場合分けは一般にこう表せます。
=
\begin{cases}
A_1 & \cdots& P_1 \\
A_2 & \cdots& P_2 \\
& \vdots \\
A_n & \cdots& P_n
\end{cases}
論理式P_1が成り立つときA_1、P_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
とは一般にはならないということです。
というのも、IFS
はP_1, P_2, \cdots , P_nに順序があります。たとえば、TRUE
になるのがP_i, P_j, P_kとします。このとき、IFS
はもっとも先に評価されるP_iによって値A_iが確定します。しかし、和の場合は
となります。
もし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が一意に定まるということです。
Discussion