- ベストアンサー
行一括削除を早く行う、こんな方法できますか。
マクロによる行削除については、空白行の削除などいろいろな質問と 回答が出ていますが、データ量が多くなると自動化でもかなり時間が かかります。 そこで、ソートにより並べ替えを最初に行い、ある列に、最初に ある言葉や数字が出た行から最終行までを一括削除するマクロなら、 処理時間が早く出来ないかと思いました。 例えは、データA10からZ300で、並べ替えによりH列の最初に 日本という言葉が出たら、その行から最終300行までを一括削除 するという方法です。 (削除は行全体でもAからZまでの行、どちらでもよいです) そんな方法が出来るなら教えて下さい。よろしくお願いいたします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 2パターン作ってみました。 test1 はH10以降のH列の中で「日本」を探して そのセル以降のデータ行を削除します。 test2 は並び替えなしに、H10以降のH列に「削除」の文字を 探して、見つかった全ての行を複数選択して、最後にまとめて 削除します。 Unionを使った例です。 Sub test() Dim c As Object Dim myKey As String Dim myRange As Range Dim myFirstCell As Range Dim myLastCell As Range Set myFirstCell = Range("H10") myKey = "日本" Set myLastCell = Cells(Rows.Count, myFirstCell.Column).End(xlUp) Set myRange = Range(myFirstCell, myLastCell) Set c = myRange.Find(What:=myKey, LookIn:=xlValues, lookat:=xlPart, _ SearchOrder:=xlByColumns, MatchByte:=False) If Not c Is Nothing Then Range(c, myLastCell).EntireRow.Delete End If Set myRange = Nothing Set c = Nothing Set myFirstCell = Nothing Set myLastCell = Nothing End Sub '============================================== Sub test2() Dim c As Object Dim myKey As String Dim myRange As Range Dim UnionRange As Range Dim fAddress As String Set myRange = Range("H10", Cells(Rows.Count, "H").End(xlUp)) myKey = "削除" With myRange Set c = .Find(What:=myKey, LookIn:=xlValues, lookat:=xlPart, _ SearchOrder:=xlByColumns, MatchByte:=False) If Not c Is Nothing Then fAddress = c.Address Do If UnionRange Is Nothing Then Set UnionRange = c Else Set UnionRange = Union(c, UnionRange) End If Set c = .FindNext(c) If c.Address = fAddress Then Exit Do Loop UnionRange.EntireRow.Delete End If End With Set myRange = Nothing Set UnionRange = Nothing Set c = Nothing End Sub
その他の回答 (4)
- ka_na_de
- ベストアンサー率56% (162/286)
#4です。 #3のtest2() ではFindメソッドで削除したい単語を検索してますが、 おそらく、オートフィルタで絞り込んで行一括削除したほうが早い気がします。 興味があれば試してみてください。 必要ならサンプルを作りますよ。
- tom04
- ベストアンサー率49% (2537/5117)
こんにちは! 参考になるかどうか判りませんが・・・ 一例です。 A列全てを範囲指定し、列を挿入します。 元データが右に1列ずつずれますので、 元のH列がI列に移動します。 そして、A10セルに =IF(COUNTIF(I10,"日本*"),1,"") という数式を入れ、フィルハンドルでダブルクリックします。 これでI列が「日本」から始まるセルに「1」が表示されますので 当方使用のExcel2003の場合ですが データ → フィルタ → オートフィルタ で A列が「1」のものを抽出し、その行全てを削除します。 最後にオートフィルタを解除して、A列全てを削除すれば完了です。 もし、H列のセルに「日本」という文字列が含まれている という条件なら数式は変わってきます。 一気に!というわけにはいかないのですが、 参考になれば幸いです。 他に良い方法があれば読み流してくださいね。m(__)m
- mar00
- ベストアンサー率36% (158/430)
並べ替えにより範囲指定は終わっているので If Range("H10") = "日本" Then Selection.EntireRow.Delete End If を追加すればできると思います。
- tarinko_06
- ベストアンサー率24% (15/62)
unionでもいいと思う
お礼
早々のご教示ありがとうございました。 バッチリできました。 またパターン2について併せて作成していただき感激です。 本当にありがとうございました。