Excel。OR関数で数値条件に文字列が含まれると、結果が異なるのでどうしたらいい
<IF+OR+ ISNUMBER関数>
次の表をご覧ください。
E列には、OR関数をつかった数式が設定されています。
E2の数式、
=IF(OR(B2>70,C2>70),"○","")
をオートフィルで数式をコピーしていますが、結果を見ると、E3やE5の結果がおかしいことがわかります。
ちなみに、D2には、AND関数をつかった、数式を設定しています。
=IF(AND(B2>70,C2>70),"○","")
AND関数は、問題なく算出できていることがわかります。
ですが、OR関数は、算出できないようです。
なぜこのようなことが起こるのかというと、原因は、数値を対象にした条件なのに、その対象範囲内に、文字型データや空白があると、ダメということです。
データベースの考え方からすれば、当然というか、数値型の列に文字型のデータが入力されていることが問題な訳です。
しかしながら、Excelの帳票ではよくあるケースです。
そこで、どのようにしたらいいのかというと、データが数値型なのかを判断させてあげればいいわけです。
数値型でなければ、対応しないようにすればいいわけです。
E2の数式を次のようにアレンジしました。
=IF(OR(IF(ISNUMBER(B2),B2,0)>70,IF(ISNUMBER(C2),C2,0)>70),"○","")
オートフィルで数式をコピーした結果を見てみましょう。
算出結果は、うまくいっています。
ただし、数式が複雑になってしまいましたので、確認しておきましょう。
たぶん馴染みのない関数が使われています。
「ISNUMBER関数」は数値なのかどうかを判断するための関数です。
数値じゃないから、ちゃんと算出してくれないので、数値じゃなければ「0(ゼロ)」にするようにIF関数と組み合わせてつかっています。
それが、この引数の部分です。
IF(ISNUMBER(B2),B2,0)
数値ならば、そのまま。そうでなければ、「0(ゼロ)」とする処理をしています。
本来、「0(ゼロ)」と空白は意味が違うわけですが、空白にしてしまうと、うまくいきません。
条件が合致しないようにするため、「0(ゼロ)」にしています。
条件によっては「0(ゼロ)」というわけではないので、注意が必要です。
今回のように、算出結果がおかしいということも、稀にあるようです。
その場合、どのように対応したらいいのかを考える必要がありますね。