- ベストアンサー
【Excel VBA】複数の条件を満たすデータを行削除
Excel2003を使用しています。 ある表の中のデータで、次の4つの条件を満たすデータを行削除したいのですが、マクロではどのように書いたらいいのでしょうか? E列…データが入力されている F列…空白 G列…空白 H列…空白 よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
例えばこんなマクロでしょうか 「空白」の意味が「何も入っていない空白」と「関数によって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
その他の回答 (2)
- merlionXX
- ベストアンサー率48% (1930/4007)
#2です。 longを宣言した#1さんのでもオーバーフローなのですよね? 原因が思いつきません。 > どこを変更すればいいか、 実際に書かれたコードをアップすればわかる方がいるかもしれません。
お礼
再度の回答ありがとうございます。 おかげさまで、つい先程のことですが、エラーメッセージが出る原因がわかりましたので、そのことをお知らせしようとしていたところでした。 お手数かけて申し訳ありません。ありがとうございました。
- merlionXX
- ベストアンサー率48% (1930/4007)
仮に、表が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行を下からの意味です) で調整してください。
お礼
おはようございます。 回答ありがとうございます。 早速、教えていただいた方法で試してみたのですが、『オーバーフローしました』というメッセージが出てきました。表の範囲も変更してみたりもしたのですが、うまくいきません。 もしよろしければ、どこを変更すればいいか、教えていただけると助かります。 よろしくお願いします。
お礼
おはようございます。 いつも回答ありがとうございます。 早速、教えていただいた方法で試してみたのですが、マクロを実行すると、『オーバーフローしました』というメッセージが出てきます。ヘルプ等を参考にして、変更してみたりもしたのですが、うまくいきません。 お手数ですが、どこを変更すればいいのか、教えていただけると助かります。 よろしくお願いします。