Zenn
🗣️

IF関数を和で表す

2025/03/23に公開

IFを和で表す

関数 IF を 論理式PPとある代数の元AA, BBを引数とする関数として、

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

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

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

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

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

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

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

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

Excelにおける係数倍

整数

AAが整数のとき、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)P(A + B)PA+PBPA + PB分配することができます。つまり、

P(A+B)=PA+PB P(A + B) = PA + PB

が成り立ちます。

  • P=TRUEP = \mathtt{TRUE} のとき
P(A+B)=(TRUE)(A+B)=A+BPA+PB=(TRUE)A+(TRUE)B=A+B \begin{align*} P(A + B) &= (\mathtt{TRUE})(A + B) \\ & = A + B \\ PA + PB &= (\mathtt{TRUE})A + (\mathtt{TRUE})B \\ & = A + B \\ \end{align*}
  • P=FALSEP = \mathtt{FALSE} のとき
P(A+B)=(FALSE)(A+B)=0+0=0PA+PB=(FALSE)A+(FALSE)B=0+0=0 \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+PBP(A + B) = PA + PBが成り立ちます。

係数倍の係数倍

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

P(QA)={QAP=TRUE0P=FALSE={A(P,Q)=(TRUE,TRUE)0(P,Q)=(TRUE,FALSE)0(P,Q)=(FALSE,TRUE)0(P,Q)=(FALSE,FALSE) \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)=(PQ)A P(QA) = (P \land Q)A

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

PQ={TRUE(P,Q)=(TRUE,TRUE)FALSE(P,Q)=(TRUE,FALSE)FALSE(P,Q)=(FALSE,TRUE)FALSE(P,Q)=(FALSE,FALSE) \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があるとき

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

IF(P,A,IF(Q,B,C))=PA+Pˉ(QB+QˉC)=PA+(PˉQ)B+(PˉQˉ)C \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*}

同様に、

IF(P,IF(Q,A,B),C)=P(QA+QˉB)+QC=(PQ)A+(PQˉ)B+QˉC \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)を計算しましょう。

IF(A<2019,IF(A<1989,A1925,A1988),A2018)=(A<2019A<1989)(A1925)+(A<2019A1989)(A1988)+(A2019)(A2018) \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<1989A < 1989ならばA<2019A < 2019が成り立ちますので、A<2019A<1989=A<1989A < 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)=(PQ)A P(QA) = (P \land Q)A

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

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

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

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

が成り立ちます。

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

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

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

論理式P1P_1が成り立つときA1A_1P2P_2 が成り立つときA2A_2、…、PnP_nが成り立つときAnA_nです。

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

=IFS(P1,A1,P2,A2,,Pn,An) =\mathtt{IFS}(P_1, A_1, P_2, A_2, \cdots, P_n, A_n)

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

=P1A1+P2A2++PnAn = P_1 A_1 + P_2 A_2 + \cdots + P_n A_n

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

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

=Ai+Aj+Ak = A_i + A_j + A_k

となります。

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

=P1A1+P1ˉ(P2A2+P2ˉ())=P1A1+(P1ˉP2)A2++(P1ˉP2ˉPˉn1Pn)An \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*}

逆にこの式が

=P1A1+P2A2++PnAn = P_1 A_1 + P_2 A_2 + \cdots + P_n A_n

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

GitHubで編集を提案

Discussion

ログインするとコメントできます