• ベストアンサー

Accessでの支払日の計算方法

いつも質問ばかりしてスミマセン・・・ 今回は支払日付の計算について質問です。 次の様な条件で日付の表示がしたいのですが、カレンダーは月末日が月によって30日や31日2月は28日うるう年には29と末日に変動がありますよね? その為、Accessのdateadd関数では日にちが狂ってしまうのです。 条 件:取引会社ごとに支払日が決まっています月末に締    めて30日後、40日後、50日後といった風に5日にち毎に支払日となります。     例)2/28締め40日後→4/10支払日と計算させたいのですが、dateadd関数で単純に計算すると4/9となってしまいます。これが60日後であれば本来は4/30としたいのですが、4/28となります。 AccessのVBAは使った事はないのですが、(Excelはあります)VBAででしかできないのであればその方法が知りたいです。 宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

「2/28締め40日後→4/10支払日」 というのは、正確に言うと 「翌々月の10日支払日」ということですよね? (1)「n日後」のnを30で割る。 (2-1) あまり=0の場合 支払日=締め日の月+[ (1) の商] の月末 (2-2) あまり≠0の場合 支払日=締め日の月+[ (1) の商]+1の月、[あまり]日 という関数を作成すればいいんじゃないでしょうか。 Year関数、Month関数、TimeSerial関数などを使用すればできると思います。 あと、月末の求め方ですが、 (1) 月を+1、日を1とする。(TimeSerialなどを使用する。) (2) (1)の日付を DateAdd で-1日する で求められます。

pafume
質問者

お礼

回答ありがとうございました。 お二方ともすごいなーと本当に思いました。 お知恵を拝借してがんばってみます。

その他の回答 (1)

noname#27115
noname#27115
回答No.2

もしかしたら、そのような計算をさせる関数があるのかもしれませんが、自分で作るとしたら、日付のDAYの部分を5で割ってその余りをDAYの部分に足すという方法なるんじゃないでしょうか? ちょっと、ローテクですが、、作ってみました。 myDate に 2003/04/06 とはいると getDate に 2003/04/10 と返ると思います。 すべての条件を満たしているかはわかりません。 Function getDate(myDate As String) As String Dim strTmp(2) As String Dim lngTmp As Long strTmp(0) = Format(myDate, "yyyy/mm/dd") strTmp(1) = (Mid(strTmp(0), 9, 2)) strTmp(2) = (Mid(strTmp(0), 1, 8)) lngTmp = Val(strTmp(1)) Mod 5 If 0 <> lngTmp Then getDate = strTmp(2) & Format((Val(strTmp(1) + (5 - lngTmp))), "00") Else getDate = strTmp(0) End If End Function

pafume
質問者

お礼

回答ありがとうございました。 お二方ともすごいなーと本当に思いました。 VBAはあまり使った事はないのですが、頑張ってみます。

関連するQ&A