プロが教えるわが家の防犯対策術!

お世話になっております。
Excel2013のVBAでの構文を教えてください。

IF文の否定の複数条件で書いて色々試したのですが、なぜか処理されてしまいます。
例えば、りんごとばななに対して処理したくない時、以下のように書いても処理されてしまいます。
If h.Value <> "りんご" Or h.Value <> "バナナ" Then
Debug.Print h.Address
END IF

他にも
If Not h.Value = "りんご" Or Not h.Value = "バナナ" Then
でもだめです。
個別に
If h.Value <> "りんご" Then
If h.Value <> "バナナ" Then
すると大丈夫でした。

個別でもいいんですが、IF文の否定の複数条件はどのように書けばいいのでしょうか?

A 回答 (4件)

No1の方の通りですが、


if 条件1 or 条件2 then
  成立時の処理
end if
は、条件1が成立するか条件2が成立すれば、成立時の処理が実行されます。
ここで、h.valueがバナナのケースを考えると、
h.value <> "りんご" が成立します。つまり、条件1が成立します。
ゆえに、成立時の処理が実行されます。

一方
if 条件1 and 条件2 then
  成立時の処理
end if
は、両方の条件が成立した場合のみ、成立時の処理が実行されます。

つまり、h.value <> "りんご" でかつ h.value <> "バナナ"
の場合、成立します。(りんごでもバナナでもない場合)

従って、
If h.Value <> "りんご" And h.Value <> "バナナ" Then
成立時の処理
end if
となります。
    • good
    • 3
この回答へのお礼

できました。
構文の間違いにばかり気をとられて、安易に考えて間違えていました。
分かりやすい説明ありがとうございました。

お礼日時:2017/01/23 00:08

初心者がよくやる間違いです。



安易に日本語で考えていると間違います。
日本語で
「りんごでないか、バナナでないか」
って言うと、思い込みもあって、なんとなく正しい気がしてしまいます。


算数や数学でやった「かつ」「または」「ならば」とかを思い出しましょう。
真理値表を書くのも手です。
    • good
    • 1
この回答へのお礼

できました。
構文の間違いにばかり気をとられて、安易に考えて間違えていました。

お礼日時:2017/01/23 00:10

ちょっと変な書き方になりますが、



りんご であり バナナ でもある時  ①
りんご であり バナナ ではない時  ②
りんご ではなく バナナ である時  ③
りんご ではなく バナナ でもない時 ④
の4つが存在します。
例の状態では④だけ選びたいわけですね

Orで判定すると「りんごではない もしくは バナナではない」となるので、
③④ もしくは ②④ となってしまい、②③④が該当してしまいます。

Andで判定すると「りんごではない かつ バナナでもない」となるので、
④だけが選ばれるというわけですね。
    • good
    • 3
この回答へのお礼

できました。
構文の間違いにばかり気をとられて、安易に考えて間違えていました。

お礼日時:2017/01/23 00:07

「If h.Value <> "りんご" Or h.Value <> "バナナ" Then」は「Or」ではなく「And」を使ってください。


もう一度「And」と「Or」の意味を考えれば判ると思います。
    • good
    • 1
この回答へのお礼

できました。
構文の間違いにばかり気をとられて、安易に考えて間違えていました。

お礼日時:2017/01/23 00:07

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A