○第127回目 計算式の分析;if文(その1)
if文とは、( )で記述されたものであり、カッコの前がifのもの、とします(この定義だと、sumif文も含まれそうですが、含みません)。
if文には、三項目があります。条件部分、条件が成立した時の処理、不成立の時の処理、となります。
また、複数のif文があった場合、入れ子になっている場合と、独立している場合があります。
この点については、個々のif文に注目して、その中の構造は見ませんので、上記の区分は意識しなくてよいことにします。
どんな構造であっても、例えばif文が4つあれば、四つのそれぞれの構造を個別に分析するということになります。
・IF(B23>0.1,INT(B23*100),IF(B23>0.01,INT(B23*1000),IF(B23>0.001,INT(B23*10000),INT(B23*100000))))
この計算式は、発生させた乱数から二桁の数を作り出すものです。B23に乱数が入っています。乱数は、0から0.99999…なので、有効数字がどこから始まっているかによって、何をかけたらいいのかが、変わってきます。
この例でいうと、
・IF(B23>0.1,INT(B23*100),IF(B23>0.01,INT(B23*1000),IF(B23>0.001,INT(B23*10000),INT(B23*100000))))
・IF(B23>0.01,INT(B23*1000),IF(B23>0.001,INT(B23*10000),INT(B23*100000)))
・IF(B23>0.001,INT(B23*10000),INT(B23*100000))
となります。
それぞれのif文において、中を三つに分けているのですが、それにはカンマで判断します。
上記のいずれの場合でも、1番目のカンマと2番目のカンマの位置で分ければいいことになります。非常に簡単でした。
例として、一番上の条件式からは、次のような情報をとります。
B23>0.1 が成り立っているかどうか(trueかfalseか)
INT(B23*100) の値
IF(B23>0.01,INT(B23*1000),IF(B23>0.001,INT(B23*10000),INT(B23*100000)))) の値
全体を示すと以下のようになります。
IF(B23>0.1,INT(B23*100),IF(B23>0.01,INT(B23*1000),IF(B23>0.001,INT(B23*10000),INT(B23*100000)))) 86
**B23>0.1 0.865214 True
**INT(B23*100) 86
**IF(B23>0.01,INT(B23*1000),IF(B23>0.001,INT(B23*10000),INT(B23*100000))) 865
IF(B23>0.01,INT(B23*1000),IF(B23>0.001,INT(B23*10000),INT(B23*100000))) 865
**B23>0.01 0.865214 True
**INT(B23*1000) 865
**IF(B23>0.001,INT(B23*10000),INT(B23*100000)) 8652
IF(B23>0.001,INT(B23*10000),INT(B23*100000)) 8652
**B23>0.001 0.865214 True
**INT(B23*10000) 8652
**INT(B23*100000) 86521
簡単というわけにはいきませんでした。次の場合はどうしますか(計算式の記述は省略しています)。
カンマが関数の中にもあるので、カンマで分割するということが、上手くいかないのです。
・IF(lookup(xxx,xxx:xxx,xxx:xxx)>0.1,If(xxx>0.1,round(B23*1.234,2),lookup(xxx,xxx:xxx,xxx:xxx)),sumproduct(xxx:xxx,xxx:xxx))
これには、お手上げです。
しばらく時間を…ということにします。
次回までに考えてみてください。

0 件のコメント:
コメントを投稿