• ベストアンサー

【Excel VBA】複数の条件を満たすデータを行削除

Excel2003を使用しています。 ある表の中のデータで、次の4つの条件を満たすデータを行削除したいのですが、マクロではどのように書いたらいいのでしょうか?  E列…データが入力されている  F列…空白  G列…空白  H列…空白 よろしくお願いします。

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

  • ベストアンサー
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.1

例えばこんなマクロでしょうか 「空白」の意味が「何も入っていない空白」と「関数によってNullを格納した空白」の両方の可能性があるため、COUNTA関数の使用はやめました。 最終行を判定する列をA列としていますが、変更するなら2行目を書き換えてください Sub Macro1() Const col As String = "A" '最終行を判定する列 Dim idx As Long  Application.ScreenUpdating = False  With ActiveSheet   For idx = .Cells(65536, col).End(xlUp).Row To 1 Step -1    If .Cells(idx, "E").Value <> "" And .Cells(idx, "F").Value = "" And _       .Cells(idx, "G").Value = "" And .Cells(idx, "H").Value = "" Then     .Cells(idx, col).EntireRow.Delete    End If   Next idx  End With  Application.ScreenUpdating = True End Sub

rx-z5815
質問者

お礼

おはようございます。 いつも回答ありがとうございます。 早速、教えていただいた方法で試してみたのですが、マクロを実行すると、『オーバーフローしました』というメッセージが出てきます。ヘルプ等を参考にして、変更してみたりもしたのですが、うまくいきません。 お手数ですが、どこを変更すればいいのか、教えていただけると助かります。 よろしくお願いします。

その他の回答 (2)

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

#2です。 longを宣言した#1さんのでもオーバーフローなのですよね? 原因が思いつきません。 > どこを変更すればいいか、 実際に書かれたコードをアップすればわかる方がいるかもしれません。

rx-z5815
質問者

お礼

再度の回答ありがとうございます。 おかげさまで、つい先程のことですが、エラーメッセージが出る原因がわかりましたので、そのことをお知らせしようとしていたところでした。 お手数かけて申し訳ありません。ありがとうございました。

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

仮に、表が1行目から100行目まであるなら、 Sub test1() For i = 100 To 1 Step -1 If Cells(i, "E") <> "" _ And Cells(i, "F") = "" _ And Cells(i, "G") = "" _ And Cells(i, "H") = "" Then Rows(i).Delete End If Next End Sub で出来ると思います。 表の範囲は For i = 100 To 1 Step -1'(100行から1行を下からの意味です) で調整してください。

rx-z5815
質問者

お礼

おはようございます。 回答ありがとうございます。 早速、教えていただいた方法で試してみたのですが、『オーバーフローしました』というメッセージが出てきました。表の範囲も変更してみたりもしたのですが、うまくいきません。 もしよろしければ、どこを変更すればいいか、教えていただけると助かります。 よろしくお願いします。