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

このQ&Aのポイント
  • エクセルで特定の文字が複数ある場合に特定の行を削除する方法について教えてください。
  • 特定の文字が複数ある場合にExcelのマクロを使用して行を削除する方法について教えてください。
  • Excelで特定の文字が複数あるセルを検索し、その行を削除する方法について教えてください。
回答を見る
  • ベストアンサー

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

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

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

  • ベストアンサー
noname#203218
noname#203218
回答No.1

Sub DelLines() Dim R As Range Dim fword(3) As String Dim i As Integer fword(1) = "XXX" fword(2) = "YYY" fword(3) = "ZZZ" For i = 1 To 3 Do Set R = ActiveSheet.Range("B:B").Find(fword(i), LookAt:=xlWhole) If R Is Nothing Then Exit Do R.EntireRow.Delete Loop Next End Sub 検索文字を増やしたい場合は下記数値を増加させて下さい。 Dim fword(3) As Stringの()内数値 fword(3) = "ZZZ"以降に追加ワードを追加 For i = 1 To 3の数値を増加

yukisaka
質問者

お礼

補足説明を含め有難うございました。 文字列を「含む」とした場合も、アスタリスクを加えることで対応できますね。 fword(1) = "*XXX*" fword(2) = "*YYY*" fword(3) = "*ZZZ*"

その他の回答 (1)

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんばんは! せっかくコードをお考えですが、↓のような感じではどうでしょうか? Sub Sample1() Dim i As Long, j As Long, k As Long, myArray myArray = Array("XXX", "YYY", "ZZZ") Application.ScreenUpdating = False Rows(1).Insert Range("B1") = "B列" On Error Resume Next '←念のため For k = 0 To UBound(myArray) Range("B1").AutoFilter field:=1, Criteria1:="*" & myArray(k) & "*" i = WorksheetFunction.Match(myArray(k), Range("B:B"), False) j = Cells(Rows.Count, 2).End(xlUp).Row If j > 1 Then Rows(i & ":" & j).Delete End If Next k ActiveSheet.AutoFilterMode = False Rows(1).Delete Application.ScreenUpdating = True End Sub ※ オートフィルタでXXX・YYY・ZZZを含むものでフィルタをかけ、その行を削除しています。 尚、オートフィルタのOR条件は2つしか設定できませんので、敢えてArrayを使っています。m(_ _)m

yukisaka
質問者

お礼

有難うございます。 思った結果が実行できました。 オートフィルタのマクロ自動記録を使うなどして動きを確認したいと思います。

関連するQ&A

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

    すみませんどなたか教えてください。 エクセルで商品の在庫管理をしておりまして、AP列に製品メーカー名が入っているのですが、 いくつかの(数十個)メーカーを省き削除したく思い、以下のようなマクロをググって作ってみましたが、 上手く動きませんでした。 1つのメーカーだけ記載した場合はうまく動きました。 やりたいことは1つのマクロの中に、数十個のメーカー名を記入しておき、そのメーカーを全件 検索して、AP列に文字列が含まれる場合は、その行を削除したいです。 宜しくお願い致します。 ~~~~~~ Sub DelLines1() Dim R As Range Do Set R = ActiveSheet.Range("AP:AP").Find(What:="softbank", LookAt:=xlPart) If R Is Nothing Then Exit Sub R.EntireRow.Delete Loop Sub DelLines2() Dim R As Range Do Set R = ActiveSheet.Range("AP:AP").Find(What:="docomo", LookAt:=xlPart) If R Is Nothing Then Exit Sub R.EntireRow.Delete Loop Sub DelLines3() Dim R As Range Do Set R = ActiveSheet.Range("AP:AP").Find(What:="au", 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:=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 どうか宜しくお願いします。

  • EXCEL 特定の列内で記載があった行を削除

    G列に記載があったものだけを残したいと以前質問した際に回答を頂いた内容ですが、 この内容にプラスして、L列に何か記載があった場合、その行は削除するようにしたいと考 えています。 詳しい方が居りましたら、是非頂けないでしょうか? sub macro2()  range("G:L").autofilter field:=1, criteria1:="="  activesheet.autofilter.range.offset(1).entirerow.delete shift:=xlshiftup  activesheet.autofiltermode = false end sub 環境 Excel2003を利用しています。

  • 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

  • EXCEL 頭に特定の文字があった場合、文字記入

    B列に複数の品番がありますが、頭に「CY」があった品番のみK列に「図面は不要」と自動で入力するように下記マクロに追加したいのですが、教えて下さる方からの回答をお待ちしています。 ※BからK列のJ列に記載があったものだけを抜粋しています。 sub macro()  range("B:K").autofilter field:=9, criteria1:="="  activesheet.autofilter.range.offset(1).entirerow.delete shift:=xlshiftup  activesheet.autofiltermode = false end sub

  • エクセルで任意の文字列の1行後に改ページ挿入

    どなたかお教え下さい。 沢山の文字列が並んだデータがあり、下記関数だと「...コマンド正常終了」の 文字列の行に改ページが挿入されてしまいます。 該当文字列行ではなく、「...コマンド正常終了」の文字列の1行あとに改ペー ジを挿入したいのですが どこを修正または追加したら良いかご教授願います。 初心者ですみません・・・ ------------------------------------------------------------------------- Dim r As Range, fr, fa As String Application.ScreenUpdating = False With ActiveSheet Set r = .Range("A1:A" & .Range("A65536").End(xlDown).Row) Set fr = r.Find("...コマンド正常終了", LookAt:=xlPart) If Not fr Is Nothing Then fa = fr.Address Do If fr.Address <> "$A$1" Then .HPageBreaks.Add Before:=fr Set fr = r.FindNext(fr) Loop While Not fr Is Nothing And fa <> fr.Address End If End With -------------------------------------------------------------------------

専門家に質問してみよう