プロが教えるわが家の防犯対策術!

Excel2003を使用しています。

ある表の中のデータで、次の4つの条件を満たすデータを行削除したいのですが、マクロではどのように書いたらいいのでしょうか?

 E列…データが入力されている
 F列…空白
 G列…空白
 H列…空白

よろしくお願いします。

A 回答 (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
    • good
    • 0
この回答へのお礼

おはようございます。
いつも回答ありがとうございます。

早速、教えていただいた方法で試してみたのですが、マクロを実行すると、『オーバーフローしました』というメッセージが出てきます。ヘルプ等を参考にして、変更してみたりもしたのですが、うまくいきません。

お手数ですが、どこを変更すればいいのか、教えていただけると助かります。
よろしくお願いします。

お礼日時:2007/06/20 09:35

#2です。


longを宣言した#1さんのでもオーバーフローなのですよね?
原因が思いつきません。

> どこを変更すればいいか、

実際に書かれたコードをアップすればわかる方がいるかもしれません。
    • good
    • 1
この回答へのお礼

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

お礼日時:2007/06/20 16:29

仮に、表が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行を下からの意味です)
で調整してください。
    • good
    • 0
この回答へのお礼

おはようございます。
回答ありがとうございます。

早速、教えていただいた方法で試してみたのですが、『オーバーフローしました』というメッセージが出てきました。表の範囲も変更してみたりもしたのですが、うまくいきません。

もしよろしければ、どこを変更すればいいか、教えていただけると助かります。
よろしくお願いします。

お礼日時:2007/06/20 09:44

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A