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

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

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

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答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/7940)
回答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/7940)
回答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

  • エクセルで特定の行をマクロで削除したい。

    Sub DelLines() Dim R As Range Do Set R = ActiveSheet.Range("A:A").Find(What:="ここにキーワード", LookAt:=xlPart) If R Is Nothing Then Exit Sub R.EntireRow.Delete Loop End Sub 上記のソースだと一つのキーワードだけなのですが、複数のキーワードを追加したいのとブック全体(複数のシートから検索)で実行させたいのですが教えていただけませんか?

  • エクセルで特定の行を削除(特定文字が複数)

    http://okwave.jp/qa/q2692757.html に後述のマクロが紹介されていますが、 特定の文字が、"XXX"以外に、複数ある場合はどのようにすればよいか教えてください。 "XXX" and/or "YYY" and/or "ZZZ" の例で教えていただけませんか。 Sub DelLines()   Dim R As Range   Do     Set R = ActiveSheet.Range("B:B").Find(What:="XXX", LookAt:=xlPart)     If R Is Nothing Then Exit Sub     R.EntireRow.Delete   Loop End Sub

  • 特定文がある行を削除

    特定分がある行を削除しようと思い、以下のように設定いたしました。 Sub DelLines() Dim R As Range Do Set R = ActiveSheet.Range("A:A").Find(What:="指定文", LookAt:=xlWhole) If R Is Nothing Then Exit Sub R.EntireRow.Delete Loop End Sub これを、全てのシートに適用するにはどのように書けばよろしいのでしょうか?

  • 行の削除

    列Kに、削除という文字が入っている場合は、その行を削除するということで、3000行くらいあるなかで3分の2程度は削除する行に該当します。 下のマクロで試してみましたが、このマクロではとっても時間がかかってしまうんですが、どうしたら早く処理できるのか教えて下さい。 Dim R As Range Do Set R = ActiveSheet.Range("K:K").Find(What:="削除", LookAt:=xlWhole) If R Is Nothing Then Exit Sub R.EntireRow.Delete Loop

  • エクセルについて

    ある表より特定の文字が入力されている行を削除したいと考えております。過去を参照し下記のようなマクロを取り入れたいと思いました。 Sub macro1() Dim R As Range Do Set R = ActiveSheet.Range("F:F").Find(What:="削除したい文字列", LookAt:=xlPart) If R Is Nothing Then Exit Sub R.EntireRow.Delete Loop End Sub ここで質問です。F列に削除したい文字列がいくつかある場合上記をどのように改良すればよいでしょうか。ご教示の程よろしくお願い致します。

  • EXCEL 2つの特定の文字列がある行を残して削除

    EXCELにて2つの特定の文字列が含まれる行を残して削除したいと思っております。 A列50行にそれぞれ"年賀状""喪中""名刺"がランダムに羅列されていて、その中から"年賀状"と"喪中"の行だけを残して"名刺"の行は削除したいと思ってます。(B列以降は注文番号、枚数、氏名等が入力されています) 以下のコードで1つだけは可能でしたが、色々試しても2つはできませんでした。(コードは拾い物を少しアレンジ) Sub MacroTest1()   Dim keyWord As Variant   Dim FirstAdd As String   Dim UR As Range   Dim c As Range   Const col As Long = 1 '列数   keyWord = "年賀状"   If VarType(keyWord) = vbBoolean Or Len(keyWord) = 0 Then Exit Sub      With ActiveSheet     With .UsedRange       Set c = .Find( _       What:="*" & keyWord & "*", _       LookIn:=xlValues, _       LookAt:=xlPart, _       SearchOrder:=xlByRows)              If Not c Is Nothing Then         FirstAdd = c.Address         Set UR = c         Do           Set c = .FindNext(c)           Set UR = Union(UR, c)           If c.Address = FirstAdd Then Exit Do         Loop Until c Is Nothing       End If     End With     If Not UR Is Nothing Then       UR.EntireRow.Hidden = True       .UsedRange.SpecialCells(xlCellTypeVisible).Delete       .UsedRange.EntireRow.Hidden = False     End If   End With End Sub どうか宜しくお願いします。

  • VB 特定の文字列が入っている行を削除したい

    職場で、データの照合をしているのですが、毎回かわるキーワードが入っている 文字列が含まれる行を削除したいと考えています。 下のものは、ネットサーフィンで拾ってきたものです。 こちらでは、「文字列が含まれている行以外のものを残す」もので、 私が目的としているものと逆になっています。 アプリケーションボックスを利用して、「特定の文字列が含まれている行を削除」 できるのが理想です。 下のものを利用して(作成された方、ごめんなさい)、なんとかできるようにしたいと考えています。 どなたか助けてただけないでしょうか? 当方は、まったくの素人です。 Sub MacroTest1()   Dim keyWord As Variant   Dim FirstAdd As String   Dim UR As Range   Dim c As Range   Const col As Long = 1 '列数   keyWord = Application.InputBox("除外対象の文字列は?", Type:=2)   If VarType(keyWord) = vbBoolean Or Len(keyWord) = 0 Then Exit Sub      With ActiveSheet     With .UsedRange       Set c = .Find( _       What:="*" & keyWord & "*", _       LookIn:=xlValues, _       LookAt:=xlPart, _       SearchOrder:=xlByRows)              If Not c Is Nothing Then         FirstAdd = c.Address         Set UR = c         Do           Set c = .FindNext(c)           Set UR = Union(UR, c)           If c.Address = FirstAdd Then Exit Do         Loop Until c Is Nothing       End If     End With     If Not UR Is Nothing Then       UR.EntireRow.Hidden = True       .UsedRange.SpecialCells(xlCellTypeVisible).Delete       .UsedRange.EntireRow.Hidden = False     End If   End With End Sub

  • タイトル名で複数列を取得し、その列を削除するマクロ

    1行目にタイトル名があり、タイトル名で複数列を取得し、その列を削除するマクロを作成したいです。 いろいろ調べ、下記のコードを試し、1つの列は削除可能でしたが、 複数となるとどのようになるのか分からず・・どなたかお教えいただければ助かります。 以下は「たんぽぽ」のみですが、1行目に花の名前が多数並んでおり、「たんぽぽ」「バラ」「百合」…を一緒に削除したいです。 Dim R As Range Do Set R = ActiveSheet.Range("A:ZZ").Find(What:="たんぽぽ", LookAt:=xlWhole) If R Is Nothing Then Exit Sub R.EntireColumn.Delete Shift:=xlToLeft Loop

  • マクロでキーワードを抽出して別のシートに貼り付けする

    セルA列にキーワードCCCが含まれていた場合に その行を削除してSheet2に貼り付けをしたく、下記のソースを 書いてみましたがエラーがでてしまいます。 どこが間違っているか添削していただけないでしょうか? Sub キーワード切取貼付() Dim r As Range For Each r In Range("A1", Range("A65536").End(xlUp)) Do Set r = Range("A:A").Find(What:=CCC, LookAt:=xlPart) If r Is Nothing Then Exit Do r.Worksheets("Sheet1").Range("A:A").Cut r.Worksheets("Sheet2").Range("A1").PasteSpecial Loop Next End Sub

  • vbaで指定文字を含まない列を削除するとき

    vbaで指定文字を含まない列を削除したいです。 指定文字を含む列を削除するプログラムはできましたが、これを指定文字を含まない列を削除に変更したいです。 途中まで作ったこのプログラムを生かして、どう変更すれば含まないにできますか? 教えて頂けると助かります。 Private Sub CommandButton1_Click() Sheets("シート1").Select Do While (True) Rows("5:5").Select Set myselect = Selection.Find(What:="あああ", LookAt:=xlPart) If myselect Is Nothing Then Exit Do Columns(myselect.Column).Select Selection.Delete Shift:=xlUp Loop End Sub

専門家に質問してみよう