VB6を利用しまして
"2007/06/03"というような日付の情報と"28"のような情報を組み合わせ
"2007/06/28"というように生成するにはどのように記述すればよろしいでしょうか?
宜しくお願いします
過去ログ検索『日付』でどうぞ。
特攻隊長まるるうさん、返信ありがとうございます。
説明が足りませんでした。一応過去ログを参照しまして
sDate1 → 2007/06/03
sDate2 → 28
と入力された内容を
sDate = CDate(Year(sDate1) & "/" & Month(sDate1) & "/" & Day(sDate2))
と記述してみたのですが、Day(sDate2)では値が27となり
sDataは"2007/06/27"となってしまいました。
もう1度過去ログを参照したいと思います。
>sDate2 → 28
は
"2007/06/28"
ではなくて、単なる28という値?
Dim sDate2 As Date
sDate2 = 28
とすると、sDate2はどんな値を保持しているのでしょうか?
MsgBoxやローカルウィンドウで確認してみてください。
Date型ではなく、Integerとかの数値型で保持すれば、Day関数を使わないで
そのまま28という値なので、
Dim sDate As Integer
sDate = 28
sDate = CDate(Year(sDate1) & "/" & Month(sDate1) & "/" & sDate2)
でOKです。
ただ、CDateを使うよりも、DateSerial関数を使ったほうがよさそうです。
回答は Blue さんがやってくれてるのでより知識を深めるための内容を
補足しておきます。
データ型の構造をしっかりヘルプ(MSDN)で確認してください。
日付型の仕組みと、文字列からの変換について理解していないと、
うまくいかない例として示されたようなとんでもないコードを
書いてしまうことになります。
ヘルプより抜粋
>日付型 (Date) の変数は、IEEE 64 ビット (8 バイト) の浮動小数点数の変数です。
>西暦 100 年 1 月 1 日〜西暦 9999 年 12 月 31 日の範囲の日付
つまり、内部構造は数値型と似たようなデータであり、足し算引き算
ができますが、日付との対応関係はちょっとクセがあります。
基本的に日付型の変数の制御用に用意された関数を使うのが良いでしょう。
# DateValue, DateAdd, DateDiff, IsDate 。。。など、ヘルプを『日付』
# というキーワードで検索すれば出てきます。
# DateSerial が引っ掛かり難いですがw
[VB6.0]
Private Sub Command1_Click()
Dim sDate1 As String
Dim sDate2 As String
Dim sDate As String
Dim datTemp As Date
sDate1 = "2007/06/03"
sDate2 = "28"
datTemp = CDate(sDate1)
Debug.Print Format(datTemp, "yyyy/mm/dd hh:mm:ss")
datTemp = CDate(sDate2)
Debug.Print Format(datTemp, "yyyy/mm/dd hh:mm:ss")
datTemp = CDate(sDate1)
datTemp = DateSerial(Year(datTemp), Month(datTemp), CInt(sDate2))
Debug.Print Format(datTemp, "yyyy/mm/dd hh:mm:ss")
datTemp = DateSerial(1999, 3, 3) + TimeSerial(23, 59, 59)
Debug.Print Format(datTemp, "yyyy/mm/dd hh:mm:ss")
datTemp = CDate(sDate1)
datTemp = DateAdd("d", 31, datTemp)
Debug.Print Format(datTemp, "yyyy/mm/dd hh:mm:ss")
End Sub
Blueさん、特攻隊長まるるうさん
ご丁寧な返信ありがとうございました。
勉強になりました。
>Blueさん
Dim sDate2 As Date として入力欄に入力された値(28)がどうなるか確認したところ
1900/01/27 となっていました。この日付を結合していたのですね。
DateSerialを検索・テスト後、特攻隊長まるるうさんのサンプルを実行してみました。
教えていただいたように、DateSerialを使用した方がスッキリしていますので
sDate = DateSerial(Year(sDate1), Month(sDate1), sDate2)
と記述してして利用したいと思います。
ありがとうございます!!
ツイート | ![]() |