• ベストアンサー

日付の加算方法 AddDate関数?

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

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答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/17068)
回答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

  • コンボボックスの入力表示の消去

    アドバイスをお願いします。 [知りたいこと] 検索ボックス(コンボボックス)で検索した値を合致フォーム(フォーム)で開くとき、一緒に検索ボックス(コンボボックス)の値(入力表示)もクリアにしたい。 [セット条件] ・コンボボックス名:検索ボックス ・検索結果フォーム名:合致フォーム ・合致フォームを開くコマンドボタン名:開くボタン [お願い] 現在は、コマンドボタンをイベントのマクロでフォームを開くで設定している。コマンドボタンでフォームを開く設定をコードビルダで記述するスキルがない為、マクロで可能でしたらマクロで教えていただけませんでしょうか。マクロがダメなときはコードビルダでお願いします。勉強しますので。 以上ですが、宜しくお願いします。

  • ExcVBAについて、コンボBOXの項目をセルに記録する

    ユーザーフォーム1にコンボBOX1に氏名を記録させてあります。 同じくユーザーフォーム1にコマンドボタン1で入力ボタンをつくってあります。sheet1にはVBエディタのフォームよりコマンドボタン2を作成しsheet1にコンボBOXを表示させるようにしています。 そこでコンボBOXの氏名1をsheet1のA3にコマンドボタン1を使い記録させます。後にA4に氏名2を記録させます。 というように、Aの欄に記録、記録としていきたいのですがコードが判りません。どのようなコードを使えば記録がA2、A3、A4と記録できるのでしょうか教えてください。ちなみにA1だけに記録は出来ます。 宜しくお願いします。

  • EXCEL ユーザーフォームを使ったマクロ

    データの登録をするのにユーザーフォームを使おうと思うのですが、なかなかうまくいきません。教えてください。 ユーザーフォームにはコンボボックス、テキストボックス、コマンドボタンが貼り付けてあります。(コンボボックスのリストには呼び出したいシートの名前が入っています) コンボボックスのリストの中から呼び出したいシートを選択し、テキストボックスに入力した内容を、コマンドボタンを押すことで選択されたシート上の、あるセルに登録したいのですがどうすればよいでしょうか?

  • 入力途中の入力した値をすべて削除する方法

    フォームの入力値をクリア フォーム上にいくつかのテキストボックス、コンボボックスを配して入力してます。 入力途中に入力した値をすべて(削除)にして再入力したい。 現状、削除コマンドのクリック時に Me.Undo 又は Me.コントロール名Undo として試していますが、クリアされずフォームを閉じてテーブルを確認すると入力 した値がテーブルに追加されてしまいます 教えてください。

  • 入力途中で入力して値をすべて削除する方法

    フォームの入力値をクリア フォーム上にいくつかのテキストボックス、コンボボックスを配して入力してます。 入力途中に入力した値をすべて(削除)にして再入力したい。 現状、削除コマンドのクリック時に Me.Undo 又は Me.コントロール名Undo として試していますが、クリアされずフォームを閉じてテーブルを確認すると入力 した値がテーブルに追加されてしまいます 教えてください

  • フォームへの未入力を無くしたい

    [やりたいこと(宜しくおねがいします)] フォームの未入力「コンボボックス」と「テキストボックス」を事前に把握したい。 [(やりたいこと)の実現と希望] このサイトでアドバイスを頂きまして、長年に渡り作成できたデータベースが「68」、入力するフォームは「78」を超えます。現状「フォーム」の構成を生かす方法を含めアドバイスをお願いします。 [入力するフォームに共通していること] 1,コンボボックスとテキストボックス  ・全てのコンボボックスへの選択入力は必須になっている。  ・テキストボックスは未入力箇所も発生する。「未入力箇所は不特定」 2,フォームに共通して配している2つのコマンドボタン  ・フォームを閉じるボタン「マクロ(クリック時)」  ・情報の最新化ボタン「マクロ(クリック時)」   ※コンボボックスの選択項目追加時に反映用として配置 以上ですが、宜しくお願いします。

  • コンボボックスのTEXTを日付に

    はじめまして 早速ですがどなたかお助けを! 入力フォームに「月」「日」のコンボボックスが別々にあります。 その値を1つのセルに日付として表示するにはどうしたらいいでしょうか? Range("C7") = comMonth.Text / comDate.Text これだとうまくいきません どなたか教えていただけませんか? よろしくお願いします

  • コンボボックスで

    コンボボックスで、あるテーブルを参照してリストを出す場合、リスト中になかった場合に、コマンドボタンを押せばテーブルの追加フォームが出てきて入力できるようにしています。この場合に、入力フォーム内で終了(保存)ボタンを押せば、自動的にコンボボックスの中に入り、かつもう一度選択しなくても表示されているような操作はできないものでしょうか?

  • データの保存方法について

    VB.netについての質問です。 フォームにテキストボックスとコンボボックスとボタンが取り付けられている状態で、ボタンを押すとテキストボックスとコンボボックスのデータを、指定したフォルダにテキストファイルで保存させる、というプログラムは可能でしょうか? 保存形式はテキストファイル以外でも構いません。 よろしくお願いします。

  • Access コンボボックスの次の値に移動

    Microsoft Accessでフォームを作りました。コンボボックス1の値はテーブル1から参照するようになっています。このフォームにボタンを追加して、ボタンを押すとコンボボックスの値が一つ下の値に移動するようにしたいです。どんなコードを書けば良いですか。