[[20180830010736]] 『IF文の条件分岐を減らしたいです。』(moto) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『IF文の条件分岐を減らしたいです。』(moto)

下記の数式で、IF文を減らして、
処理速度を上げる方法を教えてください。

=

 IF(AND(A1=24,B1=31,C1=12,D1=365),1,
 IF(AND(A1<>24,B1=31,C1=12,D1=365),2,
 IF(AND(A1=24,B1<>31,C1=12,D1=365),1,
 IF(AND(A1<>24,B1<>31,C1=12,D1=365),3,
 IF(AND(A1=24,B1=31,C1<>12,D1=365),4,
 IF(AND(A1<>24,B1=31,C1<>12,D1=365),5,
 IF(AND(A1=24,B1<>31,C1<>12,D1=365),4,
 IF(AND(A1=24,B1<>31,C1<>12,D1=365),6,
 IF(AND(A1=24,B1=31,C1=12,D1<>365),7,
 IF(AND(A1<>24,B1=31,C1=12,D1<>365),8,
 IF(AND(A1=24,B1<>31,C1=12,D1<>365),7,
 IF(AND(A1<>24,B1<>31,C1=12,D1<>365),9,
 IF(AND(A1=24,B1=31,C1<>12,D1<>365),10,
 IF(AND(A1<>24,B1=31,C1<>12,D1<>365),11,
 IF(AND(A1=24,B1<>31,C1<>12,D1<>365),10,
 IF(AND(A1=24,B1<>31,C1<>12,D1<>365),12,
 13)))))))))))))))) ←)は16個です。  

 非常に動きが遅いため、IF文を12個にしたいです。
 アドバイスよろしくお願いいたします。

 関数の組合せで処理を早くするためのコツを勉強する方法を
 教えて頂けますと大変助かります。

よろしくお願いいたします。

< 使用 Excel:Excel2016、使用 OS:Windows10 >


申し訳ありません。
正しくは下記でした。

=

 IF(AND(A1=24,B1=31,C1=12,D1=365),1,
 IF(AND(A1<>24,B1=31,C1=12,D1=365),2,
 IF(AND(A1=24,B1<>31,C1=12,D1=365),1,
 IF(AND(A1<>24,B1<>31,C1=12,D1=365),3,
 IF(AND(A1=24,B1=31,C1<>12,D1=365),4,
 IF(AND(A1<>24,B1=31,C1<>12,D1=365),5,
 IF(AND(A1=24,B1<>31,C1<>12,D1=365),4,
 IF(AND(A1<>24,B1<>31,C1<>12,D1=365),6,
 IF(AND(A1=24,B1=31,C1=12,D1<>365),7,
 IF(AND(A1<>24,B1=31,C1=12,D1<>365),8,
 IF(AND(A1=24,B1<>31,C1=12,D1<>365),7,
 IF(AND(A1<>24,B1<>31,C1=12,D1<>365),9,
 IF(AND(A1=24,B1=31,C1<>12,D1<>365),10,
 IF(AND(A1<>24,B1=31,C1<>12,D1<>365),11,
 IF(AND(A1=24,B1<>31,C1<>12,D1<>365),10,
 IF(AND(A1<>24,B1<>31,C1<>12,D1<>365),12,
 13)))))))))))))))) ←)は16個です。  

よろしくお願いいたします。
(moto) 2018/08/30(木) 01:47


=choose((a1=24)+(b1=31)*2+(c1=12)*4+(d1=365)*8,10,11,10,9,7,8,7,6,4,5,4,3,1,2,2,1)

(sy) 2018/08/30(木) 08:02


間違えました。
正しくは以下です。
=choose((a1=24)+(b1=31)*2+(c1=12)*4+(d1=365)*8+1,10,11,10,9,7,8,7,6,4,5,4,3,1,2,2,1)

(sy) 2018/08/30(木) 08:08


何度もすいません。
こうでした。
=choose((a1=24)+(b1=31)*2+(c1=12)*4+(d1=365)*8+1,12,10,11,10,9,7,8,7,6,4,5,4,3,1,2,1)

(sy) 2018/08/30(木) 08:11


 =12-(B2=31)*(A2<>24)-(A2=24)*2-(C2=12)*3-(D2=365)*6
 ではどうか?
(ねむねむ) 2018/08/30(木) 09:35

=(A1<>24)*1+(A1<>24)*(B1<>31)-3*(C1=12)-6*(D1=365)+10
(mm) 2018/08/30(木) 09:40

早さは知らないけど整理してみると

 =IF(A1=24,1,IF(B1=31,2,3))+IF(C1=12,0,3)+IF(D1=365,0,6)

13にはならないよね?
(ご近所PG) 2018/08/30(木) 15:45


皆さまありがとうございます。
非常に参考になりました。工夫一つで短くできることがよくわかりました。
若干処理も早くなりました。
(moto) 2018/08/30(木) 22:42

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.