- ベストアンサー
特定文字列を含む行を削除するマクロ
- エクセルで商品の在庫管理をしておりまして、AP列に製品メーカー名が入っているのですが、いくつかの(数十個)メーカーを省き削除したいです。
- 実現したいことは1つのマクロの中に、数十個のメーカー名を記入しておき、そのメーカーを全件検索して、AP列に文字列が含まれる場合は、その行を削除することです。
- 質問者は上記のマクロを作成しましたが、うまく動作しないため、エクセルファイルの特定文字列を削除する方法を教えて欲しいとしています。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
ん? >構文が分かっておらず申し訳ありません、もう少し勉強してみます。 その通りですね。 再掲: >そもそもsub と end subは一対一でなければなりません あなたの修正マクロ: Sub DelLines1() ’←これを実行したら Dim R As Range Do Set R = ActiveSheet.Range("AP:AP").Find(What:="au", LookAt:=xlPart) If R Is Nothing Then Exit Do R.EntireRow.Delete Loop End Sub ’←ここで終了してオシマイ。 Sub DelLines2() ’←ここからは,別のマクロとして新たに実行しなきゃ Dim R As Range Do Set R = ActiveSheet.Range("AP:AP").Find(What:="docomo", LookAt:=xlPart) If R Is Nothing Then Exit Do R.EntireRow.Delete Loop End Sub ’2つ目ここまで Sub DelLines3() ’←これも3つ目のマクロ Dim R As Range Do Set R = ActiveSheet.Range("AP:AP").Find(What:="softbank", LookAt:=xlPart) If R Is Nothing Then Exit Do R.EntireRow.Delete Loop End Sub ’3つ目はここまで アナタが意図したマクロ全体をスルーで実行するには: Sub DelLines1() ’←これから開始して Dim R As Range Do Set R = ActiveSheet.Range("AP:AP").Find(What:="au", LookAt:=xlPart) If R Is Nothing Then Exit Do R.EntireRow.Delete Loop Do Set R = ActiveSheet.Range("AP:AP").Find(What:="docomo", LookAt:=xlPart) If R Is Nothing Then Exit Do R.EntireRow.Delete Loop Do Set R = ActiveSheet.Range("AP:AP").Find(What:="softbank", LookAt:=xlPart) If R Is Nothing Then Exit Do R.EntireRow.Delete Loop End Sub ’ここまでをヒトカタマリとして作成する
その他の回答 (2)
- keithin
- ベストアンサー率66% (5278/7941)
マクロの構成がまるで間違ってましたね。 そもそもsub と end subは一対一でなければなりません。 例: sub macro1() dim r as range dim x as variant for each x in array("softbank", "docomo", "au") do set r = range("AP:AP").find(what:=x, lookat:=xlpart) if r is nothing then exit do r.entirerow.delete loop next end sub
お礼
回答ありがとうございます。 上記方法で出来ました。 構文が分かっておらず申し訳ありません、もう少し勉強してみます。
- keithin
- ベストアンサー率66% (5278/7941)
誤: If R Is Nothing Then Exit Sub 正: If R Is Nothing Then Exit do 漏れなく修正します。
お礼
回答ありがとうございます。修正して実行したのですが、end subを入れるようメッセージが出力されて、挿入して実行したのですが、1つ目しか削除されませんでした。 Sub DelLines1() Dim R As Range Do Set R = ActiveSheet.Range("AP:AP").Find(What:="au", LookAt:=xlPart) If R Is Nothing Then Exit Do R.EntireRow.Delete Loop End Sub Sub DelLines2() Dim R As Range Do Set R = ActiveSheet.Range("AP:AP").Find(What:="docomo", LookAt:=xlPart) If R Is Nothing Then Exit Do R.EntireRow.Delete Loop End Sub Sub DelLines3() Dim R As Range Do Set R = ActiveSheet.Range("AP:AP").Find(What:="softbank", LookAt:=xlPart) If R Is Nothing Then Exit Do R.EntireRow.Delete Loop End Sub
お礼
私が分かっておりませんでした。 お教え頂きました記述で実行することができました。 度々の回答本当にありがとうございます。