数式が機能しません。数式にエラーが見つかりません

数式が機能しません。数式にエラーが見つかりません

これには非常に簡単な答えがあるはずですが、この数式を何時間も調べましたが、エラーの原因がわかりません。基本的に、数式で実行したいことは、F3 = "Freshman" の場合、U3 が空白かどうかを確認し、N3 を調べて値を入力し、U3 が空白でない場合は U3 を調べることです。次に、F3 != "Freshman" かつ V3 が空白の場合は S3 を調べ、V3 が空白でない場合は V3 を使用します。これを実行するより簡単な方法があるかもしれませんが、よくわかりません。

=IF(ISBLANK($U3)=TRUE,IF($F3="Freshman",IF(N3>=Lists!$H$7,3,IF(N3>=Lists!$H$6,2.5,IF(N3>=Lists!$H$5,2,IF(N3>=Lists!$H$4,1.5,IF(N3>=Lists!$H$3,1,IF(N3>=Lists!$H$2,0.5,IF(N3>Lists!$H$8,0,""))))))),IF(U3>=Lists!$I$7,3,IF(U3>=Lists!$I$6,2.5,IF(U3>=Lists!$I$5,2,IF(U3>=Lists!$I$4,1.5,IF(U3>=Lists!$I$3,1,IF(U3>=Lists!$I$2,0.5,IF(U3>=Lists!$I$8,"")))))))),IF(ISBLANK($V3)=TRUE,IF(S3>=Lists!$H$7,3,IF((S3>=Lists!$H$6,2.5,IF(S3>=Lists!$H$4,1.5,IF(S3>=Lists!$H$3,1,IF(S3>=Lists!$H$2,0.5,IF(S3>Lists!$H$8,0,"")))))),IF(V3>=Lists!$I$7,3,IF(V3>=Lists!$I$6,2.5,IF(V3>=Lists!$I$5,2,IF(V3>=Lists!$I$4,1.5,IF(V3>=Lists!$I$3,1,IF(V3>=Lists!$I$2,0.5,IF(V3>=Lists!$I$8,0,"")))))))))

ネストされた if がたくさんあることはわかっていますが、それがおそらく私を困らせている原因です。どなたか助けていただけると大変助かります。

答え1

数式をメモ帳に入力しました。その後、条件ごとに新しい行を開始し、タブを使用してさまざまな IF 関数を整理しました。これにより、問題のデバッグが容易になります。残念ながら、ファイルをアップロードする方法がわかりません。最後の「)」が 1 つ多すぎることと、数式に矛盾があることが分かりました。

たとえば、2 番目のリストでは最後のステートメントは S3>=lists$I$8,"") で終わりますが、他のリストでは S3>=lists$I$8,0,"") で終わります。

3 番目のリストでは、IF(U3>=Lists!$H$4,2 がありません。

ご希望であれば、ファイルをお送りして確認することもできます

答え2

コード化された表記法は次のとおりです

=IF(ISBLANK($U2)=TRUE,          'if condition #1
 IF($F3="Freshman",             '#1 true condition
  IF(N3>=Lists!$H$7,3,
   IF(N3>=Lists!$H$6,2.5,
    IF(N3>=Lists!$H$5,2,
     IF(N3>=Lists!$H$4,1.5,
      IF(N3>=Lists!$H$3,1,
       IF(N3>=Lists!$H$2,0.5,
        IF(N3>Lists!$H$8,0,"")
       )
      )
     )
    )
   )
  ),
   IF(S3>=Lists!$I$7,3,            '#1 false condition
    IF(S3>=Lists!$I$6,2.5,
     IF(S3>=Lists!$I$5,2,
      IF(S3>=Lists!$I$4,1.5,
       IF(S3>=Lists!$I$3,1,
        IF(S3>=Lists!$I$2,0.5,
         IF(S3>=Lists!$I$8,"")
        )
       )
      )
     )
    )
   )
  ),                              'everything before the comma is one function
   IF(ISBLANK($V2)=TRUE,          'new #2 if condition
    IF(U3>=Lists!$H$7,3,          '#2 true condition
     IF((U3>=Lists!$H$6,2.5,
      IF(U3>=Lists!$H$4,1.5,
       IF(U3>=Lists!$H$3,1,
        IF(U3>=Lists!$H$2,0.5,
         IF(Lists!$H$8,0,"")      'here is an if without a test condition
        )
       )
      )
     )
    ),
     IF(V3>=Lists!$I$7,3,         '#2 false condition
      IF(V3>=Lists!$I$6,2.5,
       IF(V3>=Lists!$I$5,2,
        IF(V3>=Lists!$I$4,1.5,
         IF(V3>=Lists!$I$3,1,
          IF(V3>=Lists!$I$2,0.5,
           IF(V3>=Lists!$I$8,0,"")
          )
         )
        )
       )
      )
     )
    )
   )
  )

答え3

代替案としては、ネストを減らすことです。

ヘルパー列の使用をお勧めしますが、必ずしも必要ではありません。ヘルパー列を使用すると、数式は次のようになります。

[N]: {=IFERROR(CHOOSE(LARGE(ROW($H$2:$H$7)*(N3>=$H$2:$H$7),1)-1,0.5,1,1.5,2,2.5,3),IF(N3>=$H$8,0,""))}
[S]: {=IFERROR(CHOOSE(LARGE(ROW($I$2:$I$7)*(S3>=$I$2:$I$7),1)-1,0.5,1,1.5,2,2.5,3),IF(S3>=$I$8,0,""))}
[U]: {=IFERROR(CHOOSE(LARGE(ROW($H$2:$H$7)*(U3>=$H$2:$H$7),1)-1,0.5,1,1.5,2,2.5,3),IF(U3>=$H$8,0,""))}
[V]: {=IFERROR(CHOOSE(LARGE(ROW($I$2:$I$7)*(V3>=$I$2:$I$7),1)-1,0.5,1,1.5,2,2.5,3),IF(V3>=$I$8,0,""))}

=IF(ISBLANK($U3),IF($F3="Freshman",[N],[U],IF(ISBLANK($V3),[S],[V])))

あるいは、データに余裕がある場合は、0.5 to 3 step 0.5範囲内の値を追加することをお勧めしますJ2:J7。必要に応じて数式に触れることなく値を変更できるため、メンテナンスが容易になる可能性があります。変更する場合、数式は次のようになります。

[N]: {=IFERROR(INDEX($J$2:$J$8,LARGE(ROW($H$2:$H$7)*(N3>=$H$2:$H$7),1)-1),IF(N3>=$H$8,0,""))}
[S]: {=IFERROR(INDEX($J$2:$J$8,LARGE(ROW($I$2:$I$7)*(S3>=$I$2:$I$7),1)-1),IF(S3>=$I$8,0,""))}
[U]: {=IFERROR(INDEX($J$2:$J$8,LARGE(ROW($H$2:$H$7)*(U3>=$H$2:$H$7),1)-1),IF(U3>=$H$8,0,""))}
[V]: {=IFERROR(INDEX($J$2:$J$8,LARGE(ROW($I$2:$I$7)*(V3>=$I$2:$I$7),1)-1),IF(V3>=$I$8,0,""))}

=IF(ISBLANK($U3),IF($F3="Freshman",[N],[U],IF(ISBLANK($V3),[S],[V])))

おそらく、これらはさらに改善される可能性があります。とはいえ、少なくともアイデアを提供できたことを願っています。

関連情報