• ベストアンサー

日付の加算方法 AddDate関数?

皆様、こんにちは。VB初心者のMALと申します。 当方VB5.0を使用しています。 以下のような事にチャレンジしておりますが、壁に当たっております。 フォーム上にはコンボボックスが3つ。 ラベルが3つ。 コマンドボタンが1つ。 年、月、日をそれぞれコンボボックスから入力。 コマンドボタンを押すと、その日より13日後、29日後、89日後の値を、それぞれラベルに表示。 とても初歩なのだろうとは思いますが、何卒宜しくお願い致します。

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

#2です。お礼の部分に答えて、 Private Sub cmdstart_Click() Dim addYear As Integer Dim addMonth As Integer Dim addDay As Integer Dim addDate As Date addYear = 2003 addMonth = 2 addDay = 25 ' CmbYear.Text = Val(addYear) ' CmbMonth.Text = Val(addMonth) ' CmbDay.Text = Val(addDay) addDate = DateSerial(addYear, addMonth, addDay) Label1.Caption = Str(addDate + 13) ' lblafter30.Caption = Str(addDate + 29) ' lblafter90.Caption = Str(addDate + 89) End Sub で動きました。 addYearなどをIntegerで定義して、Valするのはおかしい。 ValしたものをTextにセットするのもおかしい。 上記で13日後はlabel1.Captionに03/03/10が表示しました。だから足し算で13日後が求められるのは正しいでしょう。

MAL
質問者

お礼

>ValしたものをTextにセットするのもおかしい。 ここで、右辺と左辺を勘違いしてしまっていたようでした^^; 一日置いて、見直すと気がついたりするものですね。 有り難う御座いました。

その他の回答 (3)

noname#4564
noname#4564
回答No.3

Private Sub cmdstart_Click() Dim addYear As Integer Dim addMonth As Integer Dim addDay As Integer Dim addDate As Date CmbYear.Text = Val(addYear) CmbMonth.Text = Val(addMonth) CmbDay.Text = Val(addDay) addDate = DateSerial(addYear, addMonth, addDay) lblafter14.Caption = Str(addDate + 13) lblafter30.Caption = Str(addDate + 29) lblafter90.Caption = Str(addDate + 89) End Sub ↑ どこで値が代入されているのですか? ヒントだけ出しますので、後はご自分で考えましょう。 Private Sub cmdstart_Click() Dim addYear As Integer Dim addMonth As Integer Dim addDay As Integer Dim addDate As Date Call MsgBox("addYear, addMonth, addDay → " & CStr(addYear) & ", " & CStr(addMonth) & ", " & CStr(addDay)) Debug.Print "addYear, addMonth, addDay → " & CStr(addYear) & ", " & CStr(addMonth) & ", " & CStr(addDay) CmbYear.Text = Val(addYear) CmbMonth.Text = Val(addMonth) CmbDay.Text = Val(addDay) Call MsgBox("addYear, addMonth, addDay → " & CStr(addYear) & ", " & CStr(addMonth) & ", " & CStr(addDay)) Debug.Print "addYear, addMonth, addDay → " & CStr(addYear) & ", " & CStr(addMonth) & ", " & CStr(addDay) addDate = DateSerial(addYear, addMonth, addDay) Call MsgBox("addYear, addMonth, addDay → " & CStr(addYear) & ", " & CStr(addMonth) & ", " & CStr(addDay)) Debug.Print "addYear, addMonth, addDay → " & CStr(addYear) & ", " & CStr(addMonth) & ", " & CStr(addDay) Call MsgBox("DateSerial(addYear, addMonth, addDay) → " & CStr(DateSerial(addYear, addMonth, addDay))) Debug.Print "DateSerial(addYear, addMonth, addDay) → " & CStr(DateSerial(addYear, addMonth, addDay)) Call MsgBox("addDate = " & CStr(addDate)) Debug.Print "addDate = " & CStr(addDate) lblafter14.Caption = Str(addDate + 13) lblafter30.Caption = Str(addDate + 29) lblafter90.Caption = Str(addDate + 89) Call MsgBox("addYear, addMonth, addDay → " & CStr(addYear) & ", " & CStr(addMonth) & ", " & CStr(addDay)) Debug.Print "addYear, addMonth, addDay → " & CStr(addYear) & ", " & CStr(addMonth) & ", " & CStr(addDay) Call MsgBox("DateSerial(addYear, addMonth, addDay) → " & CStr(DateSerial(addYear, addMonth, addDay))) Debug.Print "DateSerial(addYear, addMonth, addDay) → " & CStr(DateSerial(addYear, addMonth, addDay)) Call MsgBox("addDate = " & CStr(addDate)) Debug.Print "addDate = " & CStr(addDate) End Sub

MAL
質問者

お礼

>どこで値が代入されているのですか? このセリフで、右辺と左辺の間違いにやっと気がつきました。 一生懸命、関数の使い方についてヘルプや参考書を見ていました。 一日、日を置いて見直すと案外気がつくものですね^^; 有り難う御座いました。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

Sub test01() d = DateSerial(2003, 2, 25) MsgBox d d = d + 10 MsgBox d End Sub を標準モジュールで実行して見てください。 感じを掴んだ後に コンボボックス3つで上記2003、2、25をストリングで得てください。yy、mm、ddとします。 Dateserial関数Dateserial(yy,mm,dd)で日付けシリアル値になります。あとx日後(前)を求めるのは単に足し算 d+x で求められます。 Sub test01() d = DateSerial("2003", "2", "25") MsgBox d d = d + 10 MsgBox d End Sub でも上手く行きますから、ストリングで大丈夫です。

MAL
質問者

お礼

丁寧な回答有り難う御座います。 下記のように記述してみたのですが、うまくいきません。 どこがおかしいのか自分にはわからないので、今一度ご指導願えたらと思います。 コマンドボタンのイベントプロシージャだけを載せます。 cmdstart:コマンドボタン CmbYear:コンボボックス1 CmbMonth:コンボボックス2 CmbDay:コンボボックス3 lblafter14:ラベル1 lblafter30:ラベル2 lblafter90:ラベル3 Private Sub cmdstart_Click() Dim addYear As Integer Dim addMonth As Integer Dim addDay As Integer Dim addDate As Date CmbYear.Text = Val(addYear) CmbMonth.Text = Val(addMonth) CmbDay.Text = Val(addDay) addDate = DateSerial(addYear, addMonth, addDay) lblafter14.Caption = Str(addDate + 13) lblafter30.Caption = Str(addDate + 29) lblafter90.Caption = Str(addDate + 89) End Sub

noname#4564
noname#4564
回答No.1

DateAdd関数、DateSerial関数をヘルプで調べてください。 ついでに余裕があれば、下記の関数も調べておくと便利です。 DateDiff IsDate DatePart CDate Year Month Day Hour Minute Second Date Now Timeserial WeekDay Format

MAL
質問者

お礼

ヒントをくださり有り難う御座います。 ヘルプや参考書などを参考にしてみましたが、>2のような状況です。 恐らく基本的な事が間違っているのではないかと思うのですが、自分ではどこが違うのかわかりかねている次第です。 計算結果までうまくいきましたら、Format関数などで和暦などを使って綺麗な表示をしていきたいと思います。

関連するQ&A

専門家に質問してみよう