SSブログ

Word で自動的に過去または未来の日付を表示する方法 [Word]

Word 文書を開いたときに、表示する日付を現在の日付の何日前、何日後という日付で表示する方法です。

Word文書に日付や時刻を挿入する方法には、
(1) [挿入]タブ > テキストの[日付と時刻]で挿入する。
(2) [挿入]タブ > テキストの[クイックパーツ] > [フィールド]で、DateまたはTimeフィールドで挿入する。
(3) 「平成」または「2016年」と入力・変換して、[Enter]で表示される日付を入力する。
などの方法があります。
これらについては、最後の関連する記事などを参考にしてください。

(1)、(2)はフィールドコードで入力されるので、表示日付・時刻を自動更新することができます。
(3)は文字列として入力されるので、自動更新はされない日付になります。
これらの方法で作成の日付は、自動更新可能な日付は文書を開いた日、文字列で入力した日付は作成した日付が表示されます。
現在の日付から何日前や何日後などのように、過去や未来の日付に自動更新して表示することができません。

どのようにすれば、過去や未来の日付を自動で表示するようにすることができるのでしょう。
探してみるフィールドコードで表示する方法が見つかりました。
Insert a date other than today's date

上記で紹介されているフィールドコード内容は以下の通りで、英語版なので日付は英語(西暦)表示で10日後の日付を自動表示する例となっています。

{ QUOTE
{ SET Delay 10 }
{ SET a { =INT((14-{ DATE \@ M })/12) } }
{ SET b { ={ DATE \@ yyyy }+4800-a } }
{ SET c { ={ DATE \@ M }+12*a-3 } }
{ SET d { DATE \@ d } }
{ SET jd { =d+INT((153*c+2)/5)+365*b+INT(b/4)- INT(b/100)+INT(b/400)-32045+Delay } }
{ SET e { =INT((4*(jd+32044)+3)/146097) } }
{ SET f { =jd+32044-INT(146097*e/4) } }
{ SET g { =INT((4*f+3)/1461) } }
{ SET h { =f-INT(1461*g/4) } }
{ SET i { =INT((5*h+2)/153) } }
{ SET dd { =h-INT((153*i+2)/5)+1 } }
{ SET mm { =i+3-12*INT(i/10) } }
{ SET yy { =100*e+g-4800+INT(i/10) } }
"{ dd }-{ mm }-{ yy }" \@ " dddd, d MMMM yyyy " }

注) { } はフィールドコードを示す記号で、Ctrl+F9 を押したときに表示される記号です。
QUOTEフィールド: 指定した文字列を挿入します
SETフィールド : ブックマークに新しいブックマーク名を定義します

数値の説明 (ユリウス通日を利用して、グレゴリオ歴に換算しています)
  14 : 1月を前年の13月、22月を前年の14月としているため
4800 : グレゴリオ歴の起点を紀元前4801年3月1日正午、計算上-4800としているため。
 153 : 5ヶ月間の日数で、周期の単位なので、5で徐している。
 365 : ローマ歴の1年の日数で365日
   4 : 閏年を考慮した4年の日数(1,461日)
 100 : 閏年を考慮した100年の日数(36,524日)でグレゴリオ暦の1世紀、
 400 : 閏年を考慮した400年の日数(146,097日)
32044: ユリウス通日の起算日とグレゴリオ暦の起点日との日数差のこと。
グレゴリオ歴の起点日: 紀元前4801年 3月 1日正午
ユリウス歴の起点日 : 紀元前4714年11月22日正午

現在より手前(過去)の日付を自動表示するには、{ SET Delay n } の部分の数字を変更します。
(例) { SET Delay -1 } ・・・ 1日前

n の数字の意味
正 : n日後
ゼロ: 今日
負 : n日前

和暦の表示とするには、日付の書式の部分を変更します。
"{ dd }-{ mm }-{ yy }" \@ "ggge年M月d日(aaa)" }

フィールドコードと通常の表示/非表示の切り替えは、Alt + F9 を押します
変更後、通常表示で F9 を押し、フィールドを更新します。
日付の表示が西暦から和暦表示に変わります。

-----
上記の内容を試してみましたが、月の変わり目付近で日付の表示がおかしくなります。
3月31日に4月の日付を表示したような場合、Delay が12以下では月日が入れ替わったように表示されてしまいます。
例えば、SET Delay 1 とすると2017年4月1日ではなく 2017年1月4日となります。
Delay 13 以上で正常に戻りますが、31以降でまたおかしくなります。

閏年を含めた日数計算あたりに原因がありそうですが、フィールドコード記述が長いので、
・ブックマークを追加して、マクロで日付を挿入する
・オブジェクトで Excel ワークシートを挿入して、TODAY関数を使って日付を挿入する
など、別の手段で表示するようにしたほうが簡単にできそうです。

ブックマークに日付を追加して、マクロで日付を表示する
日付を表示したい位置で、[挿入] > リンク > ブックマークを選択して、ブックマーク名を追加しておきます。
[開発] タブの [Visual Basic] で標準モジュールにマクロを作成します。

Sub ブックマーク用日付()
   'ブックマークの位置に日付を挿入します
   Dim PDate As String
   PDate = DateAdd("d", 1, Date)
   PDate = Format(PDate, "ggge年M月d日")
   ActiveDocument.Bookmarks("日付").Range.Text = PDate
End Sub

・DateAdd の引数の数字で、表示する日付(何日前、何日後)を変更できます。
・("日付") は、ブックマークに追加したブックマーク名です。
・Wordでマクロを実行すると指定の日付が表示されます。(必要に応じスタート時に実行する)
・ファイルの保存は、マクロ有効文書(*.docm) で保存と、オプションのセキュリティセンターの設定でマクロの実行を許可します。

Excel ワークシートオブジェクトを挿入して、日付を表示する
[挿入]タブ > テキストグループの [オブジェクト] > オブジェクト > Microsoft Excel WorkSheet を挿入します。
A1セルに =TEXT(TODAY()+1,"ggge年m月d日") のように入力することで、日付を表示できます。
ワークシートオブジェクトの大きさは、必要部分のみ表示されるようにサイズを変更します。

関連する記事
現在の日付および時刻を挿入する方法
自動的に更新される日付や時刻を挿入
Word 2010 でフィールド コードを挿入、書式を設定する


nice!(2)  コメント(1)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 2

コメント 1

かざ

月日が入れ替わるのはロケール設定の問題と思われます。
月が13以上になるとwordが察して直しているだけで、そもそも月日は逆にパースされているようです。
{ mm }-{ dd }-{ yy }にすれば直るかもしれません。
by かざ (2019-06-05 16:46) 

コメントを書く

お名前:[必須]
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0