LoginSignup
0
0

More than 5 years have passed since last update.

Word 2013以降で新元号に対応するにはかっこ悪いけど日付CCでdocx形式で保存しよう

Last updated at Posted at 2018-07-15

Docx形式でWordの文書を保存する理由

日付選択コンテンツコンツロールがdoc形式では使えないため。
word2010でも使えますが境界色を設定しない方がよいかもしれません。
補足:またDocx形式でも互換モードの時は使えません。互換モードを解除する必要があります。互換モードは日付選択コンテンツコントロール(以下、「日付CC」と略す。)のほかWord 2010・2013でオブジェクトの選択と表示がグレーアウトして選択できないなど制約がある。解除方法はこちらを参照すること。新拡張子なのに互換モードと表示される

新元号に対応する方法

Word2016は新元号に対応する準備がされている。
このため、日付を日付CCで入力し、docxもしくはdocmで保存する(互換モードではないこと)。
このようにしておくとWordの更新で新しい元号に自動的に設定される。
Word2013は更新されるか不明だが、いざというときは西暦4桁表示に変換できる。

手動で挿入

よねさんのword&Excel講座 Word2010 日付選択コンテントコントロールの使い方
開発タブを表示する必要がある。
またWord2013で微妙に改善されている。Word におけるコンテンツ コントロール
Word 2013 におけるコンテンツ コントロールの改善
Word 2013 では、コンテンツ コントロールに 3 つの主要な改善が加えられました。すなわち、視覚化の改善、リッチ テキスト コンテンツ コントロールの XML マッピングのサポート、新しい繰り返しコンテンツ用のコンテンツ コントロールです。
視覚化の改善
Word 2013 では、次の 3 つのうちのいずれかの状態で個々のコンテンツ コントロールを表示できます。
境界ボックス
開始/終了タグ
なし
そして境界ボックスの時、Word2013以降はフォーカスがない限り視覚化されなくなった。

VBA

とりあえずInputBoxで今日の日付を登録できるようにした。
Tagは編集中は見えないが、和暦の表示形式を示している。
これは西暦表示に変換するときに検索で使用できる

Sub InsertDateCC()
'For Word 2013 Later

'For Word 2013 Later

Dim wDoc As Word.Document: Set wDoc = ThisDocument
Dim wRng As Word.Range
Dim wdContentCtrl As ContentControl
Dim DT As Date
Dim buf As String

On Error GoTo Terminator
buf = InputBox("日付を入力してください", "日付挿入", Date)
If IsDate(buf) = False Then GoTo Terminator
DT = CDate(buf)
Set wRng = Selection.Range
Set wdContentCtrl = wRng.ContentControls.Add(wdContentControlDate) '[WdContentControlType 列挙 (Word)](https://msdn.microsoft.com/ja-jp/vba/word-vba/articles/wdcontentcontroltype-enumeration-word)
'Const wdContentControlDate = 6
With wdContentCtrl
'.PlaceholderText = DT
 .Tag = "CC_Date_Jpn_ggge_m_d_aaa" 'Titleと違い、編集中は表示されないが、Wordに格納されている。
 .Color = wdColorAqua '境界色
 .MultiLine = True '複数行が可能。ただしテキストとリッチテキストにしか有効ではない
 .Title = "Date" & Format(DT, "yyyymmdd") 'ここの月は小文字でよい
 .Range.Text = DT
 '.DateCalendarType = wdCalendarWestern 'グレゴリオ暦 0 [WdCalendarType 列挙 (Word)](https://msdn.microsoft.com/ja-jp/vba/word-vba/articles/wdcalendartype-enumeration-word?f=255&MSPPError=-2147217396)
 .DateDisplayFormat = "ggge年M月d日(aaa)"
 .LockContentControl = False 'True:delete Unable コンテンツコントロール削除不可
 .LockContents = False 'True : Modify contents value unable 値変更不可
End With
Exit Sub
Terminator:
MsgBox buf & "は日付と解釈できません"
End Sub

和暦から西暦(yyyy/M/d)

wdoc.contentcontrolsで集合になっているので、Tagで絞り込むか表示形式で絞り込んで表示形式を変更する


Sub TranspherDateCC_JpnFormatToyyyyMMdd()
'For Word 2013 Later
Dim wDoc As Word.Document: Set wDoc = ThisDocument
Dim wRng As Word.Range
Dim wdCC As ContentControl, wdCCs As ContentControls
Dim DT As Date
Dim buf As String
Set wdCCs = wDoc.ContentControls
For Each wdCC In wdCCs
If wdCC.DateDisplayFormat = "ggge年M月d日(aaa)" Then ’ここの月は大文字のM
'If wdCC.DateDisplayFormat = "ggge年M月d日(aaa)" And wdCC.Tag = "CC_Date_Jpn_ggge_m_d_aaa" Then
'タイトルやTagをつけておくと、変更するべき日付CCを絞り込むことができる。
wdCC.DateDisplayFormat = "yyyy/MM/dd"
wdCC.Tag = ""
wdCC.Tag = "DateyyyyMMdd"
End If
Next wdCC
End Sub

西暦から和暦曜日付き

Sub TranspherDateCC_yyyyMMddtoJpnDateFmtgggeMdaaa()
Dim wDoc As Word.Document: Set wDoc = ThisDocument
Dim wRng As Word.Range
Dim wdCC As ContentControl, wdCCs As ContentControls
Dim DT As Date
Dim buf As String
Set wdCCs = wDoc.ContentControls
For Each wdCC In wdCCs
If wdCC.DateDisplayFormat = "yyyy/MM/dd" Then
wdCC.DateDisplayFormat = "ggge年M月d日(aaa)"
wdCC.Tag = ""
wdCC.Tag = "CC_Date_Jpn_ggge_m_d_aaa"
End If
Next wdCC
End Sub

Word2016は新元号対応準備中(かっこ悪いけど)

日付コンテンツコンツロールで日付の表示形式をggge年M月d日で、日付を2019年5月1日以降にすると??1年M月d日と表示されます。
image.png

上記のマクロはアドインかNormalのテンプレートに

アドインをお勧めします。
保存するファイルはDocx形式になりマクロがつきません。
この日付CCはマクロではないし、フォームでもないのです。

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