• ベストアンサー

IFとANDの組み合わせ

VBAで、条件を2つとも満たす場合について、 という式を作りたいと思っています。 ElseIf Cells(gyou + 1, 5).Value = 0 And Cells(gyou, 5).Value = 0 Then という式を作ったのですが、どこか誤りがありますか。 もし、上下のセルが「0」の場合・・・という式のつもりでしたが 機能しない、ということもありますし、そもそも、AND関数はエクセルの関数のためこのような使い方をしていいものか定かではありません。

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

  • ベストアンサー
  • HohoPapa
  • ベストアンサー率65% (454/692)
回答No.3

ElseIf Cells(gyou + 1, 5).Value = 0 And Cells(gyou, 5).Value = 0 Then このコードは、文法的に間違いはありませんし、  Cells(gyou + 1, 5).Value = 0  Cells(gyou, 5).Value = 0 この双方の条件を満たした場合に使うコードです。 しかし、 このコードが必ず実行されるという保証はありません。 とりわけ、 ElseIf とありますので、このコードよりも前の IF文や、ElseIf文に該当してしまえば、 問題のコード部分は実行されません。 つまり、 >機能しない、ということもありますし という可能性があるということです。 まずは、 IF文全体を再確認するか、 IF文全体をポストし、識者の方にみてもらったほうがいいと思います。

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

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

・VBAの質問であることを表題に明記せよ。 ・ElseIf Cells(gyou + 1, 5).Value = 0 And Cells(gyou, 5).Value = 0 Then について、質問社の例題に即して、やりたいとを、文章で説明せよ ・Googeで「vba and 演算子」で照会したら仕舞では。 ーー 意味がよく判らんが、参考に。 例データ B1:C5 10 該当 18 9 該当 16 25 ーー 標準モジュールに Sub test01() For i = 1 To 5 x = Cells(i, "B").Value y = Cells(i + 1, "B").Value If y > 10 And y < 20 Then Cells(i, "C").Value = "該当" End If Next i End Sub で実行。 なんてどうだろう。結果は上記C列の通り。

全文を見る
すると、全ての回答が全文表示されます。
  • MT765
  • ベストアンサー率57% (1930/3383)
回答No.1

ElseIfではなくて普通にIf文でOKです。 If Cells(gyou + 1, 5).Value = 0 And Cells(gyou, 5).Value = 0 Then 処理 あとは上下のセルという事なので二つ目の条件式はgyou-1ではないでしょうか。

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

関連するQ&A

  • If~ThenステートメントとAnd演算子

    windows7、エクセル2013です。 セルに式が入っていてその計算された値が、 計算ERRを起こしている場合(#DIV/0!とか#VALUE!)、空白の場合、0の場合 は処理をしないで それ以外の場合は処理をするようにしたいのですが 以下の構文ではerrになります。 どこが悪いのでしょうか? よろしくお願いします。 If IsError(Cells(x, 20)) And (Cells(x, 20)) = 0 And (Cells(x, 20)) = "" Then Else y = Cells(x, 20) * Cells(x, 23) End If

  • IFステートメントの条件式が間違っているのでしょうか?

    エクセルVBA初心者です。下記の式を作りましたが、計算した結果が正しい答えになりません。構文エラーが出ないので構文は間違ってはいないと思うのですが、答えが違うので参っています。どなたか何が間違っているのかおしえて下さい。よろしくお願いします。 Cells(6, "E") にある数字時を入れた時の答えをCells(6, "G") に求めるものです。 Sub 計算() Dim my As Long If Cells(6, "E") <= 90 Then my = 50000 * Cells(6, "E") / 30 Cells(6, "G") = my ElseIf 90 < Cells(6, "E") <= 120 Then my = 50000 + 40000 * (Cells(6, "E") - 90) / 30 Cells(6, "G") = my ElseIf 120 < Cells(6, "E") <= 150 Then my = 90000 + 30000 * (Cells(6, "E") - 120) / 30 Cells(6, "G") = my ElseIf 150 < Cells(6, "E") <= 180 Then my = 120000 + 20000 * (Cells(6, "E") -150) / 30 Cells(6, "G") = my ElseIf 180 < Cells(6, "E") <= 210 Then my = 140000 + 10000 * (Cells(6, "E") -180) / 30 Cells(6, "G") = my End If End Sub

  • Excel VBAについて

    早速ですがExcelVBAについて質問です。 年齢がN列にあるとき、M列に年代を入れたいと思います。(例:19才なら10代、30才なら30代) 以下のように作成しましたが、すべてに20と入ったり正常に動作しないときがあります。 Excelは2003で作成していますが、いずれ2007でも使いたいです。 もっと正確に実行できるコードを教えてください。 ワークシート関数での解決は望んでいません。データ数も多く他の作業もマクロで処理するのでマクロを希望しています。よろしくお願いします。 -------------------------- Sub ByAge() Range("N1").Value = "年代別" Dim i As Long, N As Integer For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row If Cells(i, 13).Value >= 60 And Cells(i, 13).Value < 70 Then Cells(i, 14).Value = 60 ElseIf Cells(i, 13).Value >= 50 And Cells(i, 13).Value < 60 Then Cells(i, 14).Value = 50 ElseIf Cells(i, 13).Value >= 50 And Cells(i, 13).Value < 60 Then Cells(i, 14).Value = 40 ElseIf Cells(i, 13).Value >= 30 And Cells(i, 13).Value < 40 Then Cells(i, 14).Value = 30 ElseIf Cells(i, 13).Value >= 20 And Cells(i, 13).Value < 30 Then Cells(i, 14).Value = 20 End If Next i MsgBox "完了!" End Sub --------------------------

  • すっきりしたソースを書くには

    エクセルVBA初心者です。 セルAの4行目から27行目までの範囲でセルDとFとGの値を消すというソースを作りたいのですが、以下のようなソースを何十個もつくるのは大変なので、もっとすっきりとした書き方はありますか? ご指導のほどお願いします。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Cells(4, 1).Value = "" And Cells(4, 4).Value <> "" Then Cells(4, 4).Value = "" End If If Cells(4, 1).Value = "" And Cells(4, 6).Value <> "" Then Cells(4, 6).Value = "" End If If Cells(4, 1).Value = "" And Cells(4, 7).Value <> "" Then Cells(4, 7).Value = "" End If End Sub

  • If構文のOr,Andを二度書きしないには?

    どのOrにも共通する長い条件を一度の記述で済ますにはどうするのでしょうか? もし日付が20日でC3セルが「1」でK3セルが「0」の場合で、かつ  H3セルが800以上  E3セルが5000以下  F3セルが10000以下 のどれかに該当すればメッセージを表示せよというマクロです。       If Day(Date) = 20 And Worksheets(1).Cells(3, 3) = 1 And Cells(3, 11) = 0 And Cells(3, 8) > 800 _ Or ~ And Cells(3, 5) < 5000 _ Or ~ And Cells(3, 6) < 10000 _ Then MsgBox "○○" 単純な記述で”~”にDay ~ =0 の部分を3行とも繰り返し書くと、とても見づらいです。 これを一度の記述で済ますには、どう書くのでしょうか。

  • セル値

    すみません エクセルVBA勉強中のものですが、セルA1とA2がブランクだったら、セルB1に”あ”を表示するという式を作ったのですがうまく動いてくれません ご指導のほどお願いします。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Cells(1, 1).Value <> "" & Cells(2, 1).Value <> "" Then Cells(1, 2).Value = "あ" End If End Sub

  • excelのand関数、IF関数について

    エクセルのand関数、IF関数について質問です。 非常に簡単なことで申し訳ないのですが、仮にセルA2が5でかつセルB2が0の時にtrueとしたいときの関数は=and(A2=5,B2=0)であっているでしょうか。また、これをIFの関数で表す場合、=IF(A2=5,IF(B2=0,1,0),0)で同じ意味になるでしょうか?(IFの方は条件を満たす場合を1、満たしていない場合を0としたつもりです) ANDの方の関数は、多分合っていると思うのですが…。エクセルに入力しても、正しい結果が得られなかったので、質問させていただきました。初心者です。つまらない質問で申し訳ないのですが、よろしくお願いします。 

  • VBAでIF文を作成したが、もう少しまとめたい。

    以下のようなVBAを作成しました。 動作に問題はないのですが、 もっと簡単にまとめることができる気がしますが、うまくできません。 何かやりかたはあるのでしょうか。 宜しくお願い致します。 If Cells(5, 1).Value = Cells(1, 1).Value Then Cells(100, 100).Select ActiveCell.FormulaR1C1 = Cells(5, 1) End If If Cells(6, 1).Value = Cells(1, 1).Value Then Cells(100, 100).Select ActiveCell.FormulaR1C1 = Cells(6, 1) End If If Cells(7, 1).Value = Cells(1, 1).Value Then Cells(100, 100).Select ActiveCell.FormulaR1C1 = Cells(7, 1) End If If Cells(8, 1).Value = Cells(1, 1).Value Then Cells(100, 100).Select ActiveCell.FormulaR1C1 = Cells(8, 1) End If If Cells(9, 1).Value = Cells(1, 1).Value Then Cells(100, 100).Select ActiveCell.FormulaR1C1 = Cells(9, 1) End If If Cells(10, 1).Value = Cells(1, 1).Value Then Cells(100, 100).Select ActiveCell.FormulaR1C1 = Cells(10, 1) End If

  • IF関数で違う値もTRUEになる

    0502501G1、502500の二つの値を、=exact(A1,B1)で比べた結果がなぜかTrueになります。 関数が入ったセルをF2で開き、変更をせずにEnterを押すとFalseになります。 この現象について、3つ質問があります。 1.マクロでの比較でも方法によっては同じ現象がおきるでしょうか? 例えば if cells(1,1).value= cells(1,2).value thenや、 A1 = cells(1,1).value B1 = cells(1,2).value IF A1= B1 then など、比較方法は色々有ると思います。 2.このバグを直す方法ありますか? 3.このバグの原因はなんでしょうか? 非常に困っていますし、もし同一の原因でマクロなどでも似たような現象、あるいは全く異なるバグがおきるかもしれないと考えたら、ひじょうに不安です。

  • EXCEL VBA 比較方法

    こんばんは。 EXCEL VBAで、SUM関数で時間の合計を求めたセル(B15)と8:00 を比較して、8:00より大きければメッセージを表示するとしたいのですが、上手くいきません。また、メッセージ後「はい」の場合は、そのままElseの作業を続行。「いいえ」を押した場合は、セル(b2)を選択し、VBA画面が出てくるのを避けたいのです。 勉強途中でいろいろとお聞きし申し訳ありませんがよろしくお願い致します。 IF ~Then ~~~~ ElseIf Range("B15").Value > "8:00" Then MsgBox "8時間を越えています。" Else Range(Range("b65536").End(xlUp).Offset(0), "c22").Copy

専門家に質問してみよう