Excelのこととか色々

Excel のこととか楽天とか いろいろ書いてみます・・・

【VBAスタンダードに挑戦!】オートフィルタ(絞り込む)

【VBAスタンダードに挑戦!】

f:id:tuna-kichi:20200614200940p:plain

 

本日の5分勉強の内容

 

 

********************************************************

・セル. AutoFilter Field, Criteria, Operator, Criteria2

 

 セル番地  AutoFilter を設定する範囲のセル番地を指定する 
 特別な理由がなければ表の左上のセルを指定する
 Field  AutoFilter を設定する表の左から何列目かを指定する 
 Criteria1  絞り込み条件1つ目
 Operator  2つ目の条件がある場合 Or/And を指定する
 Criteria2  絞り込み条件2つ目

 

・絞り込み条件が3つ以上になる場合は配列を使用し、
 Operator に xlFilterValues を指定する

 

                      

 

f:id:tuna-kichi:20200816144820p:plain

 

条件ひとつ

・ID列から「B」でフィルタリングする

Range("a1").AutoFilter Field:=1, Criteria1:="B"

 

「引数名 :=」を省略して記述できる

Range("a1").AutoFilter 1, "B" 

 

 

条件2つ

・値段列から500円以上3000円未満でフィルタリングする

Range("a1").AutoFilter Field:=3, Criteira1:=">500", xlAnd, Criteira2:="<3000"

 or

Range("a1").AutoFilter 3, ">500", xlAnd, "<3000"

 

 

条件3つ以上

・値段列から500円、700円、1000円でフィルタリングする

Dim Price(2) As String

Price(0) = "500"
Price(1) = "700"
Price(2) = "1,000"

Range("a1").AutoFilter 3, Price, xlFilterValues

 

※数字で入力していても String で定義しないと成功しませんでした。
 Price(2) = "1,000"のように、数字に「桁区切りスタイル」を設定した場合、
 カンマも指定する必要があるようです。 (私のPCだけ?)

                      

テキストには記載しておりませんでしたが、

AutoFilterのコードは、

「2つまで条件を指定でき、ひとつの列に対して実行する」

ようです。

 

なので、複数列に適用したい場合は、それぞれの列に対して

一行記述が必要で、実行する順番も考慮する必要があるようです。

 

2つ目の AutoFilter は1つ目の AutoFilter の結果に対して実行するので。

 

・・・

 

よくよく考えると、手動でフィルタリングするのと同じですね。

 

_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/