会計年度、事務年度
Financial Year degree, Business Year dgree
と英語でもあるように、1年の期間を1月から12月までとしない場合があります
これを計算する方法です。
考え方自体はずっと前に知ったのですが、だいたい整理できたのでまとめておきます。
考え方
日本の年度は4月からはじまり、3月に終わります。
年を求めるのはYear()
ですが、1月から3月までは1年多くなります。
なので1月から3月は1つ少なくなります。
そこでIFを使いたくなるのですが、使いません。
その代わり、「TrueとFalseの値」を使います。
VBA,VBSとExcelのTrue
ところで、VBAとVBS、そしてExcelのワークシート関数には今回2つの違いがあります。
それはExcelのワークシート上ではTrueは1でありVBAとVBScriptは-1であるということです。
これを言い方を変えると、0がFalseでそれ以外はTrueとされています。
これはどういう言語でも同じのようですね。
4月はじまり令和版 VBA VBS
令和年度※令和のみ対応
Year(Date) + ((month(Date)<4)*1) -2018
西暦年度
Year(Date) + ((month(Date)<4)*1)
この式の中に不等号を入れるというのはプログラムならではではないでしょうか。
*1
はお守りみたいなもので、あんたTrueとか言っているけどbooleanじゃなくてLongになあれっておまじないです。
VBAの場合はDateの代わりにNow関数を使ってもいいです。
4月はじまり令和版 Excel
Excelは1です。なので符号を変えるため-1
を掛けます。
もっというと、絶対値にすればいいので、こうなります。
Worksheet上で年度を求める
=YEAR(TODAY())+(ABS(MONTH(TODAY())<4)*-1)
VBA、VBSではTODAY()
関数をDateやNowに変えます。
年度関数の法則
上記の式は<4
という部分があります。
そう、例えば7月始まりの6月終わりであれば、4を7に変えるといいわけです。
Excelのワークシート
=YEAR(TODAY())+(ABS(MONTH(TODAY())<7)*-1) - 2018
=YEAR(TODAY())+(ABS(MONTH(TODAY())<7)*-1)
VBA、VBS
=YEAR(DATE)+(ABS(MONTH(DATE)<7)*-1) - 2018
=YEAR(DATE)+(ABS(MONTH(DATE)<7)*-1)
つまり、始まりの月を入れればいいということです。