大体でIT

-ちょっと使えるネタを紹介-

大体でIT

Excel VBAを使ってワークシートの表でオートフィルタを設定・解除する方法と昇順・降順でソートする方法についてご紹介します。ワークシートの表を操作する頻度が多い場合に参考になるかと思います。

はじめに

この記事ではワークシートの表をフィルタする方法昇順・降順にソートする方法についてご紹介します。

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つでフィルタした結果

山本のフィルタ結果

表の『2』列目の『山本』をフィルタしています。

『山本』のデータは一つなのでフィルタ結果は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を使う

オートフィルタでANDを使うExcel VBAのコードです。

ワークシートの表の数値データを複数条件を指定してフィルタする際に便利です。

数値データを160より大きく180以下のデータでフィルタするExcel VBAコードを記載してみました。

Andを使ってフィルタするExcel VBAコード

'オートフィルタ(ANDでフィルタ)
Sub TEST3()
    
    ActiveSheet.Range("B3").AutoFilter 3, ">160", xlAnd, "<=180"
    
End Sub

ポイントは演算子『xlAnd』を使う点です。

xlAndは条件1かつ条件2みたいに使うことができます。

条件の『">160"』の『">"』はかならず左側につけましょう。

条件は他に『"<>"』があります。『"<>〇〇"』で〇〇以外の場合。という意味になります。

演算子は他にも代表的なところで『xlor』などがあります。条件1または条件2という使い方ですね。

オートフィルタでANDを使ったフィルタの結果

オートフィルタでANDを使ったフィルタの結果

身長の列で160より大きく180以下のデータをフィルタ出来ています。

オートフィルタを解除する

オートフィルタでよく使うのがフィルタ条件の解除です。

Excel VBAではこのように記載します。

オートフィルタを解除する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で昇順・降順にする方法をご紹介します。

Sortで昇順にソート

ワークシートを昇順に並べ替える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で降順にソート

ワークシートの表を降順で並べ替えるExcel VBAコードです。

降順でソートするExcel VBAコード

'Sortで降順にソート
Sub TEST6()
    
    With ActiveSheet
        .Range("B3").Sort key1:=.Range("D3"), order1:=xlDescending, Header:=xlYes
    End With
    
End Sub

VBAコードは昇順とほとんど同じです。

降順で並べ替えたいので『order1:=xlDescending』とします。

Excel VBAで並べ替えた結果です。

降順でソートした結果

Excel VBAで降順で並べ替えた結果です

身長の列を降順にソートできています。

おわりに

ワークシートの表をフィルタする方法と昇順・降順でソートする方法についてご紹介しました。

業務でワークシートの表をソートやフィルタする頻度が多い場合はExcel VBAで自動化すると効率的です。

また、複数の列でソートしたりフィルタしたりする場合はExcel VBAで書いてしまえば一発でデータを表示できますのでおすすめです。

〇列を△でフィルタして、□列を☆でフィルタした後に〇列を昇順でソートするとかですね。

Excel VBAで記載しておけばフィルタミスやソートミスを減らすことにつながるかと思います。

ご参考になればと思います。最後までご覧くださいましてありがとうございました。

関連する記事から探す

カテゴリから探す

カテゴリから見たい項目を探すと便利ですよ。

アーカイブから探す