締日は普通、情報は日付のみでは?
請求日 | 支払い条件1(20日締め翌月末) | 支払い条件2(末締め翌月末) | ||
締日 | 支払日 | 締日 | 支払日 | |
2021/1/20 | 2021/1/20 | 2021/2/28 | 2021/1/31 | 2021/2/28 |
2021/1/21 | 2021/2/20 | 2021/3/31 | 2021/1/31 | 2021/2/28 |
支払条件には月の区切りとする日(締日)と、支払いに関する日付(担当者が入金処理をする日)の2つの日付の情報が含まれるものです(支払いの方法(現金、手形等)も記述されるものですが今回は省略)
例外としては
前払い(初回取引のためだったり)
請求後30日(「締日」を定めない。日本の企業ではまずない)
なんかもありますね
さておき、「1か月後末日」では何を計算したいのかわかりません。「締日」の月が変わるのは「請求日」と「締日」の関係からであって、「1か月」という情報は関係ありません。記述の仕方からすると「締日」に関する情報が不足のようにみえます
支払日を求めたいのであっても、上記のように「締日」の条件で月が変わるため情報不足です
いずれにせよhatenaさん指摘のようにデータベース上では計算しやすい数値としてフィールドに分けて保存するのが基本で、
締日日(末締めは0)
支払月間
支払日日(末日は0)
の3つのフィールドを持つといいでしょう
締日: DateSerial(Year([請求日]),Month([請求日])+IIf(Day([請求日])>[締日日],1,0),[締日日])
支払日: DateSerial(Year([締日]),Month([締日])+[支払月間]+IIf([支払日日]=0,1,0),[支払日日])
Trueの扱いについて
hatenaさんの式の-([締日日]=0)
は面白いなぁと思います。hirotonの式では+IIf([支払日日]=0,1,0)
と記述しました。どちらも同じ結果になるのでどちらでもいいです。ただし、ACCESSなら
こんぴゅうたぁのはなし になるのですが、ACCESSで適当なフォームを作り、テキストボックスを配置してコントロールソースを=Date()+True
とします。つぎに、Excelを立ち上げて適当なセルに=TODAY()+TRUE
としてみます。結果はご覧あれ
テクニックとしてどこまで許容するかという話になるんですが、真偽値をそのまま計算に使うのは上記のようにそれなりの知識が必要になるのでオススメしません