• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:IfとNotとLikeとOrを使用するVBA)

VBAでIfとNotとLikeとOrを使用する方法

このQ&Aのポイント
  • VBAを使用して、「みかん」と「りんご」という名前を含まないブックを閉じる方法について質問します。
  • If Not Activeworkbook.Name Like "*みかん*" Or Not Activeworkbook.Name Like "*りんご*" としても、「りんご」と「みかん」を含むブックまで一緒に閉じられてしまいます。
  • If Activeworkbook.Name <> "*みかん*" Or Activeworkbook.Name <> "*りんご*" でもうまく閉じられないようです。一つの条件だけのときは If Not Activeworkbook.Name Like "*みかん*" とするとうまくいくので、Orの時の入力の方法が間違っている可能性があります。

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

  • ベストアンサー
  • asciiz
  • ベストアンサー率70% (6871/9771)
回答No.3

単純な論理ミスかと思います。図を見てください。 「みかん」集合と、「りんご」集合を考えます。 「みかんで無い」とは、黄緑色の部分です。 「りんごで無い」とは、水色の部分です。 ここで、「みかんで無い」or「りんごで無い」とやってしまうと、その色のついた部分を重ね合わせることになります。 そうすると、重なった黄色部分のほか、りんごだけの場合(「みかんが無い」に該当)と、みかんだけの場合(「りんごが無い」に該当)も含んでしまうことになり、色のついた部分すべてを表してしまいます。(抜けるのは中央の白い部分だけ) おそらくやりたかったのは2番目の図ですね? 「みかんで無い」and「りんごで無い」という式を書けば、黄緑と水色の重なった部分のみを指定でき、黄色部分のみとなります。 → If Not Activeworkbook.Name Like "*みかん*" Or Not Activeworkbook.Name Like "*りんご*" Then あるいは考えを反転して、「みかんまたはりんご」という集合を考えます。 橙と赤が重なった、メガネのような領域ができますが、「それ、では無い」ということで反転すれば、やはり黄色部分が残ることになります。 → If Not (Activeworkbook.Name Like "*みかん*" Or Activeworkbook.Name Like "*りんご*") Then どちらで書いても等価ですので、好きな方を使ってください。 また、判定要素が3つ以上に増える場合でも、同様に Not A and Not B and Not C and ~ または Not (A or B or C or ~) としていけば良いわけです。

levitooicompass
質問者

お礼

図まで添付いただいてありがとうございます(^o^)図で見ることで、自分がやっていたのがどういうことだったのかよく分かりました!ベストアンサーに選択させていただきますね!

すると、全ての回答が全文表示されます。

その他の回答 (6)

  • masnoske
  • ベストアンサー率35% (67/190)
回答No.7

演算子には優先順位があります。 Like は Or より優先されます。Not は Or より優先されます。 If Not Activeworkbook.Name Like "*みかん*" Or Not Activeworkbook.Name Like "*りんご*" Then だと(「みかん」でない)または(「りんご」でない)になります。 つまり、「りんご」は「みかん」でないので閉じられます。 同様に、「みかん」は「りんご」でないので閉じられます。 (「みかん」でない)かつ(「りんご」でない)であれば、 If (Not Activeworkbook.Name Like "*みかん*") And (Not Activeworkbook.Name Like "*りんご*") Then となります。

levitooicompass
質問者

お礼

Like,Or、Not,Orにそういった優劣関係があるとは知らなかったです…!教えていただいてありがとうございます(*^_^*)

すると、全ての回答が全文表示されます。
  • masnoske
  • ベストアンサー率35% (67/190)
回答No.6

「りんご」を含んでいたら何もしない、「みかん」を含んでいたら何もしない、それ以外ならブックを閉じる。 Select Case TRUE Case Activeworkbook.Name Like "*みかん*" Case Activeworkbook.Name Like "*りんご*" Case Else Activeworkbook.Save Activeworkbook.Close End Select

levitooicompass
質問者

お礼

Select Caseは使ったことがないです!新たな方法を教えていただいてありがとうございます(^o^)

すると、全ての回答が全文表示されます。
  • chayamati
  • ベストアンサー率41% (260/625)
回答No.5

If (Not Activeworkbook.Name Like "*みかん*" )*( Not Activeworkbook.Name Like "*りんご*") Then Activeworkbook.Save Activeworkbook.Close は試されましたか

levitooicompass
質問者

お礼

カッコでくくるとその記述が優先になるというのは今回初めて知りました!今回の件ではないですが、別のVBAで活用させていただきました、ありがとうございます(^_-)

すると、全ての回答が全文表示されます。
  • asciiz
  • ベストアンサー率70% (6871/9771)
回答No.4

あうぅ1番目の式書き間違えました… 誤)→ If Not Activeworkbook.Name Like "*みかん*" Or Not Activeworkbook.Name Like "*りんご*" Then 正)→ If Not Activeworkbook.Name Like "*みかん*" And Not Activeworkbook.Name Like "*りんご*" Then 説明文と補足ではそう書いてますが(汗

すると、全ての回答が全文表示されます。
  • kkkkkm
  • ベストアンサー率66% (1747/2623)
回答No.2

> 「みかん」と「りんご」という名前を含まない でしたら and ではないでしょうか。 orでしたら リンゴを含まない(みかんは含んでもよい) もしは みかんは含まない(リンゴは含んでもよい) なのでどちらがが片方を許可していることになります。

levitooicompass
質問者

お礼

ありがとうございます!Andでも一度やってだめだったんですが、再度やってみたところ、うまくいきました。一度目は多分なにかが間違っていたんだと思われますm(_ _)m

すると、全ての回答が全文表示されます。
  • Nebusoku3
  • ベストアンサー率38% (1479/3864)
回答No.1

Or の代わりに And では如何でしょうか?

levitooicompass
質問者

お礼

ありがとうございます、Andでも一度試してできなかったのですが、もう一度やってみたらできました!一度目はやり方が悪かったのかもしれません。。。

すると、全ての回答が全文表示されます。

関連するQ&A