• ベストアンサー

条件式について

If Range("A3") Or Range("A4") > 1 Then Range("C3") = Range("C3") +1 End if Range("A3") かRange("A4") に1以上の値が入っていれば Range("C3")に集計させたいのですが、ちゃんとした値が反映されません。 式として何か間違っていますでしょうか?

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

  • ベストアンサー
  • myRange
  • ベストアンサー率71% (339/472)
回答No.4

またまた登場、myRangeです。 回答は出てますが、一言。 >正確には >IF Range("A1") <>"A" And _ >Range("A2") ="H" And _ >●●If Range("A3")>=1 Or Range("A4") >= 1 Then >Range("C3") = Range("C3") +1 >End if >となります。 いくらなんでもこれはないでしょう。 これは計算結果が正しいかどうか以前の問題で構文エラーで動作しません。 構文エラーが出てないとすると●●の行のIFはないはずです。 質問するときはアップする前に何度も確認するようにしましょう。(^^;;; で、本題。 質問のようにAND,ORのような正反対にあるものをひとつのIFで連結すると 正しいかどうかの検証がややこしいものになりますので、 論理式に慣れてないうちはAND,ORは分けることをお勧めします。 既出の回答にもあるように、 If Range("A1").Value <> "A" And Range("A2").Value = "H" Then   If Range("A3").Value >= 1 Or Range("A4").Value >= 1 Then     Range("C3").Value = Range("C3").Value + 1   End If End If このようにするということです。 これだと質問者にも理解しやすいのではないでしょうか。 ●注意事項● 質問はアップする前に何度も確認すること。 質問内容は小出しにしないこと。。(^^;;; 以上です。    

maki06
質問者

お礼

myRangeさん、補足ですが勘違いでした! ありがとうございました! 実行できました!

maki06
質問者

補足

myRangeさん 度々ありがとうございます。 確かに●●のところのAnd _ は間違えでした。 紛らわしくて申し訳ないです。 小出しにした方が解りやすいかなと思ったのですが。。 返ってご迷惑をかけてしまってごめんなさい! If Range("A1").Value <> "A" And Range("A2").Value = "H" Then   If Range("A3").Value >= 1 Or Range("A4").Value >= 1 Then     Range("C3").Value = Range("C3").Value + 1   End If End If で集計しているんですけど。。どうしても1件多くカウントされてしまいます。 確認するとIf Range("A1").Value <> "A" の部分がなぜか実行されてないようです。 If Range("A1").Value <> "A" の部分を"B"に変更してみましたが 結果が同じになります。 AとBのデータ件数はもちろん違います。。 データにおいては特に問題はありません。。 何かアドバイスありましたらお願いします。

その他の回答 (3)

回答No.3

'IF Range("A1") <>"A" And _ 'Range("A2") ="H" And _ 'If Range("A3")>=1 Or Range("A4") >= 1 Then 'Range("C3") = Range("C3") +1 'End if 間違っています。 正しくは、 If Range("A1") <> "A" And _ Range("A2") = "H" And _ (Range("A3") >= 1 Or Range("A4") >= 1) Then Range("C3") = Range("C3") + 1 End If 又は、 If Range("A1") <> "A" And _ Range("A2") = "H" Then If Range("A3") >= 1 Or Range("A4") >= 1 Then Range("C3") = Range("C3") + 1 End If End If 私は、後者の方が見やすくて良いて思います。

  • myRange
  • ベストアンサー率71% (339/472)
回答No.2

Or演算子と比較演算子の使い方にミスがあります。  1以上は、">=1" です。 If Range("A3") >= 1 Or Range("A4") >= 1 Then   Range("C3") = Range("C3") +1 End if 上記でもいいのですが、値を参照するValueプロパティを明示した方がベターです。 なぜ? それはVBAに慣れてきたら追々理解できるようになるでしょう。 If Range("A3").Value >= 1 Or Range("A4").Value >= 1 Then  Range("C3").Value = Range("C3").Value + 1 End If 以上です。

maki06
質問者

補足

ご回答ありがとうございます。 仰るとおり演算子の使い方に間違いがあったのですが、 それでも集計が合わず現在確認しています。 実は抽出条件として If Range("A3") >=1 Or Range("A4") >= 1 Then Range("C3") = Range("C3") +1 End if 以前に IF Range("A1") <>"A" And _ Range("A2") ="H" And _ が存在しています。 Range("A1")にA以外でRange("A2")にHが存在していれば If Range("A3")>=1 Or Range("A4") >= 1 Then Range("C3") = Range("C3") +1 End if を実行させようとしています。 正確には IF Range("A1") <>"A" And _ Range("A2") ="H" And _ If Range("A3")>=1 Or Range("A4") >= 1 Then Range("C3") = Range("C3") +1 End if となります。 IF Range("A1") <>"A" And _ Range("A2") ="H" And _ の書き方ですが何かおかしいでしょうか? 初めの質問から脱線して申し訳ありませんが何かご指摘頂けたら 幸いです。

回答No.1

If (Range("A3").Value > 1) Or (Range("A4").Value > 1) Then Range("C3").Value = Range("C3").Value + 1 End If

関連するQ&A