こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

エクセルでANDとORの併用条件の式が分かりません

いつもお世話になっております。
エクセル(2010)の関数で、ANDとORは何とか使えるのですが、今回両方を使いたいので IF関数にANDとORを併用しようとやっているのですが、思うように動きません。

具体的には、例えば A1 セルの値が「50以上 AND 100未満」OR「適合」なら<合格>、そうでなければ<不合格>を別のセル(B1)に表示させたいのです。

出来そうなのですが、能力不足でうまく行かないのでよろしくおねがいいたします。

投稿日時 - 2018-02-13 13:01:37

QNo.9428630

困ってます

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

>実は比較セルはなく、A1セルに数値、もしくは文字が入り、数値の時には不等号で別の2つのセルの値との比較(不等号式)で合否判定、文字の時には合格です。
「文字の時」とはその文字が必ず"適合"なのでしょうか?
それでしたら回答No.4に提示の数式を修正すれば良いでしょう。
=IF(OR(AND(A1>=50,A1<100),[比較セル]="適合"),"<合格>","<不合格>")        ↓
=IF(OR(AND(A1>=50,A1<100),A1="適合"),"<合格>","<不合格>")

>つまり例えば、A1セルに数字が入ってくれば5~10の時が合格、ただし0の時には”特定文字”が表示されるように別シートから参照しており、どちらも合格で、それ以外は不合格。
質問の文言では「50以上 AND 100未満」としていますので矛盾します。
「A1セルの値が5~10のとき合格」であれば「5以上 AND 10以下」です。
「未満」と「以下」では論理式が異なります。
A1<10 が「未満」で A1<=10 が「以下」です。

尚、ExcelのAND関数やOR関数は次のような記述になります。
AND([論理式1],[論理式2],[論理式3],・・・)
OR([論理式A],[論理式B],[論理式C],・・・)
今回の場合はANDとORを1つの論理式に組み込もうとしていますのでANDとORの何方を先に評価するかを考えないと正しい論理式に導けません。
今回の例ではAND関数のカッコ内にOR関数を組み込むことができませんのでOR関数のカッコ内にAND関数を組み込みます。
[論理式1]をA1>=50、[論理式2]をA1<=100、[論理式A]をA1="適合"として1つの論理式に纏めると次のようになります。
OR(AND(A1>=50,A1<=100),A1="適合")
または
OR(A1="適合",AND(A1>=50,A1<=100))
また、論理式の結果を数値化するとTRUE=1、FALSE=0と言う結果になりますので論理式同士を乗算したり加算することでANDやORの代替が可能です。
つまり、(A1>=50)*(A1<=100)はAND(A1>=50,A1<=100)と同じ評価になります。
故に、(A1>=50)*(A1<=100)+(A1="適合")は(AND(A1>=50,A1<=100),A1="適合")と同じ評価になります。
尚、A1セルの値が100を超えることが無いときはAND関数で評価する必要はありません。(A1>=50のみで良い)

投稿日時 - 2018-02-15 08:46:45

補足

何度もご丁寧な解説ありがとうございます。

はい、< と <=の違いは認識しており使い分けています。

>今回の場合はANDとORを1つの論理式に組み込もうとしていますのでANDとORの何方を先に評価するかを考えないと正しい論理式に導けません。

まさにご指摘の通りで、ANDを先にしたり、ORを先にしたりしているうちに「何が何やら」状態に陥ってしまいましたが、解説でスッキリしました。

投稿日時 - 2018-02-15 11:15:48

お礼

*+で書くとコピペでなく自作でもあっさり一発で正解できましたのでこの方法で行こうと思います。

投稿日時 - 2018-02-15 11:16:51

ANo.8

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(8)

ANo.7

此れを、
試して、頂けますか?
=IF((A1>=50)*(A1<100)+(A1="適合"),"合格","不合格")

投稿日時 - 2018-02-14 01:34:57

補足

これならコピぺでなく、自作で一発で正解できましたので、今後はこれで行きます。
尚、複数の方からこの方法を回答いただいており、誠に申し訳ありませんが、2度に渡り詳細に教えて頂いたNo4,No8の方をBSにさせていただきますのでご了承ください。
本当に助かりました。

投稿日時 - 2018-02-15 11:01:30

お礼

AND、ORを使わず*と+で出来てしまうのですね。
これははるか昔数学で習った、A n B u CみたいなAND、ORの式でできるなら私にとってこれは分かりやすい。
ぜひ試してみます。

投稿日時 - 2018-02-14 20:28:09

ANo.6

》 A1 セルの値が「50以上 AND 100未満」OR「適合」
》 なら<合格>、そうでなければ<不合格>
それって奇妙では?
A1 セルの値が「適合」でない場合は、A1 セルの値が「50以上」であっても、100は不合格になるけど、ソレでよろしいのでせうか?!
満点は何点?
「能力不足」というより「表現力不足」?

投稿日時 - 2018-02-13 16:36:48

お礼

ご回答ありがとうございます。
A1セルには数値もしくは”適合”が入ります。
数値の場合は不等号で判定し合否判定、”適合”の場合も合格です。
能力に加え表現力不足ですみません。

投稿日時 - 2018-02-14 20:18:58

ANo.5

> 「50以上 AND 100未満」OR「適合」
と自分で書けているのだから、あとはそれを式で表現するだけ。
ネストは分解して考えてみると少しは解り易くなるかもです。

まず。
「50以上 AND 100未満」が一つ目の条件なのですから、
  AND(A1>=50,A1<100)
までは書けてますか?
書けているなら、コレを「条件1」と置き換えます。
  ※あくまでもイメージですよ。

続いての条件は
「条件1」or「適合(文字列)」ですから、
  OR(条件1,A1="適合")
と書けますね。

ココで「条件1」を元の式に戻してやると
  OR(AND(A1>=50,A1<100),A1="適合")
こうなりますね。
こいつをIF関数に渡してやれば解決。
つまり、
  =IF(OR(AND(A1>=50,A1<100),A1="適合"),"<合格>","<不合格>")
でOKってことですね。



自力で考えた「過程」を示さないと、
「何がどう悪いのか」アドバイスできません。
現状の質問では「答えを教えて」と言っているのと同義ですので
気を付けた方が良いですよ。

投稿日時 - 2018-02-13 16:35:17

補足

確かにご指摘の方法(ネストを分解)で考えながら自作してみたらうまく動きました。

非常に参考になりました。

投稿日時 - 2018-02-15 11:15:31

お礼

なるほど!
説明いただいた思考パターンでできそうな気がします。
AND、OR単独なら問題なくできることは確認済みですが、両方をつなぐとどうもうまくいかず。

 (〇 AND ◎) (OR ×) という順しか思いつかずそのままIF(AND(〇、◎)、OR(×))で失敗するとあとは試行錯誤で()の数も怪しくなってしまって。。。

投稿日時 - 2018-02-14 20:43:01

ANo.4

>具体的には、例えば A1 セルの値が「50以上 AND 100未満」OR「適合」なら<合格>、そうでなければ<不合格>を別のセル(B1)に表示させたいのです。
「適合」とは文字列の"適合"ですよね?、何処のセルに入力されていますか?
不等式では次のようになると思います。
((A1>=50) and (A1<100)) or ([比較セル]="適合") → [B1セルの判定結果]
B1の数式にすると次のようになると思います。
B1=IF(OR(AND(A1>=50,A1<100),[比較セル]="適合"),"<合格>","<不合格>")
[比較セル]が"適合"のときはA1セルの値に関わらず<合格>になって良いのですか?
[比較セル]が"適合"以外のときはA1セルの値が50以上、100未満のときだけ<合格>と判定することになります。それで良いのですか?
数学の問題なので厳密な条件を提示して頂かないと的確な回答になりません。

投稿日時 - 2018-02-13 15:18:22

お礼

いつもお世話になります。
言葉不足で誠に申し訳なく。
それでも当方の質問に的確に回答いただくことに感謝AND感心OR感嘆します。
実は比較セルはなく、A1セルに数値、もしくは文字が入り、数値の時には不等号で別の2つのセルの値との比較(不等号式)で合否判定、文字の時には合格です。

つまり例えば、A1セルに数字が入ってくれば5~10の時が合格、ただし0の時には”特定文字”が表示されるように別シートから参照しており、どちらも合格で、それ以外は不合格。

お手数をおかけしました。

投稿日時 - 2018-02-14 21:05:51

ANo.3

=IF(OR(AND(A1>=50,A1<100),A1="適合"),"<合格>","<不合格>")

こういう書き方もできます、
=IF(((A1>=50)*(A1<100))+(A1="適合"),"<合格>","<不合格>")

投稿日時 - 2018-02-13 14:55:47

補足

下の式でやってみました、出来ました!

これなら一発で正解できましたので、今後はこれで行きます。
複数の方からこの方法を回答いただいており、誠に申し訳ありませんが、2度に渡り詳細に教えて頂いたNo4,No8の方をBSにさせていただきますのでご了承ください。
本当に助かりました。

投稿日時 - 2018-02-15 10:59:36

お礼

ご回答ありがとうございました。
2番目が私には簡単で分かりやすいと思割れるのですが、私に使いこなせるかどうか。

IFの中に、*と+でAND,OR条件を追加できるのですかね?
やってみます。

投稿日時 - 2018-02-14 17:23:49

ユリウス暦から、現在使われてるグレゴリオ暦の定義は

西暦が4で割切れ かつ 100で割り切れない、または 400で割り切れる

と定義します。この時の かつ がANDで、または がORです。

今回の場合
if( or( B1="適合",and(A1 > 50,A1 < 100)),"合格","不合格")
です。

投稿日時 - 2018-02-13 14:26:24

お礼

ご回答ありがとうございました。
正解を見ると理解d背切るのですが、自分で組み合わせるとすんなりいきません。
お手数をおかけしました。

投稿日時 - 2018-02-14 17:18:08

ANo.1

>A1 セルの値が「50以上 AND 100未満」OR「適合」なら<合格>、そうでなければ<不合格>を別のセル(B1)に表示させたい

どんなIF関数を書きましたか?「うまくいかない」だけでは状況が伝わりません。

投稿日時 - 2018-02-13 13:07:23

お礼

早々のご回答ありがとうございました。
仰る通り言葉不足を反省!!

投稿日時 - 2018-02-14 17:19:15