単一の入力ボックスを使用して単一の列に複数のフィルター入力を行う VBA コード

単一の入力ボックスを使用して単一の列に複数のフィルター入力を行う VBA コード

マクロを使用して Excel をフィルター処理する必要があります (複数のデータ)

ここに画像の説明を入力してください

私は「成績列」(画像参照)を A、B、C でフィルタリングするのが好きです(ただし、これらの A、B、C は制約されておらず、場合によっては「B と C」の成績データのみが必要になります)。また、入力ボックスを使用してこれらの成績をフィルタリング用に入力するのが好きです。

誰かコードについて助けてくれませんか

入力を「A+B+C」または「AB C」として提供していただければ非常に助かります。

スペースで区切られたサンプルデータは次のとおりです。

Name class Grade
Liam 1 A
Noah 2 b
William 3 c
James 1 d
Olive 2 e
Benjamin 3 f
Elijah 1 A
Lucas 2 b
Mason 3 c
Logan 1 d
Alexander 2 e
Ethan 3 f
Jacob 1 A
Michael 2 b
Daniel 3 c
Henry 1 d
Jackson 2 e
Sebastian 3 f
Aiden 1 A
Emma 2 b
Olivia 3 c
Ava 1 d
Isabella 2 e

答え1

ご質問の趣旨は、データをフィルター処理するために Autofilter ドロップダウンを使用するのではなく、InputBox に項目のリストを入力してから、それらの項目に基づいてデータをフィルター処理したいということですね。

次のコードでそれを実行できます:

Sub FilterListUsingInputBox()
    
    Dim sep As String
    Dim filter As String
    Dim filters() As String
    
    sep = " "
    
    filter = InputBox("Enter a list of 1-n filter items, separated by a space")
    
    If filter = "" Then 'no filter was entered
        Exit Sub
    End If
    
    filters = Split(filter, sep)
    
    Sheet1.Range("A1").CurrentRegion.AutoFilter Field:=3, Criteria1:=filters, Operator:=xlFilterValues
End Sub

ここで注意すべき重要な点は、まず入力を で配列に分割し、も指定しながらSplit()それを メソッドに渡す必要があるということです。Range.AutoFilterOperator:=xlFilterValues

これは次のことを前提としています:

  1. データはセル A1 を含む範囲内にあります。そうでない場合は、手順の最後の行を変更します。
  2. データは Sheet1 にあります。そうでない場合は、手順の最後の行を変更します。
  3. リスト項目を区切るためにスペースを使用します。そうでない場合は、その行をsep = " "別のものに変更します。

関連情報