質問: year(date) & "/12/16" end if debug.print "誕生日まであと" & nextbirthday - date; "日です。" end sub みたいなことがしたいです。 まだ今年の誕生日が来てないならバージョンともう今年の誕生日が来てしまったら 次の誕生日まであと何日かバージョンを作りたいのですがどうすればいいのかわかりません
回答: 考え方を整理する上でのアドバイスとして、参考までに少々。 質問文を見る限り、 「今年の誕生日が来ているか来ていないか」 この二択を想定されているようですね。 それであれば、流れとしては if 今年の誕生日が来ている then 来ている時の処理 else 来ていない時の処理 end if これで十分です。 「今年の誕生日が来ている」がtrueなら、来ている時の処理が走ります。 「今年の誕生日が来ていない」なら、「今年の誕生日が来ている」がfalse、 つまり、elseの「来ていない時の処理」に回ってくれます。 なのでここに頑張ってelseifを使う必要は特にありません。 (わかりやすいですけどね) さてさて、では日本語をどう置き換えていきます。 dateserial(年,月,日)で「年月日」を返してくれますので、 「今年の誕生日」は dateserial(year(date),月,日) と表現できます。月・日には任意の数字をいれてくださいませ。 year・dateに関しては解説不要ですね。 「今年の誕生日(指定日)が来ている」という事は、 「今年の誕生日が、今日より前(小さい)」という事ですから、 if 今日の誕生日 < date then と書けます。 以上の二つがわかれば、あとは組み合わせていきましょう。 つまり、 sub test() dim nextbirthday as date, thisbirthday as date thisbirthday = dateserial(year(date), 12, 11) if thisbirthday < date then nextbirthday = dateadd("yyyy", 1, thisbirthday) else nextbirthday = thisbirthday end if debug.print "誕生日まであと" & nextbirthday - date & "日です。" end sub 誕生日をいちいち指定するのが面倒ですので、 変数thisbirthdayを用意し、今年の誕生日を代入しています。 dateadd関数は別途お調べいただきたいのですが、 ここでは「1年後の誕生日」を計算するのに使っています。 ここまでが、質問に対する直接の回答となるでしょう。 ここから先は趣味のお話です。 なんせ趣味や好みの問題ですから、私はあえてifだけで頑張ってみてます。 何を付け加えたか、どうなったか、は読み取ってみてくださいね。 sub test() dim nextbirthday as date, thisbirthday as date thisbirthday = dateserial(year(date), 12, 16) if thisbirthday = date then debug.print "今日が誕生日です!!" else if thisbirthday < date then nextbirthday = dateadd("yyyy", 1, thisbirthday) else nextbirthday = thisbirthday end if debug.print "誕生日まであと" & nextbirthday - date & "日です。" end if end sub