- ベストアンサー
条件式について
If Range("A3") Or Range("A4") > 1 Then Range("C3") = Range("C3") +1 End if Range("A3") かRange("A4") に1以上の値が入っていれば Range("C3")に集計させたいのですが、ちゃんとした値が反映されません。 式として何か間違っていますでしょうか?
- みんなの回答 (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 このようにするということです。 これだと質問者にも理解しやすいのではないでしょうか。 ●注意事項● 質問はアップする前に何度も確認すること。 質問内容は小出しにしないこと。。(^^;;; 以上です。
その他の回答 (3)
- chibita_papa
- ベストアンサー率60% (127/209)
'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)
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 以上です。
補足
ご回答ありがとうございます。 仰るとおり演算子の使い方に間違いがあったのですが、 それでも集計が合わず現在確認しています。 実は抽出条件として 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 _ の書き方ですが何かおかしいでしょうか? 初めの質問から脱線して申し訳ありませんが何かご指摘頂けたら 幸いです。
- himajin100000
- ベストアンサー率54% (1660/3060)
If (Range("A3").Value > 1) Or (Range("A4").Value > 1) Then Range("C3").Value = Range("C3").Value + 1 End If
お礼
myRangeさん、補足ですが勘違いでした! ありがとうございました! 実行できました!
補足
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のデータ件数はもちろん違います。。 データにおいては特に問題はありません。。 何かアドバイスありましたらお願いします。