2017-03-28 8 views
0

単一の列フィルターのSINGLE入力値に基づいて行を削除するコードを作成しました。これを編集して同じ列フィルター。Excel VBA - 単一の列フィルターから複数の値の行を削除する

データベースのヘッダーはA4:Zです。

Option Explicit 

Sub Test() 

    Dim ws As Worksheet 
    Dim lastRow As Long 
    Dim rng As Range 
    Dim myValue As Variant 

    'set sheet reference 
    Set ws = ActiveSheet 

    'turn off autofilter 
    ws.AutoFilterMode = False 

    'get last row 
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row 

    'set range to filter 
    Set rng = ws.Range("A4:Z" & lastRow) 

    'get user input 
    myValue = InputBox("Periods to delete?") 

    'set filter 
    rng.AutoFilter Field:=8, Criteria1:=myValue 

    'delete visible rows 
    rng.Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Delete 

    'show remaining rows by removing autofilter 
    ws.AutoFilterMode = False 

End Sub 

入力ボックスは現在1つの期間(月番号)をとります。私はそれが '2,3,4'のように複数の値を取るようにしたい。これは2(feb)、3(3月)、4(4月)を削除します。

本当に次に何をするのかわからない、私はまだvbaの新書です。

答えて

1

これでオートフィルタラインを交換してください。値が入力ボックスにカンマで区切って入力されていることを前提としています。それらを配列に変換します。

rng.AutoFilter Field:=8, Criteria1:=Array(Split(myValue, ",")), Operator:=xlFilterValues 
+0

ありがとうございます! –

+0

本当に申し訳ありませんが、コードがこのような値をキャッチする方法はありますか?「16m1-16m5」?何もしていないようです。 –

+0

セパレータがコンマではなくハイフンであることを意味する場合は、2番目の分割パラメータをハイフンに変更します。 – SJR

関連する問題