• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ISERRORとIF関数の使い方)

ISERRORとIF関数の使い方

このQ&Aのポイント
  • =IF関数を使用してテスト得点を判定する方法について説明します。
  • テスト未受験の場合にエラー表示をさせない方法について教えてください。
  • 4回以上のテストで80点以上なら○、それ以外ならば×の表示方法について教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • bunjii
  • ベストアンサー率43% (3589/8249)
回答No.4

Q =IF(AND(C2>=80,D2>=80,E2>=80,F2>=88,G2>=80,H2>=80),"○","×")という数式で児童のテスト得点を判定しています。C~Hまでに数値があれば問題ないのですが、数値がない(=テスト未受験)とエラー表示がされます。そこで教えていただきたいのですが、この数式にISERRORを使って、エラー表示をさせないような数式ができるでしょうか? A 提示のIF関数の論理式(AND関数)は不適切です。 私が確認した結果ではC列~H列の何れかが空欄のときそのセルについてはFALSEが返り、文字列の場合はそのセルがTLUEとなりエラーは返りませんので目的に合いません。 論理式を見直されると良いでしょう。 Q たとえば、6回のテスト中、4回以上のテストで80点以上なら○、それ以外ならば×のように表示させる方法はあるのでしょうか。 A 次の式で良いと思います。 =IF(COUNTIF(C2:H2,">80")>3,"○","×")

shin919
質問者

補足

ご回答ありがとうございます。エクセルのバージョンは2010です。シートの状態をご説明します。 シート1にはB列は氏名  B列は氏名 C列は国24 D列は算24 E列国22 F列算22 G列国21 H列算21 I列は すべて80以上なら○ となっています。 C列のセルには =ROUND(IF(VLOOKUP(B2,Sheet2!B:D,2,FALSE)="","",VLOOKUP(B2,Sheet2!B:D,2,FALSE)),1) D列のセルには =ROUND(IF(VLOOKUP(B2,Sheet2!B:D,3,FALSE)="","",VLOOKUP(B2,Sheet2!B:D,3,FALSE)),1) E列のセルには =ROUND(IF(VLOOKUP(B2,Sheet3!B:D,2,FALSE)="","",VLOOKUP(B2,Sheet3!B:D,2,FALSE)),1) F列のセルには =ROUND(IF(VLOOKUP(B2,Sheet3!B:D,3,FALSE)="","",VLOOKUP(B2,Sheet3!B:D,3,FALSE)),1) G列のセルには =ROUND(IF(VLOOKUP(B2,Sheet4!B:D,2,FALSE)="","",VLOOKUP(B2,Sheet4!B:D,2,FALSE)),1) H列のセルには =ROUND(IF(VLOOKUP(B2,Sheet4!B:D,3,FALSE)="","",VLOOKUP(B2,Sheet4!B:D,3,FALSE)),1) の数式が入っています。 C列は平成24年度5年生での国語、D列は同じく算数→シート2にシート1の名簿と同じように昨年度のクラスでテスト結果が入力済みです。 同様にE列、F列は22年度で3年生のときでシート3に得点入力済み、 G,H列は21年度で2年生のときでシート4に得点入力済みです。 年度ごとに転出入があったり、病欠等で未受験のため、氏名掲載がなされておらず、当然、得点も入力されていない状態です。 当然のことですが、すべての年度で入力がある児童については、I列の○ × 判定は表示されています。       ※ 長々と書き連ねましたが、上手く説明できていないかもしれません。     もし、新たな対応策などございましたらお教えください。

その他の回答 (4)

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.5

 回答No.3です。  折角追加情報をご補足頂いたのですが、その内容を確認する前に質問が締め切られてしまったため、サイトのサポート様に御願いしてこの回答を掲載して頂きました。 >※ 長々と書き連ねましたが、上手く説明できていないかもしれません。  はい、肝心の「どの様な場合には『○』を付けて、どの様な場合には『×』にするのか」という事に関する説明が抜けております。 >B列は氏名 C列は国24 D列は算24 E列国22 F列算22 G列国21 H列算21 I列は すべて80以上なら○となっています。 との事ですが、B列からH列までが全て80以上となるのは、B列~H列のテストを全て受けている事が前提となります。  もし、1回でも受験していないテストがありますと、B列からH列までが全て80以上とはならない訳ですから、御補足頂いた条件では、「数値がない(=テスト未受験)」の場合には必ず「×」にしなければならないという事になってしまいます。  もしかしますと、質問者様が仰りたかった事は「6回のテストの中で、受験した回数には関係なく(つまり、1回でも受験している場合において)、未受験のデータは無視して、受験したテストに関しては全て80以上の点数となっている場合は『○』、1回でも80未満の点数がある場合には『×』」という事なのでしょうか?  もしその様な条件であるとしますと、次の様な関数となります。 =IF(COUNT(C2:H2),IF(COUNTIF(C2:H2,"<80"),"×","○"),"")  余談ですが、回答No.3で提示させて頂いた関数において、「○」にするのか「×」にするのかを判定する際に、他の回答者の方の様にCOUNTIF関数を使わずに、 (C2>=80)+(D2>=80)+(E2>=80)+(F2>=88)+(G2>=80)+(H2>=80)<4 としていたのは、質問者様がご質問文の中で提示された >=IF(AND(C2>=80,D2>=80,E2>=80,F2>=88,G2>=80,H2>=80),"○","×") という関数において、何故かF2セルの点数だけ合格点が88点以上となる様な条件となっていたため、合格点が80点以上ではない場合もあり得るものと思い、B列~H列のテストのそれぞれの合格ラインが異なる場合にも対応可能な様にするためです。  ですから、もし、合格ラインが一律の80点以上であり、尚且つ、少なくとも4回以上受験していて、受けたテストは全て合格している場合にのみ「○」とし、それ以外の場合、即ち、受験したテストの中で1回でも80点未満の点を取ったものがあるか、又は受験した回数が4回未満である場合には「×」とする、という条件でしたら次の様な関数となります。 =IF(COUNT(C2:H2),IF(OR(COUNT(C2:H2)<4,COUNTIF(C2:H2,"<80")),"×","○"),"")  それから、補足頂いたC2~H2に入力されている関数を拝見しましたが、 >数値がない(=テスト未受験)とエラー表示がされます。 という現象の原因はやはりC2~H2に入力されている関数にある様です。  例えば、C2セルに入力されている =ROUND(IF(VLOOKUP(B2,Sheet2!B:D,2,FALSE)="","",VLOOKUP(B2,Sheet2!B:D,2,FALSE)),1) という関数を例に採って説明致しますと、 VLOOKUP(B2,Sheet2!B:D,2,FALSE) という関数は、Sheet2のB列の中から、上記の関数が入力されているシートのB2セルの値と同じ値を持つセルを探し出し、そのセルと同じ行にあるSheet2のC列の値を返す関数です。  ですから、Sheet2のB列の中に、上記の関数が入力されているシートのB2セルの値と同じ値を持つセルが存在していなかった場合には、当然、エラーとなってしまいます。  又、上記の関数が入力されているシートのB2セルが空欄となっている場合も、探す基準となる値が存在していない訳ですから、同様にエラーとなってしまいます。  それに加えて、 IF(VLOOKUP(B2,Sheet2!B:D,2,FALSE)="","", という箇所において、 VLOOKUP(B2,Sheet2!B:D,2,FALSE) の部分の計算結果が空欄である場合には、IF関数を使って空欄を返す様にしているため、もし、 VLOOKUP(B2,Sheet2!B:D,2,FALSE) の部分計算結果が空欄である場合、即ち、Sheet2のB列の中で、上記の関数が入力されているシートのB2セルの値と同じ値を持つセルと同じ行にあるSheet2のC列のセルが空欄である場合には、 =ROUND(IF(VLOOKUP(B2,Sheet2!B:D,2,FALSE)="","",VLOOKUP(B2,Sheet2!B:D,2,FALSE)),1) という関数は、 =ROUND("",1) という事になり、数値ではない値を四捨五入するという不可能な処理を行う関数になってしまいますから、エラーとなります。  この様に、C2セルに入力されている関数は「B2セルが空欄の場合」、「Sheet2のB列の中に、B2セルの値と同じ値を持つセルが無い場合」、「B2セルに入力されている生徒の、Sheet2のC列の点数欄が空欄である場合」等にはエラーとなってしまいます。  他のD2~H2に入力されている関数も、参照先が多少異なるだけで、同じ構造を持つ関数なのですから、C2セルに入力されている関数と同様にエラーとなりやすい関数と言えます。  ですから、C2~H2に入力されている各関数を、次の様に変更される事を御勧め致します。 【C2セルの関数】 =IF(ISNUMBER(VLOOKUP(B2,Sheet2!B:D,2,FALSE)),ROUND(VLOOKUP(B2,Sheet2!B:D,2,FALSE),1),"") 【D2セルの関数】 =IF(ISNUMBER(VLOOKUP(B2,Sheet2!B:D,3,FALSE)),ROUND(VLOOKUP(B2,Sheet2!B:D,3,FALSE),1),"") 【E2セルの関数】 =IF(ISNUMBER(VLOOKUP(B2,Sheet3!B:D,2,FALSE)),ROUND(VLOOKUP(B2,Sheet3!B:D,2,FALSE),1),"") 【F2セルの関数】 =IF(ISNUMBER(VLOOKUP(B2,Sheet3!B:D,3,FALSE)),ROUND(VLOOKUP(B2,Sheet3!B:D,3,FALSE),1),"") 【G2セルの関数】 =IF(ISNUMBER(VLOOKUP(B2,Sheet4!B:D,2,FALSE)),ROUND(VLOOKUP(B2,Sheet4!B:D,2,FALSE),1),"") 【H2セルの関数】 =IF(ISNUMBER(VLOOKUP(B2,Sheet4!B:D,3,FALSE)),ROUND(VLOOKUP(B2,Sheet4!B:D,3,FALSE),1),"")

shin919
質問者

お礼

こんばんは。本当に親身なご回答に感謝いたします。 自分の説明の至らなさで何かとご迷惑おかけしたことをこの場をお借りしてお詫びします。 >もしかしますと、質問者様が仰りたかった事は「6回のテスト>の中で、受験した回数には関係なく(つまり、1回でも受験し>ている場合において)、未受験のデータは無視して、受験した>テストに関しては全て80以上の点数となっている場合は『○』、>1回でも80未満の点数がある場合には『×』」という事なのでし>ょうか? > もしその様な条件であるとしますと、次の様な関数となりま>す。=IF(COUNT(C2:H2),IF(COUNTIF >(C2:H2,"<80"),"×","○"),"") おっしゃる通り、私がイメージしていたのは、ご回答者さまの文章を引用させて頂いた通りです。 そのような訳で、無事に解決しました。 ありがとうございました。

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.3

 既に他の回答者の方々が書かれておられる様に、質問者様が提示されておられる関数の場合、「数値が無い」というだけの事でエラーとなる事はありません。  その関数でエラーとなるのは、C2、D2、E2、F2、G2、H2の内の何れかのセルの表示がエラーとなっている場合のみです。  ですから、もしもエラー表示が現れているとしますと、その原因は =IF(AND(C2>=80,D2>=80,E2>=80,F2>=88,G2>=80,H2>=80),"○","×") という数式にあるのではなく、C2、D2、E2、F2、G2、H2の内の何れかのセルに入力されている関数の方にある事になりますので、C2、D2、E2、F2、G2、H2に入力されている関数を見直さなければなりません。  尚、エラーが現れているのではなく、「数値が無い」場合において、単に「質問者様が表示させたい結果とは異なる結果が表示される」という事でしたら、やり様は幾らでもあります。  例えば、 「C2の合格点は80点以上」、「D2の合格点は80点以上」、「E2の合格点は80点以上」、「F2の合格点は80点以上」、「G2の合格点は80点以上」、「H2の合格点は80点以上」という条件の下で、 「6科目のテストの内、合格した科目が4科目以上である場合には、例え未受験の科目があったとしても○を表示させ、4科目未満である場合には×を表示させる」、 尚且つ、「全科目が未受験の場合には何も表示しない」 という場合には、次の様な関数となります。 =IF(COUNT(C2,D2,E2,F2,G2,H2),IF((C2>=80)+(D2>=80)+(E2>=80)+(F2>=88)+(G2>=80)+(H2>=80)<4,"×","○"),"")  但し、C2、D2、E2、F2、G2、H2の内の何れかのセルに、数値ではなく何らかの文字列データが入力されている事もある場合には、Excelでは文字列は数値よりも大きな値として扱われますので、上記の関数のままでは文字列が入力されているセルの科目も合格と見做されてしまいます。  ですから、もしも、C2、D2、E2、F2、G2、H2の内の何れかのセルに、何らかの文字列データが入力される可能性もある場合には、次の様な関数にすると良いと思います。 =IF(COUNT(C2,D2,E2,F2,G2,H2),IF((SUM(C2>=80))+(SUM(D2)>=80)+(SUM(E2)>=80)+(SUM(F2)>=88)+(SUM(G2)>=80)+(SUM(H2)>=80)<4,"×","○"),"")  又、例えば、 「全科目が未受験の場合には何も表示しない」、 「6科目のテストの内、合格した科目が4科目以上である場合には○を表示させ、4科目未満である場合には×を表示させる」、 但し、「1科目でも未受験の科目がある場合には、合格点に達した科目が何科目あるのかという事には関係なく、未受験の科目が何科目あるのかという事を表示する」 という場合には、次の様な関数となります。 =IF(COUNT(C2,D2,E2,F2,G2,H2)=6,IF((C2>=80)+(D2>=80)+(E2>=80)+(F2>=88)+(G2>=80)+(H2>=80)<4,"×","○"),IF(COUNT(C2,D2,E2,F2,G2,H2),"未受験"&6-COUNT(C2,D2,E2,F2,G2,H2)&"科目",""))  因みに、C2、D2、E2、F2、G2、H2の内の何れかのセルにエラーが現れていたとしても、その事には関係せずに、兎に角 「全科目が未受験の場合には何も表示しない」、 「6科目のテストの内、合格した科目が4科目以上である場合には○を表示させ、4科目未満である場合には×を表示させる」、 という場合には、次の様な関数となります。 =IF(COUNT(C2,D2,E2,F2,G2,H2),IF(ISNUMBER(1/(C2-80>=0))+ISNUMBER(1/(D2-80>=0))+ISNUMBER(1/(E2-80>=0))+ISNUMBER(1/(F2-88>=0))+ISNUMBER(1/(G2-80>=0))+ISNUMBER(1/(H2-80>=0))<4,"×","○"),"")  尤も、エラーが現れる事を問題にしていながら、C2、D2、E2、F2、G2、H2に現れているエラーの方は放置するというのはおかしな話ですし、そのエラーを放置していたのでは、例えこの御質問の「○×を付ける関数」に関しては上記の関数とする事で解決出来たとしましても、そのエラーが原因となって別の所で不具合が生じる恐れまでが無くなる訳では御座いません。  ですから、もしも、C2、D2、E2、F2、G2、H2の内の何れかのセルにエラーが現れている場合には、「○×を付ける関数」の所で工夫するのではなく、まずC2、D2、E2、F2、G2、H2にエラーが表示される事が無い様にする事が肝心です。

shin919
質問者

補足

ご回答ありがとうございます。エクセルのバージョンは2010です。シートの状態をご説明します。 シート1にはB列は氏名  B列は氏名 C列は国24 D列は算24 E列国22 F列算22 G列国21 H列算21 I列は すべて80以上なら○ となっています。 C列のセルには =ROUND(IF(VLOOKUP(B2,Sheet2!B:D,2,FALSE)="","",VLOOKUP(B2,Sheet2!B:D,2,FALSE)),1) D列のセルには =ROUND(IF(VLOOKUP(B2,Sheet2!B:D,3,FALSE)="","",VLOOKUP(B2,Sheet2!B:D,3,FALSE)),1) E列のセルには =ROUND(IF(VLOOKUP(B2,Sheet3!B:D,2,FALSE)="","",VLOOKUP(B2,Sheet3!B:D,2,FALSE)),1) F列のセルには =ROUND(IF(VLOOKUP(B2,Sheet3!B:D,3,FALSE)="","",VLOOKUP(B2,Sheet3!B:D,3,FALSE)),1) G列のセルには =ROUND(IF(VLOOKUP(B2,Sheet4!B:D,2,FALSE)="","",VLOOKUP(B2,Sheet4!B:D,2,FALSE)),1) H列のセルには =ROUND(IF(VLOOKUP(B2,Sheet4!B:D,3,FALSE)="","",VLOOKUP(B2,Sheet4!B:D,3,FALSE)),1) の数式が入っています。 C列は平成24年度5年生での国語、D列は同じく算数→シート2にシート1の名簿と同じように昨年度のクラスでテスト結果が入力済みです。 同様にE列、F列は22年度で3年生のときでシート3に得点入力済み、 G,H列は21年度で2年生のときでシート4に得点入力済みです。 年度ごとに転出入があったり、病欠等で未受験のため、氏名掲載がなされておらず、当然、得点も入力されていない状態です。 当然のことですが、すべての年度で入力がある児童については、I列の○ × 判定は表示されています。       ※ 長々と書き連ねましたが、上手く説明できていないかもしれません。     もし、新たな対応策などございましたらお教えください。

  • M-SOFT
  • ベストアンサー率58% (23/39)
回答No.2

こんばんは。 >数値がない(=テスト未受験)とエラー表示がされます。 エクセルではこのようなエラー表示はありません。 C~Hに未入力があっても、提示されている数式ではエラーにはなりません。×になります。 未入力のセルは0扱いになります。 >数値がない(=テスト未受験)とエラー表示がされます。 どこに表示されているのでしょうか?C~Hだとすると、数式やマクロ、入力規則などで未入力の時にそのように表示する仕掛けになっているのでしょう。 そこの表示ということであれば、表示させている仕組みを補足して下さい。

shin919
質問者

補足

ご回答ありがとうございます。エクセルのバージョンは2010です。シートの状態をご説明します。 シート1にはB列は氏名  B列は氏名 C列は国24 D列は算24 E列国22 F列算22 G列国21 H列算21 I列は すべて80以上なら○ となっています。 C列のセルには =ROUND(IF(VLOOKUP(B2,Sheet2!B:D,2,FALSE)="","",VLOOKUP(B2,Sheet2!B:D,2,FALSE)),1) D列のセルには =ROUND(IF(VLOOKUP(B2,Sheet2!B:D,3,FALSE)="","",VLOOKUP(B2,Sheet2!B:D,3,FALSE)),1) E列のセルには =ROUND(IF(VLOOKUP(B2,Sheet3!B:D,2,FALSE)="","",VLOOKUP(B2,Sheet3!B:D,2,FALSE)),1) F列のセルには =ROUND(IF(VLOOKUP(B2,Sheet3!B:D,3,FALSE)="","",VLOOKUP(B2,Sheet3!B:D,3,FALSE)),1) G列のセルには =ROUND(IF(VLOOKUP(B2,Sheet4!B:D,2,FALSE)="","",VLOOKUP(B2,Sheet4!B:D,2,FALSE)),1) H列のセルには =ROUND(IF(VLOOKUP(B2,Sheet4!B:D,3,FALSE)="","",VLOOKUP(B2,Sheet4!B:D,3,FALSE)),1) の数式が入っています。 C列は平成24年度5年生での国語、D列は同じく算数→シート2にシート1の名簿と同じように昨年度のクラスでテスト結果が入力済みです。 同様にE列、F列は22年度で3年生のときでシート3に得点入力済み、 G,H列は21年度で2年生のときでシート4に得点入力済みです。 年度ごとに転出入があったり、病欠等で未受験のため、氏名掲載がなされておらず、当然、得点も入力されていない状態です。 当然のことですが、すべての年度で入力がある児童については、I列の○ × 判定は表示されています。       ※ 長々と書き連ねましたが、上手く説明できていないかもしれません。     もし、新たな対応策などございましたらお教えください。

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

>数値がない(=テスト未受験)とエラー表示がされます。 いいえ、そんなことにはなりません。もう一度ご自分でまずまっさらのエクセルを開いて、ご自分の数式を記入した上でC2からH2に色々な数字や「数値が無い状態」を再現して、問題が発生しないことを確認してください。 そのうえで、いま「確かにエラーが出ている」としたら、考えられる原因はあなたの「問題のエクセル」でC2からH2までのセルに「既にエラーが出ている(のにご自分で細工をしていてその事に気が付いていない)」といった状況が想定されます。 このまんまでは、回答者からどんなに素晴らしい代わりのやり方を教わっても、問題は一向に解決する事はできません。 ただ敢えて言うなら、ISERROR関数に着目したのはある意味結果オーライの可能性はありますね。 ご利用のエクセルのバージョンも不明のご相談ですが、エクセル2007以降を使っているなら =IFERROR(IF(AND(C2>=80,D2>=80,E2>=80,F2>=88,G2>=80,H2>=80),"○","×"),"エラーです") エクセル2003以前を使っているなら =IF(ISERROR(AND(C2>=80,D2>=80,E2>=80,F2>=88,G2>=80,H2>=80)),"エラーです",IF(AND(C2>=80,D2>=80,E2>=80,F2>=88,G2>=80,H2>=80),"○","×")) といった具合に組み立てる事は可能です。 ただそれよりは、最初に回答したようにまずCからHに実はエラーが起きていないかしっかり確認したうえで、たとえば =IF(COUNTIF(C2:H2,">=80")=6,"○","×") あるいは =IF(COUNTIF(C2:H2,">=80")>=4,"○","×") などのように計算したほうが、遥かに簡単ですしスマートです。 念のため繰り返しておきますが、いまあなたの式でエラーになっているのでしたら、この式もやっぱりエラーです。 #補足 そもそも「エラー」とおっしゃってるのが「具体的に何が現れている」のか、ご相談では不明瞭なままです。通常エクセルで「エラー」とは、たとえば「#VALUE!」とかいったエラー表示の事をいいます。 ただ、ご質問のあなたの数式では、例えばCからHに「実は数式を記入していて状況によっては""を計算して非表示にしている」といった場合に、「エラー表示ではなく間違った計算結果を表示します」。 この状況は「エラーではない」ので、もちろんISERRORもIFERRORも利用する事はできません。

shin919
質問者

補足

ご回答ありがとうございます。エクセルのバージョンは2010です。シートの状態をご説明します。 シート1にはB列は氏名  B列は氏名 C列は国24 D列は算24 E列国22 F列算22 G列国21 H列算21 I列は すべて80以上なら○ となっています。 C列のセルには =ROUND(IF(VLOOKUP(B2,Sheet2!B:D,2,FALSE)="","",VLOOKUP(B2,Sheet2!B:D,2,FALSE)),1) D列のセルには =ROUND(IF(VLOOKUP(B2,Sheet2!B:D,3,FALSE)="","",VLOOKUP(B2,Sheet2!B:D,3,FALSE)),1) E列のセルには =ROUND(IF(VLOOKUP(B2,Sheet3!B:D,2,FALSE)="","",VLOOKUP(B2,Sheet3!B:D,2,FALSE)),1) F列のセルには =ROUND(IF(VLOOKUP(B2,Sheet3!B:D,3,FALSE)="","",VLOOKUP(B2,Sheet3!B:D,3,FALSE)),1) G列のセルには =ROUND(IF(VLOOKUP(B2,Sheet4!B:D,2,FALSE)="","",VLOOKUP(B2,Sheet4!B:D,2,FALSE)),1) H列のセルには =ROUND(IF(VLOOKUP(B2,Sheet4!B:D,3,FALSE)="","",VLOOKUP(B2,Sheet4!B:D,3,FALSE)),1) の数式が入っています。 C列は平成24年度5年生での国語、D列は同じく算数→シート2にシート1の名簿と同じように昨年度のクラスでテスト結果が入力済みです。 同様にE列、F列は22年度で3年生のときでシート3に得点入力済み、 G,H列は21年度で2年生のときでシート4に得点入力済みです。 年度ごとに転出入があったり、病欠等で未受験のため、氏名掲載がなされておらず、当然、得点も入力されていない状態です。 当然のことですが、すべての年度で入力がある児童については、I列の○ × 判定は表示されています。       ※ 長々と書き連ねましたが、上手く説明できていないかもしれません。     もし、新たな対応策などございましたらお教えください。

関連するQ&A

専門家に質問してみよう