Excelマクロでオートフィルター。特定月のデータを抽出する方法

  • URLをコピーしました!

Excelで特定月のデータを抽出するときも、マクロ(VBA)を使うと便利です。

特定月のデータのみ抽出するオートフィルター

たとえば、次のようなデータがあり、

image

会計ソフトに取り込むようにデータをつくるとします。
(クラウド会計用の形式です)

このデータから7月分のデータだけを取り込むなら、7月分のみを別シートに貼り付けてCSVファイルとして保存しなければいけません。

image

そのときに、オートフィルター(Ctrl+Shift+L)を使います。
image

毎回これをやると大変なので、マクロでやってしまおうというわけです。

なお、こういったケースでは、その他次のような方法があります。

・月別にファイルをつくる→管理が煩雑になる。現金出納帳だと繰り越しの管理の手間、ミスのリスク。
・月のデータを別の列につくる。MONTH(マンス)関数を使う
・会計ソフトのデータをいったん削除して、すべてのデータを取り込む

オートフィルターのExcelマクロ

オートフィルターのマクロは、こう書きます。

Sub filter()

  Range("a1").AutoFilter

End Sub

image

Range(”a1”)、つまりセルA1を起点にオートフィルターを設定するという意味です。

通常なら、

「日付」で「2018/7/2」を抽出する

といった操作をします。

これをマクロで書くと、

Sub filter()

  Range("a1").AutoFilter field:=1, Criteria1:="2018/7/2"

End Sub

です。

image

field:=1は、1列目、つまり「日付」

Criteria1(クリテリア)は、抽出するもの、つまり「2018/7/2」

を意味します。

Criteriaは、基準という意味の単語です。
何を基準に抽出するかを伝えます。

なお、このCriteria1の「1」は、複数の抽出条件があるときに、Criteria1,Criteria2…と増やしていくものです。
この場合は、Operator:=xlOrと、or(または)という条件であることを追加します。
Operator(オペレーター)は、設定、オプションのようなものです。

Range(“a1″).AutoFilter field:=1, Criteria1:=”2018/7/2″, Criteria2:=”2018/7/3”, Operator:=xlOr

2018-08-22_09h19_26

では、「7月」という条件はどう設定すればいいでしょうか。
上記のように条件を増やしていくのも大変ですし、他の月には対応しません。

次のような方法が考えられます。

 

特定月のデータをオートフィルターで抽出するマクロ

特定月のはじまりと終わりを指定する

7月1日以降7月31日までというのを、条件として指定する方法です。
ただ、8月になったら、2か所を変更しなければいけませんし、月によっては、終わりの指定を

Sub filter()

  Range("a1").AutoFilter field:=1, Criteria1:=">=2018/7/1", Criteria2:="<=2018/7/31", Operator:=xlAnd

End Sub

image

image

image

特定月を「先月」「今月」「来月」と指定する

オートフィルターには、[日付フィルター]から「先月」「今月」「来月」という条件を指定でき、 image これをマクロで表現する方法もあります。

Sub filter2()

  Range("a1").AutoFilter field:=1, Criteria1:=xlFilterLastMonth, Operator:=xlFilterDynamic

End Sub

image

Criteria1(基準)には、xlFilterLastMonth(先月)

今月だと、xlFilterThisMonth
来月だと、xlFilterNextMonth

です。

Operatorには、xlFilterDynamicを入れます。
動的フィルターという意味ですが、まあそんなもんだと気にしなくても大丈夫です。

データを取り込むときに、通常は先月のデータを処理するはずで、そう決まっているなら、この方法でシンプルに処理できます。
私の場合、毎月1日(土日祝の場合は翌営業日)に経理処理をすると決めているので、この方法です。

抽出する月を指定する

先月、今月、来月だと、指定があいまいです。
その処理をした日によって指定する月がかわります。
特定月を指定したいときには、次のように書きましょう。

Sub Filter3()

  Range("i2").AutoFilter field:=1, Criteria1:=xlFilterAllDatesInPeriodJuly, Operator:=xlFilterDynamic
End Sub

image

Criteria1(基準)には、xlFilterAllDatesInPeriodJulyです。
7月なので、July。

ここを変えれば、どの月でも抽出できます。

つづりを間違えたら……と思うかもしれません。
そんなときのために小文字で入力しましょう。
小文字で入力して、間違っていれば、小文字のままです。

会っていれば、Julyと最初のjがJに変わります。

image

適当に打っておき、間違えたら修正するというスタンスでかまいません。
私はそうです。

ただ、毎回、この英単語を変更するのも大変です。

このパターンもマクロに組み込み、月を変更したらいいようにもできます。

Sub Filter4()  '数字で月を指定

    Dim Filter_Month
    Dim Criteria_Month
    
'■抽出したい月を指定
    Filter_Month = 7
    
'■指定した月を変換
    Select Case Filter_Month
        Case "1"
            Criteria_Month = xlFilterAllDatesInPeriodJanuary
        Case "2"
            Criteria_Month = xlFilterAllDatesInPeriodFebruray
        Case "3"
            Criteria_Month = xlFilterAllDatesInPeriodMarch
        Case "4"
            Criteria_Month = xlFilterAllDatesInPeriodApril
        Case "5"
            Criteria_Month = xlFilterAllDatesInPeriodMay
        Case 6
            Criteria_Month = xlFilterAllDatesInPeriodJune
        Case "7"
            Criteria_Month = xlFilterAllDatesInPeriodJuly
        Case "8"
            Criteria_Month = xlFilterAllDatesInPeriodAugust
        Case "9"
            Criteria_Month = xlFilterAllDatesInPeriodSeptember
        Case "10"
            Criteria_Month = xlFilterAllDatesInPeriodOctober
        Case "11"
            Criteria_Month = xlFilterAllDatesInPeriodNovember
        Case "12"
            Criteria_Month = xlFilterAllDatesInPeriodDecember
    End Select
    
    
'■月でフィルタリング
   
    Range("i2").AutoFilter field:=1, Criteria1:=Criteria_Month, Operator:=xlFilterDynamic
     


End Sub

 

image

Filter_Month = 7の「7」を変更すれば、8月でも9月でも抽出できます。

image

また、このようなボックスに入力して指定することもできます。

2018-08-22_10h03_34

Sub Filter5()  'インプットボックスで指定

    Dim Filter_Month
    Dim Criteria_Month
    
'■抽出したい月を指定
       
    Filter_Month = InputBox("抽出したい月を指定")
    
    
    
'■指定した月を変換
    Select Case Filter_Month
        Case "1"
            Criteria_Month = xlFilterAllDatesInPeriodJanuary
        Case "2"
            Criteria_Month = xlFilterAllDatesInPeriodFebruray
        Case "3"
            Criteria_Month = xlFilterAllDatesInPeriodMarch
        Case "4"
            Criteria_Month = xlFilterAllDatesInPeriodApril
        Case "5"
            Criteria_Month = xlFilterAllDatesInPeriodMay
        Case 6
            Criteria_Month = xlFilterAllDatesInPeriodJune
        Case "7"
            Criteria_Month = xlFilterAllDatesInPeriodJuly
        Case "8"
            Criteria_Month = xlFilterAllDatesInPeriodAugust
        Case "9"
            Criteria_Month = xlFilterAllDatesInPeriodSeptember
        Case "10"
            Criteria_Month = xlFilterAllDatesInPeriodOctober
        Case "11"
            Criteria_Month = xlFilterAllDatesInPeriodNovember
        Case "12"
            Criteria_Month = xlFilterAllDatesInPeriodDecember
    End Select
    
    
'■月でフィルタリング
   
    Range("i2").AutoFilter field:=1, Criteria1:=Criteria_Month, Operator:=xlFilterDynamic
     


End Sub

 

なお、注意すべきなのは、2月は Februaryではなく
xlFilterAllDatesInPeriodFebruray
です。
xlFilterAllDatesInPeriodFebruaryだとエラーが出ます。
ま、そんなもんだと思っていただければ。

 

 

オートフィルターで抽出する繰り返しの仕事があれば、ぜひ使ってみていただければ。

サンプルはこちらです。

EX-ITサンプル オートフィルターマクロ


【編集後記】

昨日は、本の執筆デー。
6台目のAIスピーカー、ミニオンズも届きました。
Google、Amazonとはまた違うLINEのスピーカーです。

【昨日の1日1新】
※詳細は→「1日1新」

LINE Clova minion
とある問い合わせ&取材をした

【昨日の娘日記】
Googleフォトにつくっている娘のアルバム。
娘の写真で共有したいものを、妻、それぞれの両親、伯母、妹たちも見れるようにしているものです。

このGoogleフォトのアルバム、2000枚しか入れることができず、2000枚になったら新しいアルバムをつくっています。
昨日、3つ目(3冊目?)に突入しました。1年5か月で……

  • URLをコピーしました!