月末日付を自動的に出したい

★★:まあある

請求書などで特によくある話として、締日を月末日付にしたいことがあると思います。そんな時はSVFに用意されている関数を使用することで、入力した値を月末日付に変換してから印字することができます。月末日付に変換するための関数を編集式に設定するところが今回のポイントになります。注意点として、入力される日付の形式がYYYYMMDD(例:20170301)である必要があります。もし区切り文字「/」や「年・月・日」が入っている場合はLEFT関数やMID関数、RIGHT関数などを使用し、YYYYMMDDの形式に変換してから試してみてください。



まず、月末日付に変換したいフィールド(ここでは締め日というフィールド名)をクリックし、プロパティウィンドウを開きます。

プロパティウインドウで、[編集式]の右部に鉛筆アイコンがありますのでクリックします。


編集式ウインドウが表示されますので、
ADATE(LEFT(STR(ADATE(LEFT(YMD,6)+"01",32)),8)+"01",-1)

と入力します。本記事からのコピー&ペーストでOKです。
この式ではその月の「1日」+32日をし、翌月を求めて、翌月1日から1日引いています。なのでうるう年も取得可能です。YMDは日付が入っているダミーフィールドになりますのでコピー&ペースト後に、冒頭で説明したYYYYMMDD形式の日付型フィールドに置き換えを行います。

この記事を書いているとき、となりの同僚に「土日はどうするの?」と聞かれたので土日を考慮する版も作ってみました。IF(CDOW(ADATE(LEFT(STR(ADATE(LEFT(YMD,6)+"01",32)),8)+"01",-1)) = "日", DTOC(ADATE(LEFT(STR(ADATE(LEFT(YMD,6)+"01",32)),8)+"01",-3)), IF(CDOW(ADATE(LEFT(STR(ADATE(LEFT(YMD,6)+"01",32)),8)+"01",-1)) = "土", DTOC(ADATE(LEFT(STR(ADATE(LEFT(YMD,6)+"01",32)),8)+"01",-2)), DTOC(ADATE(LEFT(STR(ADATE(LEFT(YMD,6)+"01",32)),8)+"01",-1))))

月末日付が土曜日だった場合にはさらに1日、日曜日だった場合にはさらに2日引いているため、このように長い式になっています。

土日を考慮する版としない版、どちらか使いたい方を選んでコピー&ペーストすればOKです。


コピー&ペーストで入力した[YMD]の箇所を実際のフィールド名に置き換えます。[YMD]の箇所はすべて同じフィールド名に置き換えてください。置き換えが終了したら[OK]を押して編集式のウィンドウを閉じてください。




テスト印刷して、下記のように月末日付で表示されていれば完了です。


もしうまく表示されない場合は、入力元の日付フォーマットを確認してみてください。
繰り返しになりますが、今回の関数を用いて変換するためには、20170301のような入力データである必要があります。ちなみにデータを入力する代わりに印字日(システム日付)を使用したい場合は上記のYMDの箇所をDATE()にしていただくことでシステム日付の月末日付を印字することもできますので試してみてくださいね。

お役に立てたでしょうか。
今後も様々な関数を利用した帳票設計ノウハウをご紹介していきたいと思いますのでお楽しみに。

Topに戻る

フリーワード検索