0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

VBAやVBScript,Excelで今日が何年度かを求める式 Year dgree function

Posted at

会計年度、事務年度

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)

つまり、始まりの月を入れればいいということです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?