9/02/2022

Excel。OR関数で数値条件に文字列が含まれると、結果が異なるのでどうしたらいい【numerical condition】

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(ゼロ)」というわけではないので、注意が必要です。


今回のように、算出結果がおかしいということも、稀にあるようです。

その場合、どのように対応したらいいのかを考える必要がありますね。