• ベストアンサー

日付の差の求め方

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

  • 日付の差を求めるには

    VB6.0で開発しています。 DBに時刻の列名「YEARMONTHDAY」「HOUR」(1~24)がNUMBER型として入っています。 DBより取得した「YEARMONTHDAY」と「HOUR」で日付の差を求めたいのですが, HOURに24の値がきた際,DATE型の範囲以上の為エラーになってしまいます。 なにか日付の差を求める良い方法があればご教授下さい。 (例) Dim pdtm_RecTime As Date Dim str_wk As String '// EOFまでループ Do Until objDynaset.EOF '// 記録日取得 str_wk = Format$(CStr(YEARMONTHDAY.Value) & Format(CStr(HOUR.value), "00") & "00", "0000/00/00 00:00") pdtm_RecTime = CDate(str_wk) ________________________________________________________________________________ 上記のPGだとHOURが24の場合にDateの範囲を超える為エラーになる。 '// 日付差チェック pVar_Diff = DateDiff("h", DateAdd("h", pInt_Hour, gDtm_GrpSDate), pdtm_RecTime) '// データがまだ存在する場合次のレコードに移動 If (objDynaset.EOF = False) Then objDynaset.MoveNext End If pInt_Hour = pInt_Hour + 1 Loop

  • 日付の差を求める関数はないでしょうか。

    日付の差を求める関数はないでしょうか。 SQLのDATEDIFFのような単純明快な関数があればいいなぁと思っています。 できれば、Perlの組み込み関数か、標準モジュールで・・・x_x

    • ベストアンサー
    • Perl
  • エクセルで日付・時刻の差を知りたい

    いつもお世話になってます。 早速質問ですが、エクセルで日付と時刻の差を出す関数や数式を知りたいです。 2つのセルにそれぞれ日付を入力した場合や、時刻をそれぞれ入力した時の差の出し方はわかるのですが、2つのセルにそれぞれ日付・時刻を入力し、その差を出す方法がわかりません。 そもそもそういった方法が可能なのでしょうか。

  • vb 日付の判断

    こんにちは。vb2005で日付の判断をしたいのですが、 スマートな方法がわかりません。 Dim y() as string ~ dim y(0) には 20081231 が入る ~ Dim wk As String = y(i).Insert(4, "/") wk = wk.Insert(7, "/") If IsDate(wk) Then ひづけ有効な場合 処理 とりあえずこれで、日付として成立するかを判断しているのですが、 もうすこしスマートな方法はないでしょうか?

  • ASPでの日付の取得について

    ASPにてシステム日付の3日前の日付を取得したいのですが、 下記のようにすると変数varAに 38735 という数字が入ってきます。 システム日付の1日後のvarBには 2006/01/22 と入るのですが、 x日前の日付の取得はどうすればよろしいのでしょうか? varA =DateDiff("d", 3, date) varB =DateAdd("d", 1, date)

  • VBA 今日の日付に+1した場合、月末失敗する

    VBA初心者の私ですが、いつも回答者さまに助けていただいております。 今回も質問させてください。 エクセル2002を使用しています。 今日の日付に+1をして、翌日の日付を変数に入れたいのですが、 月末の場合、失敗してしまいます。 例えば、3月31日に+1をすると、3月32日になってしまします。 Dim MMM As String, DD As String MMM = Format(Date, "MMM") DD = Day(Date) + 1 DDが文字列なので当然だと思い、変数宣言を日付型にするとエラーになります。 Dim MMM As Date, DD As Date MMM = Format(Date, "MMM") DD = Day(Date) + 1 実行時エラー‘13’ 型が一致しません。 この時、MMMの値は 0:00:00 です。 日付型にすれば月末を認識して4月1日になってくれると思ったのですが・・・。 私の書き方が悪いのでしょうか? 他に書き方がありましたら教えてください。 どうぞよろしくお願いします。

  • VBA での日付の計算

    お世話になってます。 Access VBA 初心者です。 string型変数に日付(YYYYMMDD)がセットされています。 その日付に1日プラスした日付を算出したいのですが、 どうすればよいのかよく分かりません。 たとえば Dim w_Date As String w_Date = "20070726" としたならば、 w_Dateは"20070727"となるようにしたいのですが。。。 よろしくお願いいたします。

  •  日付型なら変数の先頭になんてつけてますか?

    変数名で、 文字列型なら Dim str組織名 As String 数値型なら Dim intNo As Long としてるのですが、 日付型なら変数の先頭になんてつけてますか? Dim date月日 As Date にしようかなと思ったのですが なんかくどいかなって感じます。

  • c言語 日付の差の計算

    現在の日付と未来の日付を入力すると、現在の日付から未来の日付まで何日あるか計算して表示するプログラムを作成せよ。 作成するプログラムの日付の表現は structure st_date { int year; Int month; Int day; }; また、mktime()などの標準ライブラリの時刻、日付関数を使用してはならない。 五時間くらい格闘してますが、正直何が何だかわかりません(ー ー;) これのプログラム、また、考え方を教えて頂きたいです(T ^ T)

  • エクセル2003にて、シートのセル上にあるdate関数の日付の部分を、

    エクセル2003にて、シートのセル上にあるdate関数の日付の部分を、年月日~年月日の日付を指定して、指定した日付ごとに日付が変更された状態で指定した日付分のシート枚数を印刷をしたいと思っていますが、上手く実行できません。※現状は、PCの日付を変更して印刷をしています。 書いたマクロは下記(下矢印)になりますが、修正箇所や良い方法がありましたら、ご伝授宜しくお願い致します。 Sub Test() Dim myPrompt_s As String, myTitle_s As String Dim myPrompt_e As String, myTitle_e As String Dim startDay As Date, endDay As Date, I As Integer On Error GoTo ExitMe '---抽出開始~終了期間を取得します myPrompt_s = "何月何日からですか?" myTitle_s = "印刷開始日付" myPrompt_e = "何月何日までですか?" myTitle_e = "印刷終了日付" startDay = Format(InputBox(myPrompt_s, myTitle_s), "yyyy/m/d") '開始 endDay = Format(InputBox(myPrompt_e, myTitle_e), "yyyy/m/d") '終了 For I = 0 To endDay - startDay Range("C4").Value = Format(startDay + I, "yyyy/m/d") '---印刷します ActiveSheets.PrintOut Next I ExitMe: End Sub

専門家に質問してみよう