• ベストアンサー
  • 困ってます

ISERROR関数を使用してもエラーが出る

Excel2016でセルにUSDまたは、JPYの文字がある場合はエラーが出ないのですが、それ以外の文字の場合ISERROR関数を使用しても#VALUE!というエラーが出ます。 関数は以下の通りです。 =IF(OR(NOT(ISNUMBER($G5)),NOT(ISNUMBER($K5))),"",IF($B$5<ROUNDDOWN($I5*IF(NOT(ISERROR(SEARCH("JPY",$D5,1))),100,VLOOKUP(CONCATENATE(MID($D5,IF(OR(SEARCH("USD",$D5,1)=4,ISERROR(SEARCH("USD",$D5,1))),1,4),3),"JPY"),$A$12:$B$18,2,FALSE))*$G5*$B$8/IF($B$8=100000,10000,IF($B$8=10000,1000,IF($B$8=1000,100,))),0),"超過",ROUNDDOWN(IF(ISNUMBER($P5),-$P5,-$I5)*IF(NOT(ISERROR(SEARCH("JPY",$D5,1))),100,VLOOKUP(CONCATENATE(MID($D5,IF(OR(SEARCH("USD",$D5,1)=4,ISERROR(SEARCH("USD",$D5,1))),1,4),3),"JPY"),$A$12:$B$18,2,FALSE))*$G5*$B$8/IF($B$8=100000,10000,IF($B$8=10000,1000,IF($B$8=1000,100,))),0))) エラーが出ているのは以下の「【】」の部分のようです。 =IF(OR(NOT(ISNUMBER($G5)),NOT(ISNUMBER($K5))),"",IF($B$5<ROUNDDOWN($I5*IF(【NOT(ISERROR(SEARCH("JPY",$D5,1)))】~ 数値を表示したいのですが解決方法を教えてください。 回答よろしくお願いします。

共感・応援の気持ちを伝えよう!

  • 回答数4
  • 閲覧数358
  • ありがとう数4

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

  • ベストアンサー
  • 回答No.4

 回答No.3です。 >B8はリストになっており数値しか入力できないようになっています。 との事ですが、数値データの中にも1や99999999などと言った「1000,10000,100000以外の値」も存在します。  とは言えおそらく質問者様が仰りたい事は「B8セルには1000,10000,100000の3つの内の何れか1つの値しか入力される事は無い」という事なのではないかと推測致します。  その場合は、 $B$8/IF($B$8=100000,10000,IF($B$8=10000,1000,IF($B$8=1000,100,))) の部分の計算結果は必ず10になるのですから、 $B$8/IF($B$8=100000,10000,IF($B$8=10000,1000,IF($B$8=1000,100,))) の部分を単に数値の 10 に差し替えてしまっても問題は無いという事になりますので、御質問の件の関数を次の様に修正されると宜しいかと思います。 =IF(COUNT($B$5,$B$8,$G5,$I5,$K5)=5,IF($B$5<ROUNDDOWN($I5*IFERROR(VLOOKUP(MID($D5,IF(ISERROR(1/(SEARCH("USD",$D5)<>4)),1,4),3)&"JPY",$A$12:$B$18,2,FALSE),100)*$G5*$B$8/10,0),"超過",ROUNDDOWN(IF(ISNUMBER($P5),-$P5,-$I5)*IFERROR(VLOOKUP(MID($D5,IF(ISERROR(1/(SEARCH("USD",$D5)<>4)),1,4),3)&"JPY",$A$12:$B$18,2,FALSE),100)*$G5*$B$8/10,0)),"")

共感・感謝の気持ちを伝えよう!

質問者からのお礼

再度、回答をいただきありがとうございます。 B8はおっしゃる通り、1000,10000,100000のいずれかです。 自分が最初に作ったB8に関する関数は長く、単に「$B$8/10」とした方がいいですね。 関数の回答をいただきありがとうございました。

関連するQ&A

  • セルの範囲内から部分一致する文字を表示する関数

    最初に、「検索するセルの範囲内から文字を表示する方法」の質問で回答をいただいた方々には大変ご迷惑をおかけしまして申し訳ありませんでした。 それでは本題ですが、A行とD行には次のような文字が入力されています。 A15:USDJPY A16:EURUSD A17:GBPUSD A18:AUDUSD A19:USDCHF A20:USDCAD A21:NZDUSD D5:USDJPY D6:EURUSD D7:GBPUSD D8:AUDUSD D9:USDCHF D10:USDCAD D11:NZDUSD D12:EURJPY D13:GBPJPY D14:AUDJPY D15:CHFJPY D16:CADJPY D17:NZDJPY D18:EURGBP D19:EURAUD D20:EURCHF D21:EURCAD D22:EURNZD D23:GBPAUD D24:GBPCHF D25:GBPCAD D26:GBPNZD D27:AUDCHF D28:AUDCAD D29:AUDNZD D30:CADCHF D31:NZDCHF D32:NZDCAD 次に、関数式の条件は以下の通りです。 1. D行で「JPY」の文字が含まれている場合は、全て「USDJPY」と表示します。 2. D行で「USD」の文字が4文字目以降の場合は、全て「不要」と表示します。 3. D行で「USD」の文字が1文字目からの場合は、D行を表示します。ただし、「USDJPY」の場合は除きます。 4. D行で「JPY」も「USD」も含まれない場合は、D行の右側の3文字に当てはまる文字列をA15からA21の範囲から検索し、部分一致する文字を表示します。 「4」の意味は、 例えば、D18の「EURGBP」であれば、右側の3文字が「GBP」なのでA15からA21の範囲で「GBP」が含まれるA17の「GBPUSD」を表示します。 また、D21の「EURCAD」であれば、右側の3文字が「CAD」なのでA15からA21の範囲で「CAD」が含まれるA20の「USDCAD」を表示します。 関数はI5からI行に表示するようにしており、I5の式は次の通りです。 =IF(OR(NOT(ISNUMBER($B$7)),NOT(ISNUMBER($J5))),"",IF(NOT(ISERROR(SEARCH("JPY",$D5,1))),"USDJPY",IF(SEARCH("USD",$D5,1)=4,"不要",IF(SEARCH("USD",$D5,1)=1,$D5,VLOOKUP("*" & RIGHT($D5,3) & "*",A$15:A$21,1,FALSE))))) しかし「4」のD行で「JPY」も「USD」も含まれない場合、「#VALUE!」のエラーが表示されてしまいます。 それを「4」のように表示したいのですが、どのような関数式にすればよいのでしょうか? Excel2016です。 回答よろしくお願いします。

  • エクセル関数 → VBAへの変換をどうやって行えばいいでしょうか? 特に、.Formula=にエクセル関数をいれたい場合

    エクセル関数 → VBAへの変換 現在、エクセル関数で記述していた以下の命令をすべてVBAに置き換える必要があります。 理由は、VBAで初期化ボタンをつくってそのボタンを押したとき、対象セルにデフォルトでエクセル関数の 式を入れたいからです。 なので、エクセル関数を以下のようにVBAにいれていました .Cells(7, 51).Formula = "C6&E6" しかし、これを以下のようにすると、エラーになってしまいました。 .Cells(7, 51).Formula = "C6&" "&E6" '氏名の間に半角スペースを入れたいため 同様に、以下のものがすべてエラーになります。 .Cells(8, 51).Formula = "L9&M9&"年"&N9&"月"&O9&"日"" .Cells(9, 51).Formula = "IF(OR(ISNUMBER(SEARCH("090-",C9)),ISNUMBER(SEARCH("070-",C9)),ISNUMBER(SEARCH("080-",C9))),"",C9)" どうすればよろしいでしょうか?

  • エクセルの関数について、変ですか?

    以下の関数をセルに入力したのですが、 エラーというか「入力した数式は正しくありません」とメッセージが出てきます。 どこか変なところありますか? さっぱり分かりません。 =IF(A1=\"\",\"\",IF(NOT(ISERROR(SEARCH(\"a10\",A1,1))),\"####\",IF(NOT(ISERROR(SEARCH(\"b10\",A1,1))),\"$$$$\",IF(NOT(ISERROR(SEARCH(\"c10\",A1,1))),\"%%%%\",IF(NOT(ISERROR(SEARCH(\"d10\",A1,1))),\"$$$$\",IF(NOT(ISERROR(SEARCH(\"e10\",A1,1))),\"$$$$\",\"何それ?\")))))))

その他の回答 (3)

  • 回答No.3

> エラーが出ているのは以下の「【】」の部分のようです。 > =IF(OR(NOT(ISNUMBER($G5)),NOT(ISNUMBER($K5))),"",IF($B$5<ROUNDDOWN($I5*IF(【NOT(ISERROR(SEARCH("JPY",$D5,1)))】~  その部分はISERROR関数なのですから、エラーとなる事はあり得ません。  エラーとなる恐れがあるのは、それとは「別の所にあるSEARCH関数の部分」や「VLOOKUP関数の結果を使って掛け算を行っている点」などです。  又、御質問文に書かれている関数には、SEARCH関数以外にもエラーとなる恐れがある部分が幾つもあります。  例えば、 ROUNDDOWN($I5* という具合に、I5セルの値に掛け算をする様になっている箇所がありますが、もしI5セルに数値ではなく文字列データが入力されていた場合には、文字列は計算の対象とする事は出来ませんから、ここで#VALUE!エラーとなってしまいます。  又、御質問文に書かれている関数の中に $B$8/IF($B$8=100000,10000,IF($B$8=10000,1000,IF($B$8=1000,100,))) という箇所がありますが、その最後のIF関数である IF($B$8=1000,100,) の中の[偽の場合]の所が何も指定されておりませんが、それは何故なのでしょうか?  このままでは、B8セルに1000,10000,100000以外の値が入力されていた場合や何も入力されていない場合には、 IF($B$8=100000,10000,IF($B$8=10000,1000,IF($B$8=1000,100,))) の部分の計算結果がFALSEとなり、ExcelではFALSEは数値の0として扱われますから、 $B$8/IF($B$8=100000,10000,IF($B$8=10000,1000,IF($B$8=1000,100,))) の部分は、「B8セルの値」を0で割る事になってしまいますのでエラーとなってしまいます。  ですから、エラーにならない様にするためには「B8セルに1000,10000,100000以外の値が入力されていた場合」においてB8セルの値をどの様な数値で割れば良いのかを御教え願います。  尚、もしも「B8セルには1000,10000,100000の3つの内の何れか1つの値しか入力される事は無い」という事であれば、 $B$8/IF($B$8=100000,10000,IF($B$8=10000,1000,IF($B$8=1000,100,))) の部分の計算結果は必ず10になるのですから、 $B$8/IF($B$8=100000,10000,IF($B$8=10000,1000,IF($B$8=1000,100,))) の部分を単に数値の 10 に差し替えてしまえば良いように思えるのですが、この部分を数値の10にしてしまう事で何か問題が起きる恐れはあるのでしょうか?  他にもまだまだエラーとなる恐れがあるか所が沢山あるのですが、取りあえず上記の $B$8/IF($B$8=100000,10000,IF($B$8=10000,1000,IF($B$8=1000,100,))) の部分の問題を解決しない事にはどの様な関数とすれば良いのか(質問者様以外の人間には)判断する事が出来ませんので、「B8セルに1000,10000,100000以外の値が入力されていた場合」においてB8セルの値をどの様な数値で割れば良いのかという事と、上記の部分を単に $B$8/10 にしてしまっても良いものなのかどうかという事に関して先に御教え願います。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

回答ありがとうございます。 とっさに質問したため、内容について説明不足なところが多くてすいません。 I5の部分は他の部分で計算された数値です。I5を計算する元のデータが数値でなければエラーになってしまうのですが。 また、B8はリストになっており数値しか入力できないようになっています。これは数値の単位です。 回答者様には分からないB8セルの疑問をいただいて、再度回答をくださる予定でいたと思うので申し訳ないのですが、他の回答者様の回答で解決することができました。 また、新たな質問があったときお手数をおかけしますがそのときはよろしくお願いします。 ありがとうございました。

  • 回答No.2

MID($D5,IF(OR(SEARCH("USD",$D5,1)=4,ISERROR(SEARCH("USD",$D5,1))),1,4),3) この書き方では、エラーを回避できない。 左(最初)にある「SEARCH」がエラーになると、この式は、全体が「#vALUE!」のエラーになる。 すると、次にある「ISERROR」は、何の意味も成さない。 このMID関数は MID($D5,IF(ISERROR(SEARCH("USD",$D5,1)),1,IF(SEARCH("USD",$D5,1)=4,1,4)),3) のように書かないといけません(2か所あるので、2つとも直す)

共感・感謝の気持ちを伝えよう!

質問者からのお礼

回答ありがとうございます。 IF関数の中にIF関数を入力しないとエラーは回避できないんですね。 解決することができました。 ありがとうございました。

  • 回答No.1
  • trytobe
  • ベストアンサー率36% (3455/9588)

ISERROR() の結果を真偽で反転させたりせず、そのまま IF() の条件として、成り立つときに ROUNDDOWN($I5) なり 不成立のときに ROUNDDOWN($I5) なりを返すような論理構造にしてはいかがですか。 エラー表示をさせたくない時は ISERROR関数 Excel塾 http://kokodane.com/kan22.htm

共感・感謝の気持ちを伝えよう!

質問者からのお礼

回答ありがとうございます。 >そのまま IF() の条件として、成り立つときに ROUNDDOWN($I5) なり 不成立のときに ROUNDDOWN($I5) なりを返すような論理構造にしてはいかがですか。 なるほど、分かりました。 解決できました。 ありがとうございました。

関連するQ&A

  • エクセルの関数について、変ですか?

    以下の関数をセルに入力したのですが、 エラーというか「入力した数式は正しくありません」とメッセージが出てきます。 どこか変なところありますか? さっぱり分かりません。 =IF(A1="","",IF(NOT(ISERROR(SEARCH("a10",A1,1))),"####",IF(NOT(ISERROR(SEARCH("b10",A1,1))),"$$$$",IF(NOT(ISERROR(SEARCH("c10",A1,1))),"%%%%",IF(NOT(ISERROR(SEARCH("d10",A1,1))),"$$$$",IF(NOT(ISERROR(SEARCH("e10",A1,1))),"$$$$","何それ?")))))))

  • EXCEL関数について

    質問があります。 エクセルのA行に 定期点検 (月度検査) ラジオ修理 ボリューム つまみ 校正 視力検査 ボールペン 発注 替芯 購入 コピー用紙 経費 ポケットティッシュ配布用    ・    ・       ・  とあるのを、B行に下記の用に変換したいのですが、 検査 修理 検査 検査 購入 購入 購入 購入 その他 その他 その他    ・    ・       ・  下記のように関数をつくったのですが、うまく動きません =IF(A1="","",IF(ISNUMBER(FIND("点検",A1)),"検査",IF(ISNUMBER(FIND("修理",A1)),"修理",IF(ISNUMBER(FIND("校正",A1)),"検査",IF(ISNUMBER(FIND("検査",A1)),"検査",IF(ISNUMBER(FIND("発注",A1)),"購入",IF(ISNUMBER(FIND("購入",A1)),"購入",IF(ISNUMBER(FIND("経費",A1)),"購入,"IF(ISNUMBER(FIND("配布用",A1)),"購入","その他"))))) わかる方がいらっしゃいましたら、どうぞ教えて下さい。

  • EXCEL関数使用で結果が理解できません

    OS:WindowsXP EXCEL2000 以下の表が既に作成されています。 行 :O(英文字オーです) ------------------ 列 6 | 96 7 |216 8 |216 9 |185 10 |(空欄) 11 |(空欄) ここで、セルR6に以下の式が入力されています。 =INDIRECT("R"&MAX(IF(ISNUMBER(O6:O11),ROW(O6:O11)))&"C"&COLUMN(O6:O11),FALSE) セルR6には185が表示されているため、空欄でない最後の行の数値を 出力させる式のようなのですが、よく理解できません。 ISNUMBER(O6:O11)は全部数値だった場合にTrueになるのですか? ROW(O6:O11)は6でした。 IF(ISNUMBER(O6:O11),ROW(O6:O11))はFALSEです。 MAX(IF(ISNUMBER(O6:O11),ROW(O6:O11)))は0です。 COLUMN(O6:O11)は15です。 どなたか知恵をお貸しください。

  • “ISNUMBER” を含む関数について

    現在、下記関数を使用しています。 C5=IF(ISNUMBER(B5),VLOOKUP(B5,支払先,2,FALSE)," ") B5に[支払先C]を入力すると、C5に[支払先]が出るようになっています。 [支払先C]と[支払先]は、別シートに一覧表示し、リンクさせてる状態です。 そこで質問です。 (1)別シート一覧表の範囲設定方法  (現在、行の挿入で追加しています) (2)“ISNUMBER”の意味  (IFとVLOOKUPの意味は理解できています) 引継ぎ時に型ができていたので、内容を理解しないまま使っています。 補足が必要かと思いますので、質問も兼ねてご回答頂ければと思います。 宜しくお願い致します。

  • IsNumberについて

    Sub macro01() If WorksheetFunction.IsNumber(123) = ture Then MsgBox "数値です" End If End Sub WorksheetFunction.IsNumber(123)で、数値なら、MsgBox "数値です"って表示されると思ったのですが、 MsgBox "数値です"を通りません。 123を数値と認識してないのでしょうか?

  • エクセルで文字列検索の関数

    エクセルのワークシート関数で質問です。 「A1セルに、文字列、A、B、Cの何れかを含み、かつCDを含まない」ことを調べる関数です。 素直に、 =AND(ISNUMBER(FIND("A",A1)),ISNUMBER(FIND("B",A1)),ISNUMBER(FIND("C",A1)),NOT(ISNUMBER(FIND("CD",A1)))) と長ったらしく書けば取得できることはわかるのですが、もっと簡潔なやり方がありそうな気がします。 どうか教えてください。

  • エクセル IF式について、

    先日からこちらで=IFとisnumberの使い方を教えていただき、次のような式を作りました。 =IF(isnumber(C2),B2+C2+F2+G2+J2+K2,"") これで(C2)に数値がある時のみ計算結果を打ち返し、文字その他は空欄で、が出来ました。 次にやりたいことは、(C2)と(G2)と(K2)のいずれかに数値がある時に計算させる式はどのようにすればよろしいでしょうか? 以下の4つを試しましたがNGでした。 =IF(isnumber(C2,G2,K2),B2+C2+F2+G2+J2+K2,"") =IF(isnumber((C2)*(G2)*(K2)),B2+C2+F2+G2+J2+K2,"") =IF(isnumber((C2)OR(G2)OR(K2)),B2+C2+F2+G2+J2+K2,"") =IF(ISNUMBER((C2)*OR(G2)*OR(K2)),B2+C2+F2+G2+J2+K2,"") よろしくお願いします。

  • エクセルでカレンダ-を作りたいです。

    よろしくお願いします。 エクセルでカレンダ-を作ろうと思い http://oshiete1.goo.ne.jp/qa1137270.html を参照し作成したところ 2007年度の2月、3月、6月、9月、11月、12月で エラ-がでます。どうしてでしょうか? ちなみに 第一日曜日の数式 =IF(WEEKDAY(DATE($A$5,$A$6,1))=1,1,"") 第一月曜日の数式 =IF(ISNUMBER(E5),E5+1,IF(WEEKDAY(DATE($A$5,$A$6,1))=2,1,"")) 第一火曜日の数式 =IF(ISNUMBER(F5),F5+1,IF(WEEKDAY(DATE($A$5,$A$6,1))=3,1,"")) 第一水曜日の数式 =IF(ISNUMBER(G5),G5+1,IF(WEEKDAY(DATE($A$5,$A$6,1))=4,1,"")) 第一木曜日の数式 =IF(ISNUMBER(H5),H5+1,IF(WEEKDAY(DATE($A$5,$A$6,1))=4,1,"")) 以下省略 表のデザインが若干違いますが、参照したカレンダ-に忠実に 再現したので数式の違いも考えられません。 ただ、本当にマネたので自分では数式が合っているかもわかりません 私自身もよく解っていないので説明も出来ていないかもしれませんが、 よろしくお願いします。 ちなみに皆さんはどこで数式について学ばれるのでしょうか?

  • VBAのCodeModule.Linesの記入方法

    Set Target = ThisWorkbook With Target.VBProject.VBComponents("Module2").CodeModule For i = 1 To .CountOfLines If .Lines(i, 2) = Range("AE77").FormulaArray = _ "=SUMPRODUCT((ISNUMBER(FIND(""1号施設"",R11C19:R72C19)))*1,((IF(ISNUMBER(範囲1),範囲1,0)+IF(ISNUMBER(範囲2),範囲2,0)+IF(ISNUMBER(範囲3),範囲3,0)+IF(ISNUMBER(範囲4),範囲4,0)+IF(ISNUMBER(範囲5),範囲5,0)+IF(ISNUMBER(範囲6),範囲6,0))>=8)*1)" Then .ReplaceLine i, Range("AE77").FormulaR1C1 = _ "=ROUNDDOWN((SUMIF(R11C19:R72C19,""*1号施設*"",範囲1)+SUMIF(R11C19:R72C19,""*1号施設*"",範囲2)+SUMIF(R11C19:R72C19,""*1号施設*"",範囲3)+SUMIF(R11C19:R72C19,""*1号施設*"",範囲4)+SUMIF(R11C19:R72C19,""*1号施設*"",範囲5)+SUMIF(R11C19:R72C19,""*1号施設*"",範囲6))/8,0)" End If Next i End With の If .Lines(i, 2) =     以下の Range("AE77").FormulaArray = _ "=SUMPRODUCT((ISNUMBER(FIND(""1号施設"",R11C19:R72C19)))*1,((IF(ISNUMBER(範囲1),範囲1,0)+IF(ISNUMBER(範囲2),範囲2,0)+IF(ISNUMBER(範囲3),範囲3,0)+IF(ISNUMBER(範囲4),範囲4,0)+IF(ISNUMBER(範囲5),範囲5,0)+IF(ISNUMBER(範囲6),範囲6,0))>=8)*1)"  Then 記入方法が解りません。 605行目からは2行にわたるコードを記載してるのですが、Range("AE77").FormulaArray = 以下>=8)*1)"まで(605行以外にもあるのでForで廻してます) 文字列として””で括るるんだろうなと思ってトライしましたが、””で括る場所が多すぎてどこに付ければいいのやらです。最初と最後を””付けるだけでなく元々("AE77")のようになっている場所には更に””を付けたりするのでしょうか?それも試しましたが、途中の:にも何かしなくてはならないような‥ どなたかご教示願います。

  • マクロ記録実行で実行時エラー'1004'発生

    excel2010 B2セルに文字列が入っています。 文字と数値の混載です。 数値の位置は不定です。 L2のセルで、下記判定をします。 B2セルの文字列(約20文字程度)の左から4番目がドだったら、数値を抽出、ド以外だったら空白。 WEBで計算式があったので、それをそのままマクロの記録としました。 Range("L2").Select ActiveCell.FormulaR1C1 = _ "=IF(RIGHT(LEFT(RC[-10],4),1)=""ド"",MID(RC[-10],1/MAX(INDEX(ISNUMBER(--MID(RC[-10],ROW(INDIRECT(""1:""&LEN(RC[-10]))),1))/ROW(INDIRECT(""1:""&LEN(RC[-10]))),)),MAX(INDEX(ISNUMBER(--MID(RC[-10],ROW(INDIRECT(""1:""&LEN(RC[-10]))),1))*ROW(INDIRECT(""1:""&LEN(RC[-10]))),))-1/MAX(INDEX(ISNUMBER(--MID(RC[-10],ROW(INDIRECT(""1:""&LEN(RC[-10]))),1))/ROW(INDIRECT(""1:""&LEN(R" & _ "),))+1)*1,"""")" Range("L3").Select で記録されます。 上記を、マクロの実行すると実行時エラー'1004' アプリケーション定義またはオブジェクト定義のエラーです。 と表示されます。 何がおかしいのでしょうか? シートで、マクロでなく、L2セルでF2リターンとする分には、数値が表示されます。 下記は、L2の中身です =IF(RIGHT(LEFT(B2,4),1)="ド",MID(B2,1/MAX(INDEX(ISNUMBER(--MID(B2,ROW(INDIRECT("1:"&LEN(B2))),1))/ROW(INDIRECT("1:"&LEN(B2))),)),MAX(INDEX(ISNUMBER(--MID(B2,ROW(INDIRECT("1:"&LEN(B2))),1))*ROW(INDIRECT("1:"&LEN(B2))),))-1/MAX(INDEX(ISNUMBER(--MID(B2,ROW(INDIRECT("1:"&LEN(B2))),1))/ROW(INDIRECT("1:"&LEN(B2))),))+1)*1,"")