[[20230402182354]] 『複雑なIF関数』(桜) ページの最後に飛ぶ

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

 

『複雑なIF関数』(桜)

初めまして。
IF関数で10種類の条件分岐したいのですが、一応結果は導けたようですが、
複雑すぎてもっと簡単に出来ないものかと調べていますが、いい案にたどり着けません。
何かアドバイスありましたらお願いします。

 A列	B列	C列	D列	E列
 条件1	条件2	条件3	条件4	分類
 〇	1	あ	△	
 〇	2	い		
	3	う		

※A〜D列に、上記分類 or 空欄(未入力)のいずれかが入るリストがあります。(500行位あり)
E列に、下記条件に沿って、ステータス分類を1列に表示したい。

E列に表示したい条件
分類1→条件1: 〇、条件2:1、条件4:△
分類2→条件1: 〇、条件2:2
分類3→条件1: 〇、条件2:2、条件4:△
分類4→条件1: 〇、条件2:3
分類5→条件1: 〇、条件3:い
分類6→条件1: 〇、条件3:う
分類7→条件1: 〇、条件2:2、条件3:い
分類8→条件1: 〇、条件2:2、条件3:い、条件4:△
分類9→条件1: 〇、条件2:3、条件3:い
分類10→条件1: 〇、条件2:3、条件3:う

考えた式は、下記です。
途中まで同じ条件のものはより複雑な条件をIF文のより先にすることで答えは合うようですが、このような方法でやるしかないでしょうか?

=IF(AND(A3="〇",B3=1,D3="△"),"分類1",IF(AND(A3="〇",B3=2,C3="い",D3="△"),"分類8",IF(AND(A3="〇",B3=2,D3="△"),"分類3",IF(AND(A3="〇",B3=2,C3="い"),"分類7",IF(AND(A3="〇",B3=2),"分類2",IF(AND(A3="〇",B3=3,C3="い"),"分類9",IF(AND(A3="〇",B3=3,C3="う"),"分類10",IF(AND(A3="〇",B3=3),"分類4",IF(AND(A3="〇",C3="い"),"分類5",IF(AND(A3="〇",C3="う"),"分類6"))))))))))

あと、この式だと条件以外の時は、Falseとなってしまいます。
偽の時を指定していないからなのですが。。
IF(AND(A3="〇",B3=1,D3="△"),"分類1","" のように最後に"",をそれぞれに付けたら、この関数に対して多すぎる引数のエラーメッセージが出てしまいます。
これもできれば解決したいです。

以上、2点、何か良い方法ありましたらお願いいたします。

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


365なのでもっとスマートな方法があると思いますが、対応表と作業列を使用した方法です。(質問内容の数式とは違いますが・・・)

 L2 =TEXTJOIN(",",FALSE,H2:K2) 下コピー
 E2 =XLOOKUP(TEXTJOIN(",",FALSE,A2:D2),$L$2:$L$11,$G$2:$G$11,"") 下コピー

     |[A]  |[B]  |[C]  |[D]  |[E]  |[F]|[G]   |[H]  |[I]  |[J]  |[K]  |[L]       
 [1] |条件1|条件2|条件3|条件4|分類 |   |      |条件1|条件2|条件3|条件4|作業列    
 [2] |〇   |    1|あ   |△   |     |   |分類1 |〇   |    1|     |△   |〇,1,,△  
 [3] |〇   |    2|い   |     |分類7|   |分類2 |〇   |    2|     |     |〇,2,,    
 [4] |     |    3|う   |     |     |   |分類3 |〇   |    2|     |△   |〇,2,,△  
 [5] |     |     |     |     |     |   |分類4 |〇   |    3|     |     |〇,3,,    
 [6] |     |     |     |     |     |   |分類5 |〇   |     |い   |     |〇,,い,   
 [7] |     |     |     |     |     |   |分類6 |〇   |     |う   |     |〇,,う,   
 [8] |     |     |     |     |     |   |分類7 |〇   |    2|い   |     |〇,2,い,  
 [9] |     |     |     |     |     |   |分類8 |〇   |    2|い   |△   |〇,2,い,△
 [10]|     |     |     |     |     |   |分類9 |〇   |    3|い   |     |〇,3,い,  
 [11]|     |     |     |     |     |   |分類10|〇   |    3|う   |     |〇,3,う,  
(フォーキー) 2023/04/02(日) 19:19:04

 う〜ん...スマートかどうかはわかりませんが^^;

 E2の式=SWITCH(CONCAT(A2:D2),"〇1あ△","分類1","〇2","分類2","〇2△","分類3","〇3","分類4","〇い","分類5","〇う","分類6","〇2い","分類7","〇2い△","分類8","〇3い","分類9","〇3う","分類10")

 下まで、コピー
 これであってるかどうかは確認してくださいw
(あみな) 2023/04/02(日) 19:36:47

フォーキー様、あみな様
早速ありがとうございます。
どちらも、目から鱗でした。
手元に365対応のPCがなく確認が出来ていませんが、明日実際のデータでやってみます。
Office365で使える便利な関数、多いのですね。これを機にちゃんと勉強してみたいと思います。
ありがとうございました。
(桜) 2023/04/02(日) 20:24:03

構造化するとこんな風になっているので

 =IF(AND(A3="〇",B3=1,D3="△"),
    "分類1",
    IF(AND(A3="〇",B3=2,C3="い",D3="△"),
       "分類8",
       IF(AND(A3="〇",B3=2,D3="△"),
          "分類3",
          IF(AND(A3="〇",B3=2,C3="い"),
             "分類7",
             IF(AND(A3="〇",B3=2),
                "分類2",
                IF(AND(A3="〇",B3=3,C3="い"),
                   "分類9",
                   IF(AND(A3="〇",B3=3,C3="う"),
                      "分類10",
                      IF(AND(A3="〇",B3=3),
                         "分類4",
                         IF(AND(A3="〇",C3="い"),
                            "分類5",
                            IF(AND(A3="〇",C3="う"),
                               "分類6"
                               ※「””」を入れるのはここだけ
                               )
                            )
                         )
                      )
                   )
                )
             )
          )
       )
    )

 =IF(AND(A3="〇",B3=1,D3="△"),"分類1",
  IF(AND(A3="〇",B3=2,C3="い",D3="△"),"分類8", ←一つ上の行のIFの第3引数(Falseの場合)
  IF(AND(A3="〇",B3=2,D3="△"),"分類3", ←一つ上の行のIFの第3引数(Falseの場合)
  IF(AND(A3="〇",B3=2,C3="い"),"分類7", ←一つ上の行のIFの第3引数(Falseの場合)
  IF(AND(A3="〇",B3=2),"分類2", ←一つ上の行のIFの第3引数(Falseの場合)
  IF(AND(A3="〇",B3=3,C3="い"),"分類9", ←一つ上の行のIFの第3引数(Falseの場合)
  IF(AND(A3="〇",B3=3,C3="う"),"分類10", ←一つ上の行のIFの第3引数(Falseの場合)
  IF(AND(A3="〇",B3=3),"分類4", ←一つ上の行のIFの第3引数(Falseの場合)
  IF(AND(A3="〇",C3="い"),"分類5", ←一つ上の行のIFの第3引数(Falseの場合)
  IF(AND(A3="〇",C3="う"),"分類6", ←一つ上の行のIFの第3引数(Falseの場合)
  "")))))))))) ←一つ上の行のIFの第3引数(Falseの場合)※ここだけ追加

桜さんの元の式につけ加えるのはここだけです。
(火災報知器) 2023/04/03(月) 10:11:04


 =IFS(AND(A3="〇",B3=1,D3="△"),"分類1",
      AND(A3="〇",B3=2,C3="い",D3="△"),"分類8",
      AND(A3="〇",B3=2,D3="△"),"分類3",
      AND(A3="〇",B3=2,C3="い"),"分類7",
      AND(A3="〇",B3=2),"分類2",
      AND(A3="〇",B3=3,C3="い"),"分類9",
      AND(A3="〇",B3=3,C3="う"),"分類10",
      AND(A3="〇",B3=3),"分類4",
      AND(A3="〇",C3="い"),"分類5",
      AND(A3="〇",C3="う"),"分類6",
      TRUE,"")

IFS関数に書き換えると多少すっきりします。
(火災報知器) 2023/04/03(月) 10:15:28



こんなマトリクスにするともう少し分類がしやすくなるかもしれません。
Step1.
 Bが2………2,3,7,8(イ)
 Bが3………4,9,10(ロ)
 Bがその他…1,5,6(ハ)
Step2.
 イ
 Dが△………3,8(ニ)
 Dがその他…2,7(ホ)
 ハ
 Bが1でDが△……1
 上記条件以外…5,6(ヘ)
Step3.
 ニ
 Cが「い」…8
 Cがその他…3
 ホ
 Cが「い」…7
 Cがその他…2
 ロ
 Cが「い」…9
 Cが「う」…10
 Cがその他…4
 ヘ
 Cが「い」…5
 Cが「う」…6
 Cがその他…""
こんな風に分類できると思います。
 
(火災報知器) 2023/04/03(月) 11:19:44

 =IF(A1="○",IF(B1=2,IF(D1="△",IF(C1="い","分類8","分類3”),IF(C1="い","分類7","分類2"))IF(B1=3,IF(C1="い","分類9”,IF(C1="う","分類10","分類4")),IF(AND(B1=1,D1="△"),"分類1",IF(C1="い","分類5",IF(C1="う","分類6",""))))),"")

上記マトリクスを馬鹿正直にIF文で書くと上記のとおりです。
(余計わかりづらい酷い関数です。)
(火災報知器) 2023/04/03(月) 12:02:24


=CHOOSE(SUM(1,(A6="○")*SUM((B6=2)*(3+(D6="△")*2),(B6=3)*7,(B6=1)*(D6="△")*10,SUM((C6="い")*1,(C6="う")*(B6<>2)*2)*OR(B6<>1,D6<>"△"))),"","分類5","分類6","分類2","分類7","分類3","分類8","分類4","分類9","分類10","分類1")
1〜11に分類してCHOOSE関数で分けられるようにもしてみましたが、やっぱりわかりづらいですね
(火災報知器) 2023/04/03(月) 20:07:48

火災報知器様
ありがとうございます!!
""は最後だけに入れれば良かったのですね。全てに入れてました。
また、IFS関数もいいですね!
マトリクスの整理もありがとうございます。
何事も、まずは頭で考えるのではなく表にしてみる事で見えてくるものも多いですね。
色々考え方の勉強になります。
大変ありがとうございます!
(桜) 2023/04/03(月) 22:55:42

コメント返信:

[ 一覧(最新更新順) ]


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