VBAの勉強を始めてみた

タイトルの通りVBAの勉強を始めました。仰々しくなく、シンプルな形で効率化を図ることを目指しています。VBA以外の話題もあるよ(笑)

年度はどうして4月始まりなの?

年を越しても、3月末までは変わらない「年度」・・・。今回は、なぜか年の瀬に「年度」について、調べたり考えたりしたことをまとめてみました。ついでに、エクセルのピボットテーブルを年度単位で作るための補助的マクロを掲載しちゃいます。

目次

 

国によって違う「年度」

日本では、企業や学校など、4月1日~翌年3月31日までを一つの年度として扱うことが一般的になってますが、国によっては年度の期間が異なったりします。

公共機関における各国の「会計年度」の違いを見てみましょう。

会計年度 採用国
1月~12月 中国・韓国・フランス・ドイツなど
4月~3月 日本・イギリス・インドなど
7月~6月 フィリピン・ノルウェースウェーデンなど
10月~9月 アメリカ・ミャンマー・ハイチなど

 

日本では会計年度の期間(何月始まりにするか)を企業が自由に決められるけれど、国や地方自治体に合わせたほうが都合がいいため、企業の大半が4月始まりとしてます。

子会社が海外にある企業では、グループ内で会計年度を一緒にするため、1月始まりとしているところもあるそうですよ。

 

年度で区切るメリットはなぁに?

公共機関や企業の経営状況・収支状況を把握するためには、一定の期間を定めてその期間内の収入・支出を算出する必要がある。このために設定された期間が会計年度である。会計年度は、予算を執行するための一定期間ということもできる。会計年度が存在しない場合、予算の執行に期限がないので、決算を立てることが不可能となり、予算・決算を行うことが無意味となってしまう。会計年度は、会計上非常に重要な要素である。

引用元:Wikipedia

うーん。分かったような、分からないような感じですが、要するにどこかで区切らないと管理ができなくなってしまうということですね。例えば、20××年度に比べて、20×△年度は赤字になったとかね。

 

エイプリルフールと年度の意外な関係

日本では明治19年に現在の会計年度が始まりました。
そもそも暦年が1月から12月なのに、なんで年度は4月からにするのさ。ということでいろいろ調べてみたら、エイプリルフールと年度との意外な関連なんかが見えてきて面白いです。

会計年度が4月始まりとなった、理由は2つあるといいます。

  • 米の収穫時期に合わせた(米をお金に換え、予算編成をするのに1月では間に合わなかった)
  • 当時の先進国であるイギリスの4月始まりをならった

では、イギリスはなぜ4月始まりなの?ということで、ちょっと歴史を遡ってみます。
昔のヨーロッパは年初を3月25日としていました・・・。

  • 1752年:イギリスでグレゴリウス暦を採用し年初を3月25日から1月1日に変更。しかし、会計の区切り等々いっぺんに1月1日としてしまうと都合が悪いということで、会計期間を区切りのよい4月始まりに(←イギリスが4月始まりの理由)
  • 1564年:フランスでグレゴリウス暦を採用し年初を3月25日から1月1日に変更。しかし、それに反発した民衆が4月1日を「嘘の新年」として馬鹿騒ぎを起こす(当時は3月25日~4月1日にかけて新年のお祭りを行っていた)。馬鹿騒ぎを起こした民衆は王の逆鱗に触れ、片っ端から処刑される・・・。以後、処刑された者たちの鎮魂と、王への抗議のため、4月1日には「嘘の新年」を祝う風習が続いた・・・。

ってなことでエイプリルフールの風習が、会計年度を4月とすることに少なからず、1ミリくらいは、関連しているハズ!・・・というのは私の幼稚なこじつけです。そもそもエイプリルフールの由来は仮説ですしおすし。

 

ピボットテーブルを4月始まりの年度単位で作る

エクセル(ピボットテーブル)には4月始まりの概念がありません。なので、標準機能では4月始まりとする年度(および半期・四半期・月)のグループ分けができず、年度(半期・四半期・月)でグループ分けする際は、元データを細工するなどの一工夫が必要です。
今回のマクロを使えば、ワンクリックでピボットテーブルの元データに年度・半期・四半期・月フィールドを追加できちゃいますヽ(‘ ∇‘ )ノ
(以前、同じことをやりましたが「半期」の概念が抜けていたので、修正し再掲する形になります。以前の記事はこちら

 

マクロの使い方を簡単に説明しますね。まず、ピボットの元データとなるシートの「日付」フィールドのどこでもいいので、選択して、マクロを実行します。

f:id:kouten0430:20171230184113j:plain

 

そうしたら、自動で年度・半期・四半期・月フィールドが作成されるので、このシートを用いてピボットテーブルを作成します。

f:id:kouten0430:20171230184357j:plain

 

年度・半期・四半期・月を列にドラッグしましょう。元々あった「日付」は使わなくてもいいです。

f:id:kouten0430:20171230184549j:plain

 

こんな感じで、4月始まりの年度単位のピボットテーブルが簡単にできちゃいます。

f:id:kouten0430:20171230184734j:plain

H:Half(ハーフ)の略
Q:Quarter(クォーター)の略

 

Sub 年度半期四半期月フィールド作成()
    '日付データが入ったフィールドの1セルを選択(どれでも良い)して実行
    Dim X As Long
    Dim YS As Long
    Dim YE As Long
    
    If TypeName(ActiveCell.Value) = "Date" Then
        X = ActiveCell.Column
        YS = ActiveCell.CurrentRegion.Row
        YE = ActiveCell.CurrentRegion.Rows(ActiveCell.CurrentRegion.Rows.Count).Row

        Range(Columns(ActiveCell.Column), Columns(ActiveCell.Column + 3)).Insert xlShiftToRight, _
        xlFormatFromLeftOrAbove
    
        Cells(YS, X).Value = "年度"
        Range(Cells(YS + 1, X), Cells(YE, X)).FormulaR1C1 = _
        "=IF(RC[4]="""","""",IF(MONTH(RC[4])<=3,YEAR(RC[4])-1&""年度"",YEAR(RC[4])&""年度""))"
        
        Cells(YS, X + 1).Value = "半期"
        Range(Cells(YS + 1, X + 1), Cells(YE, X + 1)).FormulaR1C1 = _
        "=IF(RC[3]="""","""",IF(AND(MONTH(RC[3])>=4,MONTH(RC[3])<=9),""1H"",""2H""))"

        Cells(YS, X + 2).Value = "四半期"
        Range(Cells(YS + 1, X + 2), Cells(YE, X + 2)).FormulaR1C1 = _
        "=IF(RC[2]="""","""",IF(MONTH(RC[2])<=3,""4Q"",IF(MONTH(RC[2])<=6,""1Q"",IF(MONTH(RC[2])<=9,""2Q"",""3Q""))))"
    
        Cells(YS, X + 3).Value = "月"
        Range(Cells(YS + 1, X + 3), Cells(YE, X + 3)).FormulaR1C1 = _
        "=IF(RC[1]="""","""",MONTH(RC[1])&""月"")"
        
    Else
        MsgBox "日付データの入ったセルを選択して下さい"
        
    End If
End Sub

※SubからEnd Subまでをコピーし、標準モジュール等に貼り付けて使用して下さい。なお、マクロで実行した処理は「元に戻す」ことができません。実行前に一旦保存しやり直しのできる状態にしておいて下さい。標準モジュールにコードを貼り付けてマクロを使用する方法はこちら