2014年5月14日水曜日

wordのフィールドコードで月末日を表示

wordのフィールドコードで日付を表示するのは良くやりますが、
同様にフィールドコードで「今月の月末が何日なのか」表示できれば、
もっと便利。

例えば今日は平成24年5月14日ですが、「5月31日」を表示するフィールドコードが欲しくなりました。

今月、即ち「平成24年5月」までなら、簡単に作れます。
日付のフィールドコードを少し削るだけですからね。

{TIME \@ "ggge年M月"}

その前に、フィールドコード関連操作のおさらい
1.フィールドコードの作り方
  文書中にコードを書き、選択してCtrl+F9 (改行文字等を含めないように注意)
  これでフィールドコードに変換される。
  ネスト(入れ子)するときは、中のフィールドコードも個別に変換
2.編集
  右クリック又はAlt+F9でコードを表示させて編集。
  また、更新をかけて編集後の結果を反映させる。
以上

「今月1日」はコードに続けて「1日」とタイプすれば用が済みますが、
月末日はその月によって違うし、2月は閏年もあるので、そう簡単にはいきません。

excelだと簡単ですが、wordのフィールドコードはほとんど触ったことがないので、
google先生に聞きながら作ってみた。

見やすいようにコードを3行に分けてますが、実際はつなげて使えます。
wordにコピペして改行文字を消してつなげ、{}ごとにフィールドコード化すればOK。

これで今月(5月)の月末日、即ち「31」と自動で表示されるわけです。
来月になれば「30」と。なんとすばらしい。
たかが2文字を自動化させるのにこの労力w

{ set nen { time \@"yyyy" } }
{ set tuki { time \@"M" } }
=if(or(or(tuki=4 , tuki=6 ),or( tuki=9 , tuki=11)), 30 , { =if(tuki=2, { =if(or((MOD(nen , 4)=0)*(MOD(nen , 100))<>0, (MOD(nen , 400))=0), 29, 28) } , 31 ) } ) }

解説
1行目:今年が何年なのか、変数nenに格納
2行目:今月が何月なのか、変数tukiに格納
3行目:if文の入れ子になってます。
    1つめ 4,6,9,11月なら30日。そうでないなら2つめへ
    2つめ 2月なら3つめへ、そうでないなら31日。
    3つめ 閏年なら29日。そうでないなら28日。

閏年は通常4年ごとですが、100年ごとに例外的に平年。さらに400毎に例外の例外で閏年。というややこしい事になってますので、それなりに長くなってます。
・・・コード、間違ってない・・・よね。

(2月の判定を最初に持ってきた方が読みやすかったかも。)

ちゃんとgoogle先生に聞けばどこかにコードがあったかも知れないけど、
探し方が悪いのか見つからなかったので、備忘録として記録。