ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと

いつも質問ばかりしてスミマセン・・・
今回は支払日付の計算について質問です。
次の様な条件で日付の表示がしたいのですが、カレンダーは月末日が月によって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ででしかできないのであればその方法が知りたいです。

宜しくお願いします。

A 回答 (2件)

「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日する
で求められます。
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/09/02 21:49

もしかしたら、そのような計算をさせる関数があるのかもしれませんが、自分で作るとしたら、日付の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
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/09/02 21:50

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す