• ベストアンサー

エクセル 戻り値がエラーの時

エクセルの関数について教えて下さい。 SEARCH関数でセルに含まれる文字を検索した時に、検索したい文字が含まれない場合、#VALUE!と表示されます。 このように文字が含まれない場合にエラーが表示されることを逆手に取り、検索したい文字が含まれるのか含まれないのかを判定する文法はありますでしょうか? 例えば、=IF(SERACH("こんにちは",A1)=ERROR,"こんばんわ","こんにちは") このように書くことが出来る方法がありましたら教えて下さい。 出来ればIFERROR関数などを使わずに戻り値のエラーで直接的に分岐させたいです。 教えて下さい、宜しくお願い致します。

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

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

次のようにISERROR関数を使う方法があります。 =IF(ISERROR(SEARCH("こんにちは",A1)),"こんばんわ","こんにちは") またはエラーを起こさないように次のようにする方法もあります。 =IF(SEARCH("こんにちは",A1&"こんにちは")>LEN(A1),"こんばんは","こんにちは")

jyaramanti
質問者

お礼

そのような方法もあるのですね。 エラーも出ませんでした。 他の文字で試してみたところ、符号の向きを変えても結果が変わらず頭が混乱しております。 例えばA1セルに入力されているのが一文字で、検索文字列もその文字にした場合は結果が必ず偽になるようです。 関数の書式内でこのような難しい&の使い方があるのですね。 とても勉強になります。 回答を下さり、ありがとうございました。

その他の回答 (4)

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

>まだあまり良く理解できていないのですが・・・ 今回の例ではA1セルに1文字だけ入力してあることが原因ではなく、検索値が1文字であることに対する配慮の問題です。 A1="ABC" 検索値="C" SEARCH("C",A1&"C") → SEARCH("C","ABCC") → 3 LEN(A1) → 3 ∴ SEARCH("C",A1&"C")>LEN(A1) → FALSE   SEARCH("C",A1&"C")<LEN(A1) → FALSE   SEARCH("C",A1&"C")=LEN(A1) → TRUE つまり、大小の2択で論理式を組み立てるとき">"(より大きい)または"<="(以下)にしないと"="(同じ)が判定から漏れることになります。 >仕様上の問題なのでしょうか? 論理式を組み立てるとき結果に漏れが無いような比較演算式にするよう考えてください。 下記の数式はA1セルに"こんにちは"の文字列が含まれないとき"こんばんは"を返し、その他は"こんにちは”を返すものです。従って、A1セルに"こんにちは"が含まれなくても"こんにちは"を返します。 =IF(SEARCH("こんにちは",A1&"こんにちは")>LEN(A1),"こんばんは","こんにちは")

jyaramanti
質問者

お礼

ようやく理解することが出来ました。 お手数をおかけしてすみませんでした。 とても詳しく回答を下さいましてありがとうございました。

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

>他の文字で試してみたところ、符号の向きを変えても結果が変わらず頭が混乱しております。 A1の値をどのようにされたか提示してください。 例えばA1に"今日は良い天気ですね"と入力したときは次のようになります。 SEARCH("こんにちは",A1&"こんにちは")     ↓ SEARCH("こんにちは","今日は良い天気ですねこんにちは")     ↓    11 LEN(A1) → 10 ∴ SEARCH("こんにちは",A1&"こんにちは")>LEN(A1) → TRUE   SEARCH("こんにちは",A1&"こんにちは")<LEN(A1) → FALSE 論理式の > を < に置き換えて結果が同じになるはずはありません。 論理式の記号を置き換えて、然も、IF関数の分岐を入れ替えれば結果は同じになるでしょう。 >例えばA1セルに入力されているのが一文字で、検索文字列もその文字にした場合は結果が必ず偽になるようです。 前述の論理式を参考にすれば理解できるはずです。 >関数の書式内でこのような難しい&の使い方があるのですね。 &は文字列を連結するための演算子です。 "A"&"B" → "AB" 1つの式に幾つもの&演算子を使って幾つもの文字列を連結することができます。

jyaramanti
質問者

補足

再度の回答を下さいましてありがとうございます。 新しくシートを開いて入力しました。 A1セルに"A"(ダブルクォーテーションは入力していません。)と入力しました。 B1セルに =IF(SEARCH("A",A1&"A")>LEN(A1),"B","C") または =IF(SEARCH("A",A1&"A")<LEN(A1),"B","C") と入力したところ、両方とも"C"と返ってきました。 =IF(SEARCH("A",A1&"A")=LEN(A1),"B","C")とした場合だけ"B"が返ってきました。 まだあまり良く理解できていないのですが・・・ 仕様上の問題なのでしょうか? お手数おかけしまして済みません。

  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.3

=IF(ISERROR(SERACH("こんにちは",A1)),"こんばんわ","こんにちは") または =IF(ISNUMBER(SERACH("こんにちは",A1)),"こんにちは","こんばんわ")

jyaramanti
質問者

お礼

ISERRORやISNUMBERでは結果を論理値で知ることが出来るのですね。 TRUEかFALSEならセル内の記述が読みやすくなり、あとあと楽そうだと思いました。 とても勉強になる回答を下さり、ありがとうございました。

  • skp026
  • ベストアンサー率45% (1011/2238)
回答No.2

こちらは参考になるかもしれないです。 http://okwave.jp/qa/q2169744.html このようなやり方が紹介されています。 =IF(COUNTIF(A1,"*こんにちは*"),"有り","無し")

jyaramanti
質問者

お礼

このような方法もあるのですね。 とても参考になりました。 回答を下さりありがとうございました。

関連するQ&A

  • 戻り値がない時はゼロを表示したい。

    WINXP+ACCESS2000です。 EXCELだと、VLOOKUP関数などで戻り値がない場合、IF関数とISNAや ISERROR関数を使ってN/Aなどを表示させない方法がありますが、ACCESS の場合、DLOOKUP関数で戻り値がなかった時にゼロを表示させるには どの様な方法があるのでしょうか? お分かりになる方がおられましたら、お知恵をおかし下さい。 宜しくお願いします。

  • C言語のisdigit関数を使った問題です。バッファ読み捨てがよく解りません。

    5文字以内の入力文字を数字のみか文字が含まれているかで表示を変えたいです。main関数内では判定結果のみを表示して、文字列への文字の格納にはfgetsとgetcharを使い、副関数の引数はポインタ型のものを使い、判断は副関数内で行いその戻り値でmain関数で表示を分岐させます。副関数でwhileとisdigit関数の組み合わせ方と、戻り値の選択のやり方が解りません。どなたか詳しい方ぜひ教えていただければと思います。

  • IFERROR関数の入力のしかたについて

    IFERROR関数の入力のしかたについてお聞きします。 VLOOKUP関数などで、検索値が未入力のときに表示されるエラーを非表示 にしたいので IFERROR(VLOOKUP(A1~),"")という関数にしたいです。 このとき、IFERRORの入力は手入力(1文字ずつ打つ)で行うしかないのでしょうか。 (まずVLOOKUPの関数を作成してその外側にIFERROR関数を置きたいのですが・・・)

  • javascript関数の戻り値でphpの条件分岐

    こんばんは。 またまたプログラミングで詰まってしまいました・・・。 <?php    echo "<script> funcJS(); </script>"; //javascriptの関数。戻り値true/false    if(funcJS()の戻り値がtrueかどうか){       <~phpの処理~>     } ?> のようなプログラムがあったとして、funcJS()の戻り値の値によって、『phpの処理』を行うかどうかを決定したいのですがそのアルゴリズムが思いつきません。 色々と試行錯誤はやってみて、 (1)phpの変数にfuncJS()の戻り値を格納して、if文で条件分岐  $value = "<script> funcJS(); </script>";   しかし、これは$valueに戻り値を入れることができませんでした。 (2)javascript変数に戻り値を格納して、javascript内のif文で条件分岐 <?php    echo "<script> var value=funcJS(); </script>"; //javascriptの関数。戻り値true/false    echo "<script> if(value == 'true'){ </script>";       <~phpの処理~>    echo "<script> } </script>"; ?>  これも"}"がないと怒られてしまいました。 自分で思いつく限りは試してみたのですが、他に方法が思い浮かばず頭を抱えている状態です。 何か良い方法を知っている方、思いついた方、よろしくお願いします。

  • jQueryの戻り値がうまくいかない・・・

    jQueryでXMLを読み込んでパースした値を戻り値として返す関数を作っているのですが、なぜか動作しません。 すみませんがどこがいけないのか教えていただけないでしょうか? -- JS ---------------------- function getValueXML(){   var value = "初期値";   jQuery.ajax({     url: "/text.xml",     type: 'get',     dataType: 'xml',     timeout: 1000,     success: parse_suc,     error: parse_err   });   function parse_suc(xml){    value = $(xml).find("hoge").text();   }   function parse_err(){    alert("XMLの取得に失敗しました");   }   return value; } -- test.xml --------------------- <?xml version="1.0" encoding="UTF-8"?> <root>   <hoge>テスト</hoge> </root> このgetValueXML関数を実行すると戻り値には"初期値"が返ってきます。 試しにparse_suc関数を以下のようにしてみたら"テスト"がアラート表示されました。 つまりparse_suc関数内ではXMLのパースがうまくいっているようなのです。 function parse_suc(xml){   value = $(xml).find("hoge").text();   alert(value); } しかしparse_suc関数を出るとvalueにはその値が引き継がれません。 valueのスコープがjQueryだとどういう風になっているのかよくわからなく、ずっと悩んでいます。 お手数ですがおわかりの方がいましたらご説明頂ければと思います。

  • 戻り値でも入力規則を生かせる方法はありますか?

    こんにちは。エクセル関数初心者です。 エクセルで関数の戻り値を表示するセルに入力規則が設定されているのですが、それが生かされません。 そのセルに直接その値を入力すればエラーメッセージが出ます。 戻り値でもエラーであれば、メッセージ、あるいは何らかの表示(セルの色が変わるとか・・・)が出るようにはできないものでしょうか? アドバイスをいただけると嬉しいです。 よろしくお願いいたします。

  • vlookup関数のエラー対策について

    いつもお世話になっております。 vlookup関数ですが、現状は検索値や参照先が未入力の場合は空白になるように、 =if( =" ", vlookup( , ,0)&" ")という式(…式1)を使っています。 これは文字列扱いになるらしく参照した金額などを範囲選択しても合計金額が表示されないようです。 一方でiferror関数はエラーがあると空白になるように、 =iferror(vlookup( , ,0)," ")という式(…式2)を入れると数値扱いになる認識ですが、他のエラーは表示されない(?)と把握しています。 ここで質問ですが、自分の希望としては (1)エラー表示したい(空白にしたくない)…検索値が誤っていたり(一致しない)、テーブル範囲の間違い、参照先が見つからないなど(#N/Aや#REF) (2)エラー表示したくない(無視したい)…検索値や参照先が未入力(←式1はクリア) のですが、他にも出る可能性があるエラーはありますか? また式1は上記(1)のエラー表示はされる、式2はされない認識でいいんでしょうか? 上記希望をできるだけ満たした算式があれば教えていただきたく(できれば数値が好ましい)よろしくお願いします。

  • 関数のパラメーターと戻り値について

    VB.NET 関数の定義とパラメータの設定と戻り値について質問です。 初心者です。 以下のような戻り値が複数ある関数を定義したいのですが、IN,OUTがよくわからなくて、困っています。DB検索となにか関係があるのでしょうか? 関数名: Fnc パラメータ:Enpno(Char) /IN パラメータ:EnpCD(Char) /OUT パラメータ:EnpNM(Varchar) /OUT 初期値:Enpno = S123 処理内容:DB接続して、Enpnoが一致する場合、戻り値としてEnpCDとEnpNMを返す。DB検索でしようするは,Enpnoのみ。 ByLefで戻り値を2つ返すというようなコードを見たのですが、OUTのときに使えばよいということなのでようか?とどなたか教えてください。 よろしくお願いします。

  • 戻り値について

    プログラミング初心者です。 よろしくお願いします。 C++を使っています。 早速なのですが、以下にプログラムを記載します。 ◎1---------------------------------------- #include<stdio.h> main() { char ss[256]; gets(ss); puts(ss); } ---------------------------------------- ◎1を実行すると、「型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません」と表示されます。 参考書には、「戻り値のvoidがないと勝手に戻り値の関数をint型と解釈する。関数の宣言と定義が合わないとコンパイル時にエラーとなる」とあったのですが、 ◎2------------------------------------- #include<stdio.h> int main() { char ss[256]; gets(ss); puts(ss); } ------------------------------------- 以上の◎2だと、なぜ実行出来るかよくわかりません。 本当に初心者的な質問ですいませんが、教えていただけると嬉しいです。

  • エクセル 実行時エラー 438

    Sheets("シート1").Column("a").Find(What:="検索文字").Row で 実行時エラー 438 オブジェクトは、このプロパティまたはメソッドをサポートしていません。 が発生する理由は、セルに検索文字がないからですか? それとも文法が間違っているからですか? Sheets("シート1").Column("a").Find(What:="検索文字").Row だとエラーになるのに、 Sheets("シート1").cells.Find(What:="検索文字").Row これだと検索文字が入ってる行番号を返します。 A列には、検索文字が入っているのに、 .Column("a")だとダメで、.cellsだと問題ない理由は何でしょうか? Column(1)にしてもエラーになります。

専門家に質問してみよう