• ベストアンサー

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

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

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

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

>if (cells(gyo,"b")=10 or cells(gyo,"b")=15 or cells(gyo,"b")=40) 40の後の”)”が余計、かつ 最後に、Then がない If Cells(gyo, "B") = 10 Or Cells(gyo, "B") = 15 Or Cells(gyo, "B") = 40 Then    

yamato99
質問者

お礼

ありがとうございます。 できました。感激です。 今後ともよろしくお願いします。

その他の回答 (2)

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.3

IF文にThenが抜けてますね。 If (Cells(gyo, "b") = 10 Or Cells(gyo, "b") = 15 Or Cells(gyo, "b") = 40) Then ですね。 IFの代わりに Select Case Cells(gyo, "b") Case 10, 15, 40 Rows(gyo).Delete End Select でもいいです。

yamato99
質問者

お礼

ありがとうございました select caseもこのように使えるんですね

noname#99913
noname#99913
回答No.1

「または」には「OR」演算子を使います。 値=10 OR 値=15 OR 値=40

yamato99
質問者

補足

回答ありがとうございます。 回答をベースに以下のようにしましたが、条件文がエラーになります。 書き方が悪いんでしょうか? Sub test() Dim gyo As Integer Dim egyo As Integer egyo = Worksheets("sheet1").Range("b" & Rows.Count).End(xlUp).Row For gyo = egyo To 5 Step -1 if (cells(gyo,"b")=10 or cells(gyo,"b")=15 or cells(gyo,"b")=40) Rows(gyo).Delete End If Next End Sub

関連するQ&A

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

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

  • VBAについての質問です。日付を条件に入れて行削除をしたいのですが、うまくいきません。

    VBAの初心者です。よろしくお願いします。日付の条件を入れて行を削除したいと考えていますが、エラーになります。何故でしょうか? コードは以下のようにしています。 よろしくお願いします。 Sub 日付条件で行削除() Dim hiduke As Double Set hiduke = "2009/4/30"   For i = 16 To 12 Step -1 If Cells(i, "a") <= hiduke Then Rows(i).Delete End If Next End Sub

  • VBAで条件式について

    EXEL(VBA)で例えば、A列のデータが入っている行までの中で数値(x)が  x<2 ならばセルに色をぬる。そして空白セルと x>2ならば色をぬらない。 という条件式は、どうしたらいいのですか? Sub InteriorColor() For j= 5 to 21 worksheets(j).activate For i = 1 to 40 '30から40行ぐらい While cells(6+i,6)<>"" If(cells(6+i,6).value<2) Then ’6列7行目から  with selection.interior .Colorindex=45 .patern=xlsorid End with Wend End if Next i Next j End sub ということを連続していない列(5列ぐらい)に対してします。 同じ命令文になる部分もあるので簡潔にしたいという希望もあります。 上部の命令では無限ループの可能性があり実行が止まりません。 どのように記述したらいいのですか? また、同じブックのシート25枚のうち5枚目から21枚目に対して処理します。 5から21までのシートの間で関係ないシートが7枚目と10枚目と15枚目にあります。それを省いての処理もあれば教えてください。

  • VBAで処理フラグの立て方

    こういった条件でやりたいのですがうまくいきません・・・ 処理フラグの立て方は間違っていないと思うのですが・・・ ちょっとセルとかは変えてあります。 もしE3の値が4で割り切れたら8行目を削除し次の処理は行わない もしE3の値が4で割り切れなかったらE4の値が4で割り切れるか処理をする。 割り切れたら18行目を削除 E3とE4の値両方が4で割り切れなかったら8行目を削除し1行あがるので17行目を削除したいです Sub rdlt() If Range("I1").Value = 0 Then Range("I1").Value = 1 '処理は一度きり If Range("E3").Value Mod 4 = 0 Then Rows("8:8").delete '4で割れたとき8行目を削除 Range("J1").Value = 1 '4で割れたときは次の処理用にフラグ End If If Range("J1").Value = 0 Then 'E3が4で割れなかったときは処理する If Range("E4").Value Mod 4 <> 0 Then Rows("18:18").delete Range("J1").Value = 1 End If End If End If End Sub

  • エクセルVBAで条件式について

    例えば、エクセルVBAでif~thenのような条件式で条件に合わなかったら、そのプロシージャ内の処理をすべてキャンセルするか、条件にあわなかったら、それ以降の下段に記述されているプロシージャ内のVBAをキャンセルする方法はありませんか?

  • エクセルVBAについての質問です。

    エクセルVBAについての質問です。 A列のCという商品名が入った列を削除したい場合下記のようにすれば可能かと思いますが、C列のCという商品名が入った列を削除したい場合どのようにすればよいか教えて下さい。 VBAに関してまだ初心者ですがどうぞよろしくお願いします。 行 = 1 Do 行 = 行 + 1 If Cells(行, 1) = "" Then Exit Do End If '行の値がC以外の時は次の行に移る Do If Cells(行, 1) = "C" Then Rows(行 & ":" & 行).Select Selection.Delete Shift:=xlUp Else Exit Do 'ジャンプ先は内側のDo~Loopのすぐ下 End If Loop 'ジャンプ先はここ If Cells(行, 1) = "" Then Exit Do End If Loop End Sub

  • アクセスVBA If式

    早速ですが、質問させて頂きます。 ACCESS VBAで、各ボックスに入力された数字に対し、論理式が立てられており、全項目ボックスに入力をし『チェック』ボタンを押すと基準を超えるものに『再チェックが必要な項目があります』というメッセージを出した上に、それを赤で反転させる、というのを作成中です。 簡単な図で表すと []はボックスだと思ってください 高さ[   ]   横[    ]   縦[    ] 体積[   ]      [チェック]←ボタン 高さが20を超えた場合、要再チェック 横が10以下の場合、要再チェック 縦が5未満又は15を超える場合、要再チェック 体積 高さ*横*縦 が3000以下の場合、要再チェック Private Sub コマンド1_Click() ← チェックボタンをクリック '要チェックか調べます 要チェック = Y If 高さ >= 20 Then Y = Y + 1 End If   If 横 <= 10 Then Y = Y + 1 End If   If 縦 < 5 Then Y = Y + 1 End If If 縦 >= 15 Then Y = Y + 1 End If ~中略 If Y >= 1 Then Msg = MsgBox("要再チェック項目があります。 ", vbOKOnly + vbExclamation, "確認してください") End If If Y = 0 Then Msg = MsgBox("再チェックは必要ありません。 ", vbOKOnly + vbInformation, "確認してください") End If 体積に関しては、式マクロを組んでいます。 以上です。赤に反転させる方法は分かりませんでした・・・。 このように1つずつIf式でやるのは、あまり綺麗じゃないと思いますし、たったこれだけの簡単な式でも、うまく機能してくれません(涙) どうかお助けいただけませんでしょうか。よろしくお願いしたします。

  • if [ 条件式 ]とif[[ 条件式 ]]

    シェルスクリプトでのif [ 条件式 ] と if [[ 条件式 ]] の違いについて教えてください。 以下のシェルスクリプトを実行すると、 意図したとおり、111 と出力されます。 =========▼▼(ここから)▼▼========= #!/bin/sh AAA=yes if [[ "$AAA" = [yY]* ]] then echo 111 else echo 222 fi =========▲▲(ここまで)▲▲========= 上記、スクリプト3行目の if [[ "$AAA" = [yY]* ]] の部分を if [ "$AAA" = [yY]* ] というように、角カッコ 1重にすると、 エラーは発生しませんが、 222と表示されます。 if [ 条件式 ] と if [[ 条件式 ]] の違いについて教えていただけないでしょうか。

  • Excel VBA 条件分岐のスマートな書き方

    すみません。すごく初歩的な質問なのですが、 Excel VBAで以下のような条件分岐をさせたい場合、 もっとスマートな書き方できませんか? 命題 AとBに対して if not A then 処理X end if if not B then 処理Y end if if not(A and B) then 処理Z(この処理の中には処理Xと処理Yの結果が含まれている) end elseifを使った書き方が思い浮かばず、 同じことを何度も書いているようで、もっと上手に書けそうな気がしまして・・・ どなたかご教示頂けたらと思います。

  • 条件式について

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

専門家に質問してみよう