• 締切済み

VBA 検索条件にヒットした行を削除

VBAのことで教えてください。 エクセルのsheet1の「L列」に複数のデータが含まれております。 その中に「ロングタイプ」、「ショートタイプ」、「無償」など沢山のワードがある中で、 アスタリスク記号を利用して、5パターンのワードを検索して、その検索条件に満 たしている行を削除したいのですが、コードがわかりません。 例えば・・・・・ ロングタイプA ショートタイプB ロングタイプB ショートタイプA 無償A 無償B キャンペーンA キャンペーンB もっと複数のワードがあるのですが、その中でいらないワードをアスタリスク記号 を利用して5つワードを検索し、その対象行を削除したいです。 例えばアスタリスク記号を利用して「*ロング*」「*ショート*」「*無償*」などロングと 入っているワードを検索かけて、行を削除する。 コードで回答して頂ければ、幸いです。 宜しくお願いします。

みんなの回答

  • eden3616
  • ベストアンサー率65% (267/405)
回答No.2

http://okwave.jp/qa/q8684309.html とほぼ同一の内容かと存じます。 オートフィルタ―ではなく、削除が目的と把握致しますので 上記回答のコードを削除用に改変致しましたので回答させて頂きます。 以下のコードを標準モジュールへ張り付けて コード内の以下の箇所を変更し、 '/////////////設定///////////// '条件設定(カンマ区切りで条件を指定) word = Split("*無料*,*ショート*,*ロング*", ",") '対象列設定(検索対象とする列記号を指定) tcol = "L" '////////////////////////////// 「条件削除」を実行してください。 検索条件はカンマで区切って複数指定できます 増やすことも、減らすことも出来ます ■VBAコード Sub 条件削除() '型宣言 Dim word As Variant, i As Long, j As Long Dim tcol As String '/////////////設定///////////// '条件設定(カンマ区切りで条件を指定) word = Split("*無料*,*ショート*,*ロング*", ",") '対象列設定(検索対象とする列記号を指定) tcol = "L" '////////////////////////////// '行数ループ For i = Range(tcol & Rows.Count).End(xlUp).Row To 1 Step -1   'フラグ初期化   flag = 0   '条件削除   For j = 0 To UBound(word)     If Range(tcol & i) Like word(j) Then       Rows(i).Delete       Exit For     End If   Next j Next i End Sub

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

こんばんは! オートフィルタで「含む」の3条件以上の場合は作業用の列を設けて その列でフィルタを掛ける方法が簡単だと思います。 (「含む」ではなく、「指定する値に等しい」場合は Excel2007以降でArray等を使用すれば可能です) ただこれでは何もお役に立てないので、一例です。 尚1行目が項目行で項目はA列から入っているとします。 Sub Sample1() Dim lastRow As Long lastRow = Cells(Rows.Count, "L").End(xlUp).Row Application.ScreenUpdating = False Range("M:M").Insert With Range(Cells(2, "M"), Cells(lastRow, "M")) .Formula = "=IF(OR(COUNTIF(L2,""*ロング*""),COUNTIF(L2,""*ショート*""),COUNTIF(L2,""*無償*"")),1,"""")" .Value = .Value End With If WorksheetFunction.CountIf(Range("M:M"), 1) Then Range("A1").AutoFilter field:=13, Criteria1:=1 '←「13」は作業列(M列)の列番号 Rows(2 & ":" & lastRow).SpecialCells(xlCellTypeVisible).Delete shift:=xlUp End If AutoFilterMode = False Range("M:M").Delete Application.ScreenUpdating = True End Sub ※ 行すべてを削除しています。 こんな感じではどうでしょうか?m(_ _)m

関連するQ&A