• ベストアンサー

条件式について

chibita_papaの回答

回答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 私は、後者の方が見やすくて良いて思います。

関連するQ&A

  • 二つの条件式を一つにまとめようとしてます。

    二つの条件式を一つにまとめようとしてます。 マクロを勉強しております。以前も質問させて頂いて、やりたい事は解決出来たのですが、更に別の事をしようと思いつまずきました。 A列の17行目まで数値が記入してあり、その順位をB列に記入するマクロを作りました。ここまでは何とか教えて頂いて出来たのですが。 さらに背景色が付いているセルを空欄にしてから順位を出そうとしました。それで、自分なりに記入して出来たのですが、この二つを一つにまとめようとしたらうまくいきません。Select case ~などを使用してみたのですが、よく分からなくなりました。どのようにしたらよいかだれか教えてください。 Sub Macro2() Dim r As Range Range("A1:A17").Select For Each r In Selection If r.Interior.ColorIndex <> xlNone Then r.Value = "" End If Next r End Sub Sub Macro1() Dim r As Range, a As Range Range("A1:A17").Select For Each r In Selection If r.Value <> "" Then r.Offset(, 1).Value = Application.WorksheetFunction.Rank(r, Selection, 1) End If Next r End Sub あと、Select しない書き方も研究してください。と指摘、頂いたのですがまだ未解決なので、そこはそのままになっております。

  • Excel VBA IF文がうまく動作しないわけがわかりません…

    未熟な私ですが… セルC2の文字列の6・7桁目に入っている文字により、8桁目の文字を 置き換えるものをつくりました。 例えば、セルのC2に、IRCD-311234 という値があれば IRCD-31A234 にしなさいというものです しかし、 ElseIf の条件式にあてはまるものがでてきても、 すべて最初のIFの条件式にしてしまい、Elseifに反応してくれません。 ****************************************************** Sub 変換() Dim DAT As Range Dim CAR As String If Mid(Range("C2").Value, 6, 2) = 31 Or 32 Or 33 Then For Each DAT In Range("A1:P40")     CAR = CStr(DAT) If Left(CAR, 5) = "IRCD-" Then    CAR = Left(CAR, 7) & "A" & Right(CAR, Len(CAR) - 8)  DAT.Value = CAR End If Next ElseIf Mid(Range("C2").Value, 6, 2) = 37 Or 38 Or 39 Then For Each DAT In Range("A1:P40") CAR = CStr(DAT) If Left(CAR, 5) = "IRCD-" Then CAR = Left(CAR, 7) & "B" & Right(CAR, Len(CAR) - 8) DAT.Value = CAR End If Next  End If  End Sub ****************************************************** 本やネットを見ているのですが、何が悪いのか私にはわかりません…。 どうかご指導をお願いいたします。

  • VBAで条件式がうまく作れず困っています

    VBAで条件式を作りたいのですが、うまくできません。超初心者ですので、分かる方教えてください。 ある項目をみて、値が10、15、40のときその行を削除するというものです。その項目にはいろいろな値が入っています。 構造的には、 if(値が10または15または40) then   行削除 end if となるのでしょうが、カッコの中の書き方を教えてください。 よろしくお願いします。

  • マクロif文での条件式について

    マクロ初心者です。Excel2003を使用しています。 仕事上で使用しているエクセル表より、ある値以上の項目を抽出し、その値を用いて計算結果を出すためのマクロを作成いたしました。いろいろなサイトを参考にして自分なりに書いてみたのですが、どうしてもうまくいきません。 表は簡単なもので、以下のようなものです。 1 9 2 24 3 45 4 67 1列目は使用濃度、2列目は測定値です。この測定値が30より大になった項目を抽出し、計算式にその値を代入し計算結果として出したいのです。また、全ての測定値が30以下だった場合は、計算結果の欄に”<30”とのように表示をさせたいと考えています。 以下のようにマクロを書いてみました。 Sub Macro1() For i = 1 to 4 if Worksheets("sheet1").cells(i , 2).value <=30 then Range("A5")=0 '測定値が=<30だった場合は計算をしないので、フラグとして値を入力 Elseif Worksheets("sheet1").cells(i , 2).value > 30 then Range("A5")=Cells(i , 1) Range("B5")=Cells(i , 2) Exit for Endif if Worksheets("sheet1").Range("A5").value > 0 then Range("A6").Formula ="=(50-B5) / A5" Elseif Worksheets("sheet1").Range("A5").value = 0 then Range("A6") ="<30" Else Endif Next i End Sub >30だった項目の抽出まではできたのですが、計算値をだすところがどうしてもうまくいかず、A6セルにはどんな値でも”<30”と入力されてしまいます。 マクロの基本的なルールなどがまだまだ未熟なので、基本的な構文も書けていないと思います。 全然方向性が違うかもしれないので、そういった点も含めてご教示いただけたら幸いです。 分かりにくいかもしれませんが、どうぞよろしくお願いいたします。

  • Excel2002VBAを使っての集計方法(集計条件が多い場合)

    Excel2002を使用しています。 “コード”を Sheet1のセルA1 として 下記の様なリストがあります。 コード 対象区分 件数 201     1    1 102     5    5 503     4    2 201     2    2 108     2    3 108     8    4 324     9    5 このリスト使って件数を集計するのですが、 集計条件が下記の条件です。  集計条件   コード 201 503   対象区分 1 4 7 8 9 この条件を満たす件数の合計3をExcelVBAを使って Sheet2のセルA1に入力したいのですが、効率の良い 書き方が思い付きません。 現在の私の知識では、以前こちらでご教授頂いた 下記の方法 Dim x As Range Dim sum sum = 0 For Each x In Sheets(1).Range("A:A") If x.Value = 201 _ And (x.Offset(0, 1).Value = 1 Or _ x.Offset(0, 1).Value = 4 Or x.Offset(0, 1).Value = 7 Or _ x.Offset(0, 1).Value = 8 Or x.Offset(0, 1).Value = 9) Then sum = sum + x.Offset(0, 2).Value End If If x.Value = 503 _ And (x.Offset(0, 1).Value = 1 Or _ x.Offset(0, 1).Value = 4 Or x.Offset(0, 1).Value = 7 Or _ x.Offset(0, 1).Value = 8 Or x.Offset(0, 1).Value = 9) Then sum = sum + x.Offset(0, 2).Value End If Next Sheets(2).Range("A1").Value = sum End Sub しか分からないのですが、以前よりも仕事で扱う コード数が増えてしまい、実際は集計条件のコード が100ぐらいあり、  If x.Value = 集計条件のコード   ・・中略・・  End If を100近く書いて処理するのは、効率の面、速度の面からきびしくなってしまいました。 定数等を使ってやってみたものの上手くいかず煮詰まっています。 何とぞご教授よろしくお願いします。

  • 条件判定について

    下記のようなコードを作成しましたが、チェックボックスがオンでもオフでもTextBox4.Valueの値が返ります。どこがいけないでしょうか。 Private Sub CommandButton2_Click() If CheckBox1.Visible = True Then Worksheets("sheet1").Range("a1") = TextBox4.Value Else Worksheets("sheet1").Range("a1") = TextBox3.Value End If End Sub

  • 【ExcelVBA】IF条件を満たしているのに、IF条件のところで止まってしまう

    Sub test1() 変数1 = IsEmpty(Range("C1")) If Range("A1") > 0 And Range("B1") = 0 And 変数1 = True Then   test2 End If End Sub 止まったときのデバッグでの表示は Range("A1")は「100」(セルの中身) Range("B1")は「0」(セルの中身) 変数1はRange("C1")がエラー表示なので「True」 すべての条件を満たしているのですが、 IF条件のところで止まってしまいます。 (IF条件のところの1行が黄色くハイライトになっている状態) 止まったデバッグの後に、F5を押して実行させると、 IF条件の続きから実行されて、test2が実行されて処理が終了します。 何で、IF文のところで一度止まってしまうのかわかりません。

  • マクロが動きません

    以下のようなプログラムでC3の値が変わるたびにA10の値に1を加えていきG3,H3が両方0になったらA10の値も0にする。C5の値が変わるたびにA15の値に1を加えJ3,K3が共に0になったらC5も0にするようにしました。 しかし、動作しません。 このシートの3行目は=シート名!セル番号 という形でほかのシートのセルの値が表示されるようになっています。G3、H3、J3、K3に手動で数値を入力した場合 は動作します。 ほかのシートのセルの値を表示させたセルの値が変化しても動作させる方法はないでしょうか> Private Sub worksheet_change(ByVal target As Range) With target If .Count > 1 Then Exit Sub If IsNumeric(.Value) = False Then Exit Sub If IsEmpty(.Value) = True Then Exit Sub If Not .Row = 3 Then Exit Sub Select Case .Column Case 3 Range("A10").Value = Range("A10").Value + 1 Case 5 Range("A15").Value = Range("A15").Value + 1 End Select End With If Range("g3").Value = 0 And Rang("h3").Value = 0 Then Range("A10").Value = 0 If Range("j3").Value = 0 And Rang("k3").Value = 0 Then Range("A15").Value = 0 End Sub

  • ExcelVBA 二つのセルに入力された時の判定

    セルA1とA2両方に値が入力された時、セルA3に文字を入力するマクロを作りたいです。 下記プログラムで試しているのですが、ステップインで見ると最初のIFでTrue判定されてしまいます。 どうすればこの条件を満たすマクロになるのか、教えて頂けないでしょうか。 以上、宜しくお願い致します。 Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("A1")) Is Nothing Or Intersect(Target, Range("A2")) Is Nothing Then Exit Sub Else If Range("A1").Value <> "" And Range("A2").Value <> "" Then Range("A3").Value = "入力済み" End If End If End Sub

  • 【VBA】改行されたセルの条件

    VBAにてA1のセルが画像のように改行されたセルであっても条件式で処理を行うようにしたいのですがうまくできません。 ↓式のように作成はしてみました どうしたら改行されたセルでも処理が行えるのでしょうか? Sub test() If Range("A1") = (行1行2の場合) Then 処理 End If End Sub