Excelで特定月のデータを抽出するときも、マクロ(VBA)を使うと便利です。
特定月のデータのみ抽出するオートフィルター
たとえば、次のようなデータがあり、
会計ソフトに取り込むようにデータをつくるとします。
(クラウド会計用の形式です)
このデータから7月分のデータだけを取り込むなら、7月分のみを別シートに貼り付けてCSVファイルとして保存しなければいけません。
そのときに、オートフィルター(Ctrl+Shift+L)を使います。
毎回これをやると大変なので、マクロでやってしまおうというわけです。
なお、こういったケースでは、その他次のような方法があります。
・月別にファイルをつくる→管理が煩雑になる。現金出納帳だと繰り越しの管理の手間、ミスのリスク。
・月のデータを別の列につくる。MONTH(マンス)関数を使う
・会計ソフトのデータをいったん削除して、すべてのデータを取り込む
オートフィルターのExcelマクロ
オートフィルターのマクロは、こう書きます。
Sub filter() Range("a1").AutoFilter End Sub
Range(”a1”)、つまりセルA1を起点にオートフィルターを設定するという意味です。
通常なら、
「日付」で「2018/7/2」を抽出する
といった操作をします。
これをマクロで書くと、
Sub filter() Range("a1").AutoFilter field:=1, Criteria1:="2018/7/2" End Sub
です。
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
では、「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
特定月を「先月」「今月」「来月」と指定する
オートフィルターには、[日付フィルター]から「先月」「今月」「来月」という条件を指定でき、 これをマクロで表現する方法もあります。
Sub filter2() Range("a1").AutoFilter field:=1, Criteria1:=xlFilterLastMonth, Operator:=xlFilterDynamic End Sub
Criteria1(基準)には、xlFilterLastMonth(先月)
今月だと、xlFilterThisMonth
来月だと、xlFilterNextMonth
です。
Operatorには、xlFilterDynamicを入れます。
動的フィルターという意味ですが、まあそんなもんだと気にしなくても大丈夫です。
データを取り込むときに、通常は先月のデータを処理するはずで、そう決まっているなら、この方法でシンプルに処理できます。
私の場合、毎月1日(土日祝の場合は翌営業日)に経理処理をすると決めているので、この方法です。
抽出する月を指定する
先月、今月、来月だと、指定があいまいです。
その処理をした日によって指定する月がかわります。
特定月を指定したいときには、次のように書きましょう。
Sub Filter3() Range("i2").AutoFilter field:=1, Criteria1:=xlFilterAllDatesInPeriodJuly, Operator:=xlFilterDynamic End Sub
Criteria1(基準)には、xlFilterAllDatesInPeriodJulyです。
7月なので、July。
ここを変えれば、どの月でも抽出できます。
つづりを間違えたら……と思うかもしれません。
そんなときのために小文字で入力しましょう。
小文字で入力して、間違っていれば、小文字のままです。
会っていれば、Julyと最初のjがJに変わります。
適当に打っておき、間違えたら修正するというスタンスでかまいません。
私はそうです。
ただ、毎回、この英単語を変更するのも大変です。
このパターンもマクロに組み込み、月を変更したらいいようにもできます。
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
Filter_Month = 7の「7」を変更すれば、8月でも9月でも抽出できます。
また、このようなボックスに入力して指定することもできます。
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だとエラーが出ます。
ま、そんなもんだと思っていただければ。
オートフィルターで抽出する繰り返しの仕事があれば、ぜひ使ってみていただければ。
サンプルはこちらです。
昨日は、本の執筆デー。
6台目のAIスピーカー、ミニオンズも届きました。
Google、Amazonとはまた違うLINEのスピーカーです。
【昨日の1日1新】
※詳細は→「1日1新」
LINE Clova minion
とある問い合わせ&取材をした
【昨日の娘日記】
Googleフォトにつくっている娘のアルバム。
娘の写真で共有したいものを、妻、それぞれの両親、伯母、妹たちも見れるようにしているものです。
このGoogleフォトのアルバム、2000枚しか入れることができず、2000枚になったら新しいアルバムをつくっています。
昨日、3つ目(3冊目?)に突入しました。1年5か月で……
■著書
『税理士のためのプログラミング -ChatGPTで知識ゼロから始める本-』
『すべてをがんばりすぎなくてもいい!顧問先の満足度を高める税理士業務の見極め方』
ひとり税理士のギモンに答える128問128答
【インボイス対応版】ひとり社長の経理の基本
「繁忙期」でもやりたいことを諦めない! 税理士のための業務効率化マニュアル
ひとり税理士の自宅仕事術
リモート経理完全マニュアル――小さな会社にお金を残す87のノウハウ
ひとり税理士のセーフティネットとリスクマネジメント
税理士のためのRPA入門~一歩踏み出せば変えられる!業務効率化の方法~
やってはいけないExcel――「やってはいけない」がわかると「Excelの正解」がわかる
AI時代のひとり税理士
新版 そのまま使える 経理&会計のためのExcel入門
フリーランスとひとり社長のための 経理をエクセルでトコトン楽にする本
新版 ひとり社長の経理の基本
『ひとり税理士の仕事術』
『フリーランスのための一生仕事に困らない本』
【監修】十人十色の「ひとり税理士」という生き方