k01ken’s b10g

He110 W0r1d!

VBA(Excel)でオートフィルター関連についてのメモ

開発環境は、Windows 10 Pro(64bit)。

AutoFilterで指定する際に、Range("A1")で指定した場合、1行目を横に進んで空白の直前までがフィルターとして適用される。その場合、Range("A1:K1")のように指定すると、途中で空白があっても、A~K列までフィルターが適用される。

オートフィルターを設定する

'表全体を選択する
ActiveSheet.Range("A1").CurrentRegion.Select
'オートフィルターを設定する
Selection.AutoFilter

オートフィルターをクリアする(消去する)

ActiveSheet.Range("A1").AutoFilter

オートフィルターの絞り込みの条件を解除する

If ActiveSheet.FilterMode = True Then
  ActiveSheet.ShowAllData
End If

1つの列に複数の条件を指定する

条件を配列に入れて、Criteria1に指定する。

Dim ListArray(3) As String
ListArray(0) = "リンゴ"
ListArray(1) = "バナナ"
ListArray(2) = "ミカン"
ListArray(3) = "イチゴ"

ActiveSheet.Range("A1").AutoFilter Field:=9, Criteria1:=ListArray, Operator:=xlFilterValues

指定した条件を除外したい場合(単一、複数両方とも)

※除外するものは最大2つまでが限界。そこで、除外したいものが3つ以上ある場合、全体からその除外したいものを引いたものを配列に入れて、それを、Criteria1に渡せばよい。

'aaaを除外
ActiveSheet.Range("A1").AutoFilter Field:=9, Criteria1 := "<>aaa", Operator:=xlFilterValues
'aaaとbbbを除外
ActiveSheet.Range("A1").AutoFilter Field:=9, Criteria1 := "<>aaa", Operator := xlAnd, Criteria2 := "<>bbb",  Operator:=xlFilterValues