マクロを使用して 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.AutoFilter
Operator:=xlFilterValues
これは次のことを前提としています:
- データはセル A1 を含む範囲内にあります。そうでない場合は、手順の最後の行を変更します。
- データは Sheet1 にあります。そうでない場合は、手順の最後の行を変更します。
- リスト項目を区切るためにスペースを使用します。そうでない場合は、その行を
sep = " "
別のものに変更します。