• ベストアンサー

日付の差の求め方

Dim gStr_GrpSDate as String Dim gStr_GrpEDate as String gStr_GrpSDateに 2004/02/01 01:00 gStr_GrpEDateに 2004/02/02 24:00 が入っている場合, Int_DayDiff = DateDiff("d", gStr_GrpSDate, gStr_GrpEDate) のようにDateDiff関数を使用できたら良いのですが (1)型がString (2)gStr_GrpEDateの時刻が24時の為DateDiff関数(Date関数も)が使えない。 等の問題がありうまく処理できません。 このような場合,日付の差を取得するにはどのようにしたら 良いのでしょうか? よろしくお願い致します。

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

  • ベストアンサー
回答No.3

http://okwave.jp/kotaeru.php3?q=2078140 以前の質問は解決? 同じような質問ですよ。 Sub Test()   Dim gStr_GrpSDate  As String   Dim gStr_GrpEDate  As String   Dim l_lng分差分   As Long   Dim l_lngWk     As Long   Dim l_lng日     As Long   Dim l_lng時     As Long   Dim l_lng分     As Long      Dim l_strMsg    As String      gStr_GrpSDate = "2004/02/01 01:00"   gStr_GrpEDate = "2004/02/02 150:00"      l_lng分差分 = 分差分(gStr_GrpSDate, gStr_GrpEDate)      l_lng日 = l_lng分差分 \ (24 * 60)   l_lngWk = l_lng分差分 Mod (24 * 60)      l_lng時 = l_lngWk \ 60   l_lng分 = l_lngWk Mod 60      l_strMsg = l_lng日 & "日 " & Format(l_lng時, "00") & ":" & Format(l_lng分, "00") & vbCrLf & vbCrLf   l_strMsg = l_strMsg & "の差分" & vbCrLf   MsgBox l_strMsg End Sub Function 分差分(ByVal p_data1 As String, ByVal p_data2 As String) As Long   Dim l_dat1   As Date   Dim l_dat2   As Date   Dim l_lngRet  As Long      l_dat1 = 日付変換(p_data1)   l_dat2 = 日付変換(p_data2)      '分で差分を求める   分差分 = Abs(DateDiff("n", l_dat2, p_data1)) End Function Function 日付変換(ByVal p_data As String)   Dim l_varWk As Variant   Dim l_dat  As Date      l_varWk = Split(p_data, " ")      l_dat = CDate(l_varWk(0))   If UBound(l_varWk) > 0 Then     l_dat = DateAdd("n", 分変換(CStr(l_varWk(1))), l_dat)   End If   日付変換 = l_dat End Function Function 分変換(p_data As String) As Long   Dim l_varWk As Variant   l_varWk = Split(p_data, ":")      分変換 = (CLng(l_varWk(0)) * 60) + CLng(l_varWk(1)) End Function

-cinq-
質問者

お礼

遅くなってスミマセンでした。 ソースの提供ありがとうございます。 上記のソースで理解することが出来ました。 ありがとうございました。

その他の回答 (2)

  • PrintScree
  • ベストアンサー率25% (538/2091)
回答No.2

そのデータは年月日時分秒の書式になっていますか?もし'24:00'としかないのであれば'24:00:00'としてみて下さい。 また、24:00は基本的には翌日の00:00ですので、00:00分として一度試してみて下さい。デバッグウィンドウを使えば簡単に確認できますよね? それで上手くいったら、データをチェックして固定フォーマットになるよう文字列操作してからCDate()関数に通せば上手くいきます。

-cinq-
質問者

お礼

回答ありがとうございました。

  • PrintScree
  • ベストアンサー率25% (538/2091)
回答No.1

String型に入っている文字列の日付が'YYYY/MM/DD hh:mm:ss'の形式で入っているならString→Date型に変換させてからDatediffすれば簡単です。 StrConv()関数だったかな?ヘルプで調べてみてください(^^;ゞ

-cinq-
質問者

お礼

早速の回答ありがとうございます。 Cdate()で変換を行いましたが, 24:00はDATE型では使えない為 型が一致しませんのエラーが表示されてしまいます。

関連するQ&A

専門家に質問してみよう