• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:特定文字列を含む行を削除するマクロ)

特定文字列を含む行を削除するマクロ

このQ&Aのポイント
  • エクセルで商品の在庫管理をしておりまして、AP列に製品メーカー名が入っているのですが、いくつかの(数十個)メーカーを省き削除したいです。
  • 実現したいことは1つのマクロの中に、数十個のメーカー名を記入しておき、そのメーカーを全件検索して、AP列に文字列が含まれる場合は、その行を削除することです。
  • 質問者は上記のマクロを作成しましたが、うまく動作しないため、エクセルファイルの特定文字列を削除する方法を教えて欲しいとしています。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.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 ’ここまでをヒトカタマリとして作成する

327
質問者

お礼

私が分かっておりませんでした。 お教え頂きました記述で実行することができました。 度々の回答本当にありがとうございます。

その他の回答 (2)

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.2

マクロの構成がまるで間違ってましたね。 そもそも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

327
質問者

お礼

回答ありがとうございます。 上記方法で出来ました。 構文が分かっておらず申し訳ありません、もう少し勉強してみます。

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

誤: If R Is Nothing Then Exit Sub 正: If R Is Nothing Then Exit do 漏れなく修正します。

327
質問者

お礼

回答ありがとうございます。修正して実行したのですが、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

関連するQ&A

専門家に質問してみよう