• ベストアンサー

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

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

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

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

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

jyaramanti
質問者

お礼

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

その他の回答 (4)

  • bunjii
  • ベストアンサー率43% (3589/8249)
回答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/8249)
回答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% (7417/18945)
回答No.3

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

jyaramanti
質問者

お礼

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

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

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

jyaramanti
質問者

お礼

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

関連するQ&A

専門家に質問してみよう