大体でIT
大体でIT
Excel VBAを使ってワークシートの表でオートフィルタを設定・解除する方法と昇順・降順でソートする方法についてご紹介します。ワークシートの表を操作する頻度が多い場合に参考になるかと思います。
この記事ではワークシートの表をフィルタする方法と昇順・降順にソートする方法についてご紹介します。
Excel VBAでワークシートの表をフィルタやソートしたい場合に参考になるかと思います。
フィルタやソートの頻度が多い場合Excel VBAで自動化すれば時短にもなるのですすめです。
- ワークシートの表をフィルタ
- ワークシートの表を昇順・降順にソート
Excel VBAでオートフィルタを使う方法をご紹介します。
フィルタするワークシート
このワークシートに入力されたデータをオートフィルタを使ってフィルタしてみます。
オートフィルタで1つのデータをフィルタするExcel VBAです。
フィルタするExcel VBAコード
'オートフィルタ(1列に対し1個でフィルタします)
Sub TEST1()
ActiveSheet.Range("B3").AutoFilter 2, "山本"
End Sub
オートフィルタのオブジェクトは、表の左上の範囲『Range("B3")』を指定します。
フィルタしたい列は2番目なので1つ目の引数を『2』とします。これで表の2列目を『山本』でフィルタできます。
条件1つでフィルタした結果
『山本』のデータは一つなのでフィルタ結果は1行だけです。
表を複数条件でフィルタしたい場合のExcel VBAコードです。
複数条件でフィルタするExcel VBAコード
'オートフィルタ(複数のデータでフィルタ)
Sub TEST2()
ReDim ArrayData(3) As Variant
ArrayData(0) = "加藤"
ArrayData(1) = "小林"
ArrayData(2) = "鈴木"
ArrayData(3) = "山本"
ActiveSheet.Range("B3").AutoFilter 2, ArrayData, xlFilterValues
End Sub
2つ目の引数にフィルタしたいデータの配列『ArrayData』を指定しています。
3つ目の引数には複数条件をフィルタするために『xlFilterValues』を指定しています。
複数条件でフィルタした結果
配列『ArraData』で指定したデータがフィルタされています。
これで自由に複数のデータをフィルタすることができます。
オートフィルタでANDを使うExcel VBAのコードです。
ワークシートの表の数値データを複数条件を指定してフィルタする際に便利です。
数値データを160より大きく180以下のデータでフィルタするExcel VBAコードを記載してみました。
Andを使ってフィルタするExcel VBAコード
'オートフィルタ(ANDでフィルタ)
Sub TEST3()
ActiveSheet.Range("B3").AutoFilter 3, ">160", xlAnd, "<=180"
End Sub
xlAndは条件1かつ条件2みたいに使うことができます。
条件の『">160"』の『">"』はかならず左側につけましょう。
条件は他に『"<>"』があります。『"<>〇〇"』で〇〇以外の場合。という意味になります。
演算子は他にも代表的なところで『xlor』などがあります。条件1または条件2という使い方ですね。
オートフィルタでANDを使ったフィルタの結果
身長の列で160より大きく180以下のデータをフィルタ出来ています。
オートフィルタでよく使うのがフィルタ条件の解除です。
オートフィルタを解除するExcel VBAコード
'オートフィルタ解除(全表示)
Sub TEST4()
'全表示
If ActiveSheet.FilterMode = True Then
ActiveSheet.ShowAllData
End If
End Sub
『〇〇.ShowAllData』でフィルタ条件を解除してすべてのデータを表示できます。
エラー回避として最初にフィルタされている場合にフィルタを解除する。とすればエラーが発生することを防げます。
Excel VBAとしては、『If 〇〇.FilterMode = True Then』と最初に条件をつけて『〇〇.ShowAllData』をしましょう。
オートフィルタの解除結果
すべてのフィルタが解除されています。また、フィルタされていないときに実行してもエラーになりません。
ワークシートの操作でフィルタと同じぐらい使うのが並べ替えだと思います。
Excel VBAで昇順・降順にする方法をご紹介します。
ワークシートを昇順に並べ替えるExcel VBAです。
昇順でソートするExcel VBAコード
'Sortで昇順にソート
Sub TEST5()
With ActiveSheet
.Range("B3").Sort key1:=.Range("D3"), order1:=xlAscending, Header:=xlYes
End With
End Sub
表の指定は『Range("B3").Sort』で表の左上のセルを指定します。
並べ替えたい列がD3の列なので、『ke1:= Range("D3")』とします。
ソートする場合並べ替えたい列はセルを指定します。列の順番ではありませんので注意です。
昇順で並べ替えたいので、『order1:=xlAscending』と指定します。
一番上の行を見出しとして使いたいので『Header:=xlYes』とします。
『xlNo』を指定すると見出しも並べ替えられてしまうので注意です。
降順でソートした結果
ワークシートの表を降順で並べ替えるExcel VBAコードです。
降順でソートするExcel VBAコード
'Sortで降順にソート
Sub TEST6()
With ActiveSheet
.Range("B3").Sort key1:=.Range("D3"), order1:=xlDescending, Header:=xlYes
End With
End Sub
降順で並べ替えたいので『order1:=xlDescending』とします。
降順でソートした結果
ワークシートの表をフィルタする方法と昇順・降順でソートする方法についてご紹介しました。
業務でワークシートの表をソートやフィルタする頻度が多い場合はExcel VBAで自動化すると効率的です。
また、複数の列でソートしたりフィルタしたりする場合はExcel VBAで書いてしまえば一発でデータを表示できますのでおすすめです。
〇列を△でフィルタして、□列を☆でフィルタした後に〇列を昇順でソートするとかですね。
Excel VBAで記載しておけばフィルタミスやソートミスを減らすことにつながるかと思います。
ご参考になればと思います。最後までご覧くださいましてありがとうございました。