• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBAでIFの複数条件がうまく動きません。)

VBAでIF文の複数条件を解決する方法

このQ&Aのポイント
  • VBAで実装したIF文が意図した通りに動作せず、条件を無視して結果を出してしまう問題に悩むユーザーの質問。
  • A列やS列の特定条件を無視して★が付与される不具合について、正しいIF文の構造を模索している。
  • 複数の条件を持つVBAのIF文においてエラー表示がないため、該当箇所の修正が難航している状況を説明している。

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

  • ベストアンサー
  • asciiz
  • ベストアンサー率70% (6849/9743)
回答No.2

修正も何も、1つのIF文は1つの作業しかしません。 6つの作業が必要なら、6つのIF~THEN~ENDIF、が必要になります。 ご質問にあるものは、すべての条件判断を1つのIF文に詰め込んでいますから、すべての条件が成立したときのみに THEN 以下を実行する、というプログラムになってしまっています。 また、AND と OR、NOT には結合の優先度があります。 NOT が一番高い優先順位となり、次にAND、そしてOR が一番弱いです(この3つの中では)。 そうすると、ご質問に書かれた条件式にカッコを付けて結合を明記すると、 If( (Cells(r, "A") >= 10000) And _ (Not Cells(r, "I") Like "*秋田*") ) Or (Not Cells(r, "I") Like "*長野*") Or _ (Not Cells(r, "I") Like "*栃木*") Or ( (Not Cells(r, "I") Like "*本社*") And _ (Not Cells(r, "L") Like "退職") And _ (Not Cells(r, "M") Like "常勤") And _ (Cells(r, "S") Like "" And) _ (Cells(r, "J") Like "*aaa*") ) Or (Cells(r, "J") Like "*bbb*) Or (Cells(r, "J") Like "*ccc*") Or (Cells(r, "J") Like "*ddd*") Then こうなります。 これを OR で改行しなおしてわかりやすくすると、 If( (Cells(r, "A") >= 10000) And (Not Cells(r, "I") Like "*秋田*") ) Or _ (Not Cells(r, "I") Like "*長野*") Or _ (Not Cells(r, "I") Like "*栃木*") Or _ ( (Not Cells(r, "I") Like "*本社*") And _ (Not Cells(r, "L") Like "退職") And _ (Not Cells(r, "M") Like "常勤") And _ (Cells(r, "S") Like "") And _ (Cells(r, "J") Like "*aaa*") ) Or _ (Cells(r, "J") Like "*bbb*) Or _ (Cells(r, "J") Like "*ccc*") Or _ (Cells(r, "J") Like "*ddd*") Then という結合をしていることになります。改行とは無関係に、演算子の強さで結合していますので、1行目から2行目にかかっているカッコと、3行目から7行目までがカッコでまとまっていることに、あなたの考えとの食い違いがあるでしょう。 つまり、あなたの組んだIF文はてんでデタラメなものになってしまっているので、まともに動くはずもないわけです。 ---- ご質問の(1)~(6)は、条件なのですか? 作業なのですか? 作業であるならば、(1)~(6)それぞれで、「IF (条件1) THEN (作業1) END IF」「IF (条件2) THEN (作業2) END IF」…と書いてください。 (1)~(6)が条件であるならば、それぞれの条件をカッコでくくり、ANDで結合して、 IF (条件1) and (条件2) and (条件3) and (条件4) and (条件5) and (条件6) then (作業) end if というように書いてください。

emimaru888
質問者

お礼

IF (条件1) and (条件2) and (条件3) and (条件4) and (条件5) and (条件6) then (作業) end ifをヒントに作成したら無事作れました。 ありがとうございます。助かりました

Powered by GRATICA
emimaru888
質問者

補足

すみません。使ってみましたが同じ結果になりました。使えなかったです。

その他の回答 (1)

  • kkkkkm
  • ベストアンサー率66% (1742/2617)
回答No.1

設定の1項目ごとに条件式を()で囲ってみてください。 If A and B or C Then の場合CがTrueであればAとBが何であっても結果はTrueになると思います。 If A and (B or C) Then だとAがTrueでかつBかCがTrueであれば結果がTrueになると思います。

関連するQ&A