t-hom’s diary

主にVBAネタを扱っているブログ…とも言えなくなってきたこの頃。

Wordのフィールドコードで先月を表示させる

業務で利用する手順書にSQLが書かれているが、実行する際にyyyyMMの部分を先月の値に書き換えなければならない。

select * from test_tbl where code like 'yyyyMM%'

実際に使用するSQLはもっと複雑で、編集箇所も多いので非常に面倒くさい。

Excelなら関数で余裕で出来るが、手順書はWordだし、そこだけ埋め込みにするとか、マクロで対処するというのも大げさな気がするので、Wordだけでやってみた。

Wordにはフィールドという機能があり、手入力でコードを入れることも出来る。

入力したい場所にカーソルを合わせ、Ctrl+F9を押すと、{ }が入力される。
たとえば{ = 1 + 1 }と入力してみよう。
なみ括弧はキーボードで直接入力してもダメで、Ctrl+F9で作成する必要がある。

そして式が完成したら、フィールドコード全体を選択して、一度F9で更新する。
見た目に何も変わらないかもしれないが、内部で計算されている。
それから全体選択したまま、Alt+F9を押すと、結果の2が表示される。
それ以降は、全選択してF9を押す度にフィールドが更新される。
コードを編集したいと思ったら、もう一度Alt+F9を押せば良い。

次に当月の値をyyyyMM形式で表示させてみよう。
次のように入力し、F9で更新した後、Alt+F9を押すと、当月の値が表示される。

{ DATE \@ "yyyyMM" }

このyyyyMMは書式指定なので、このまま入力すれば良い。MMは大文字にしないとMonthにならないので注意。

次は前月の値であるが、これは12月と1月の境目があるので難しい。
ここでIF文の出番。書式は次のようになる。
{ IF 条件 成立するときの値 成立しないときの値 }

ひとまず年度は考慮せずに次のように入力する。

{ IF { DATE \@ "M" } = 1 "12" { = { DATE \@ "M" } -1 } }

このとき、内側のなみ括弧もCtrl+F9で作成する必要があるので注意。

これで1月なら12、それ以外なら今月-1を表示させる。
だんだん式がややこしくなるので、この時点で整形してしまう。

{ IF { DATE \@ "M" } = 1
    "12"
    { DATE \@ "M" } -1}
}

このように複数行にしても、表示させる時は問題ない。

次に年も考慮し、さらに月を2桁で表示させる。

{ IF { DATE \@ "M" } = 1
    { QUOTE { = { DATE \@ "YYYY" } -1 } "12" }
    { QUOTE { DATE \@ "YYYY" } { DATE \@ "M" } -1 \# "00" } }
}

QUOTEは、複数項(年と月)をつなげて表示させるための文である。

さらに、次のように変数に入れて別の場所で参照させることも出来る。

{SET SENGETSU
    { IF { DATE \@ "M" } = 1
        { QUOTE { = { DATE \@ "YYYY" } -1 } "12" }
        { QUOTE { DATE \@ "YYYY" } { DATE \@ "M" } -1 \# "00" } }
    }
}

select * from test_tbl where code like '{ QUOTE { SENGETSU} }'

フィールドはいちいち全選択して更新するのが面倒であるが、マクロでドキュメントを開いた時に更新させる等の工夫で使い勝手はなんとでもなる。

このように色々な計算式を含めることができるので使いこなすと大変便利であるが、なにしろ文献が少ないのがネックである。英語情報は割と充実しているので興味がある方は調べてみると良いかもしれない。

当ブログは、amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、 Amazonアソシエイト・プログラムの参加者です。