プロが教える店舗&オフィスのセキュリティ対策術

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関数も)が使えない。

等の問題がありうまく処理できません。
このような場合,日付の差を取得するにはどのようにしたら
良いのでしょうか?

よろしくお願い致します。

A 回答 (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
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/02/19 11:47

そのデータは年月日時分秒の書式になっていますか?もし'24:00'としかないのであれば'24:00:00'としてみて下さい。



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

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

お礼日時:2007/02/19 11:50

String型に入っている文字列の日付が'YYYY/MM/DD hh:mm:ss'の形式で入っているならString→Date型に変換させてからDatediffすれば簡単です。



StrConv()関数だったかな?ヘルプで調べてみてください(^^;ゞ
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございます。

Cdate()で変換を行いましたが,
24:00はDATE型では使えない為
型が一致しませんのエラーが表示されてしまいます。

お礼日時:2006/04/18 20:47

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!