• ベストアンサー

時間差を取得結果を求めるには

現在VB6.0を使用してエクセルに書かれた日時データから時間間隔を取得出来るようなプログラムを作りたいのですがどうしたらいいのかわかりません。 例えば A行に2007/04/18 10:11:50と書かれていて B行に2007/04/19 12:13:25と書かれていた場合 このAとBの差が何年何ヶ月何日何時間何秒差があるかを求めたいです 何かいい方法があれば教えて下さい。

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

  • ベストアンサー
noname#78947
noname#78947
回答No.7

No.1、3です。 DateDiff("yyyy", A, B) & "年" & DateDiff("yyyy", A, B) & "ヶ月" & _ DateDiff("yyyy", A, B) & "日" & DateDiff("yyyy", A, B) & "時間" & _ DateDiff("yyyy", A, B) & "分" & DateDiff("yyyy", A, B) & "秒" とりあえず、試しに上記で動作させてみたら時間間隔が短い場合に「0年0ヶ月0日」などの不自然な表示になります。そこで、0の部分は表示されないプログラムを作ってみました。 Public Function 時間間隔(ByVal 時間A As String, ByVal 時間B As String) As String Dim 間隔_秒 As Double Dim 間隔_分 As Double Dim 間隔_時 As Double Dim 間隔_日 As Double Dim 間隔_月 As Double Dim 間隔_年 As Double 間隔_秒 = DateDiff("s", 時間A, 時間B) If 間隔_秒 <= 60 Then 時間間隔 = 間隔_秒 & "秒" Exit Function Else 間隔_秒 = ((間隔_秒 / 60) - Int(間隔_秒 / 60)) * 60 時間間隔 = 間隔_秒 & "秒" End If 間隔_分 = DateDiff("n", 時間A, 時間B) If 間隔_分 <= 60 Then 時間間隔 = 間隔_分 & "分" & 時間間隔 Exit Function Else 間隔_分 = ((間隔_分 / 60) - Int(間隔_分 / 60)) * 60 時間間隔 = 間隔_分 & "分" & 時間間隔 End If 間隔_時 = DateDiff("h", 時間A, 時間B) If 間隔_時 <= 24 Then 時間間隔 = 間隔_時 & "時間" & 時間間隔 Exit Function Else 間隔_時 = ((間隔_時 / 24) - Int(間隔_時 / 24)) * 24 時間間隔 = 間隔_時 & "時間" & 時間間隔 End If 間隔_年 = DateDiff("yyyy", 時間A, 時間B) If 間隔_年 > 1 Then 間隔_月 = DateDiff("m", DateAdd("yyyy", 間隔_年, 時間A), 時間B) 間隔_日 = DateDiff("d", DateAdd("m", 間隔_月, 時間A), 時間B) 時間間隔 = 間隔_年 & "年" & 間隔_月 & "ヶ月" & 間隔_日 & "日" & 時間間隔 Exit Function Else 間隔_月 = DateDiff("m", 時間A, 時間B) If 間隔_月 > 1 Then 間隔_日 = DateDiff("d", DateAdd("m", 間隔_月, 時間A), 時間B) 時間間隔 = 間隔_月 & "ヶ月" & 間隔_日 & "日" & 時間間隔 Exit Function Else 間隔_日 = DateDiff("d", 時間A, 時間B) 時間間隔 = 間隔_日 & "日" & 時間間隔 End If End If End Function 上記のプログラムの利用法は下記の通りです。 RET = 時間間隔(時間A, 時間B) この場合はRETという変数に時間間隔が「何年何ヶ月何日何時間何秒」という形式で、しかも「0年」の場合は「何ヶ月何日何時間何秒」、「0年0ヶ月」の場合は「何日何時間何秒」と無駄な部分を出力しません。1ヶ月の日数が固定されていないので複雑になりましたが参考にしてください。

その他の回答 (6)

  • dsuekichi
  • ベストアンサー率64% (171/265)
回答No.6

ごめんなさい。 #5の投稿に > #1です。 と、書いてしまいました。 > #2です。 の間違いです。 申し訳ありません。

  • dsuekichi
  • ベストアンサー率64% (171/265)
回答No.5

#1です。 そういえば、ちゃんと確認していませんでしたが・・・ 質問者のSimanohitoさんは、「1ヶ月の差」の定義をどう考えているんでしょう? 30日個固定とかだと、単純な差分計算でできますが・・・ 暦を意識した場合、 例えば、 「2007/4/26」と「2007/5/27」は「1ヶ月と1日」 「2007/5/26」と「2007/6/27」も「1ヶ月と1日」 と言う風に求めたいなら、単純な計算じゃできないと思いますよ。 4月は30日、5月は31日あるので、 「DateDiff("d",#2007/4/26#,#2007/5/27#)」は「31」で、 「DateDiff("d",#2007/5/26#,#2007/6/27#)」は「32」に なってしまいますから・・・ 「1ヶ月は30日固定」だとした場合なら、 前者は「1ヶ月と1日」で、後者は「1ヶ月と2日」になりますね。

  • PED02744
  • ベストアンサー率40% (157/390)
回答No.4

(1)年月日時分秒を秒に変換する関数を作る (2)秒を年月日時分秒に変換する関数を作る (3)それぞれを(1)で作った関数で秒に直して、引き算する (4)引き算された結果を(2)で作った関数で年月日時分秒に直す ってだけじゃないんですか? 例えば今日なら、2007年04月26日ですから 2006*365+2006/4-2006/100+2006/400-(2006/1600 -1) 日が2006年12月31日までの日数 うるう年は、4年に一回あって、100年に一回なくて、400年に一回あって、1600年に一回ない(んだけど1600年はうるう年だったので1足す) 2007年に入ってからも同様に 31+28+31 +26 (3月いっぱいの日数 +26日) 一日は何秒か・一時間は何秒か・一分は何秒か ・・・それぞれわかってるのですから、簡単でしょ?

noname#78947
noname#78947
回答No.3

>複数回使用してという複数回とはどのようにしようしたらよろしいのでしょうか。 1.DateDiff("yyyy",A,B) 2.DateDiff("m",A,B) 3.DateDiff("d",A,B) 4.DateDiff("h",A,B) 5.DateDiff("n",A,B) 6.DateDiff("s",A,B) 1つ目で日付Aと日付Bの間が何年か、2つ目で何ヶ月か、3つ目以降が何日か、何時間か、何分か、何秒かとなっています。これらの関数で求めた結果をつなげれば良いです。どうやってつなげるのかはご自分で考えたり調べたりして下さい。文字列の連結はVBの基礎の基礎程度なので分からない場合は勉強不足です。VB6.0は分かり易く解説しているサイトが多いのでそういったサイトを利用して勉強して下さい。

  • dsuekichi
  • ベストアンサー率64% (171/265)
回答No.2

> このAとBの差が何年何ヶ月何日何時間何秒差があるかを求めたいです 「何年何ヶ月」が無ければ結構楽なんですけどね・・・ #日までは、1日=24時間。1時間=60分。1分=60秒と決まってますので、単純な引き算と割り算でできますが、 #1ヶ月=28日~31日。1年=365or366日と変わりますから・・・ DateAdd関数で、秒単位、分単位、時単位、日単位、月単位、年単位の順に1づつ加算していって、同じになるまで、各々何回加算できるかを調べるとか・・・ 例えば、 > A行に2007/04/18 10:11:50と書かれていて > B行に2007/04/19 12:13:25と書かれていた場合 だと、 先ずAに秒を加算していくと、35回加算すると、 Aは「2007/04/18 10:12:25」となって、秒が一致。 次に、分を1回加算すると、 Aは「2007/04/18 10:13:25」となって、分が一致。 次に、時を2回加算すると、 Aは「2007/04/18 12:13:25」となって、時が一致。 次に、日を1回加算すると、 Aは「2007/04/19 12:13:25」となって、日が一致。 次に、月を0回加算すると、 Aは「2007/04/19 12:13:25」となって、月が一致。 次に、年を0回加算すると、 Aは「2007/04/19 12:13:25」となって、年が一致。 で、0年0ヶ月1日 2時間1分35秒 とか・・・

noname#78947
noname#78947
回答No.1

DateDiff(時間間隔の単位,A,B) 上記の関数で時間Aから時間Bまでの経過時間が分かります。ちなみに「時間間隔の単位」というのは "yyyy"=年 "m"=月 "d"=日 "h"=時 "n"=分 "s"=秒 となります。1つの式で何年何ヶ月何日何時間何秒差を求めることは出来ないようなので複数回DateDiff関数を使用して求めてください。

Simanohito
質問者

補足

ご連絡が大変遅くなりまして申し訳ございません。 上記回答ありがとうございました。 ただ複数回使用してという複数回とはどのようにしようしたらよろしいのでしょうか。

関連するQ&A

  • 結合した場合の取得時間差について

    ちょっと抽象的ですいませんが、 100万件のデータがあるテーブルAからインデックスを利用して1万件のデータを取得する場合と、 80万件のデータがあるテーブルAと1000件のデータがあるテーブルBを結合して、インデックスを利用して1万件のデータを取得する(WHERE区の>=,<=とGROUP BYを使用) 場合だと明らかに前者の方が速いとは思いますが、実際の取得時間の差はどれくらいあるでしょうか? 何を教えてもらいたいかと言うと、上記の場合、テーブルAの80万件は別テーブルのデータから作られており、残りの20万件はテーブルAとテーブルBから作ることができるので(80万件をあるKEYでSUMしたもの)、 2つの方法でのデータ取得の差があまりない、あるいはかなり小さくできるのなら、後者の方法を取りたいのです。 (INSERT,UPDATEを無駄にしたくない) 説明がわかりづらくてすいませんが、アドバイスをお願いします。

  • Oracle 2つのDate型の値の差を「分」で取得したい

    DBはOracleを使用しています。 Date型の項目AとBがあり、それぞれ日時が設定されています。そのAとBの日時の差を「分」で取得したいと思います。 AとBは、1時間以内の場合もあれば、複数日にまたがる場合もあります。 SQLでA-Bで差分は取得できるのですが、その後、どうすれば、「分」に変換できるのかがわかりません。 よろしくお願いします。 例1) A: 2003/06/18 9:00 B: 2003/06/18 6:00 →3時間→180「分」を返却したい 例2) A: 2003/06/18 9:00 B: 2003/06/16 9:00 →2日→2880「分」を返却したい

  • VB ログファイルからデータを時間毎に取得したい

    VBでログファイルからデータを1行ずつ読み取り、 1時間毎と1秒毎の件数を取得したいです。 ログファイルは下記のように数千行のデータが存在します。 1 | 20140306 07:12:34 , TEST_A , AAA , 001 2 | 20140306 07:12:34 , TEST_A , BBB , 001 3 | 20140306 07:15:01 , TEST_A , BBB , 001 4 | 20140306 08:12:34 , TEST_B , CCC , 002 5 | 20140306 08:20:30 , TEST_A , CCC , 002 6 | 20140306 08:20:30 , TEST_A , CCC , 002 7 | 20140306 08:20:30 , TEST_A , CCC , 002 8 | 20140306 09:12:33 , TEST_A , AAA , 003 9 | 20140306 10:15:47 , TEST_A , BBB , 004 10 | 20140306 10:15:47 , TEST_B , BBB , 004 ・ ・ ・ 条件は、データに「TEST_A」と言う文字列が含まれている事です。 この場合、まず1時間毎の件数を取得して 指定のセルに表示させます。 7:00 | 3 8:00 | 3 9:00 | 1 10:00| 1 そして、その時間毎の秒間最大件数を取得して 指定のセルの表示させたいです。 7:00 | 2 8:00 | 3 9:00 | 1 10:00| 1 何卒、よろしくお願いいたします。

  • ミリ秒単位の時間設定

    visual Basic6を使用してデータを0.5秒間隔で取得するプログラムを作っています。time関数のintervalを使うよりも正確な間隔でデータを取得したいと考えています。そこで、APIを使っての操作を調べ出したのですが、初心者なのでプログラムでの組み込み方がよくわかりません。教えてください。よろしくお願いします。

  • データ抽出について

    Excelに1秒間隔に取得したデータが1万行以上あります。 この1秒間隔のデータを1分間隔で間引きしたデータに変換したいと 思っているのですが、容易に間引く方法を教えてください。 60行間隔で手動削除するには行数が多くて困っております。

  • タイマーオブジェクトを利用した時間の取得

    今、卒研でVBを使ってよるのですが、そのプログラミングで悩んでいます。 タイマーを使って時間を取得しようと思い、パソコン画面右下の時間表示から取っているのですが、そうすると時間、分は表示できるのですが秒までは表示できません。 このやり方で秒まで表示できませんか? 違った方法でもVBを使って秒まで表示できるプログラミングがあったら教えてください。 VBを使って10分の1秒単位での時間の取得はできませんか? できたら2つのフォームにまたがって同じタイマーを使用したいのですが、何か方法はありませんか? すみません。 お願いします。

  • エクセルで、現在時間の取得

    お世話になっております。 エクセル(2003)で例えばA1のセルに入力された時間をB1に取得し、しかも、同じ事をA2ならB2、A3ならB3・・・・・・と続けて取得したいのですが、可能でしょうか? 単純にIFとNOW()を組合わせてみましたが、常に再計算されてしまいます。 目的は今度結婚式の受付で来場者の名前を入力して何時何分にいらっしゃったのかを管理するためで、このデータを披露宴のイベントに使用するためです。 よろしくお願いします。

  • 時間差の計算について

    エクセル関数で日付と時間がスラッシュとコロンで区切られた時間の差を求めるにはどうしたらよいか。 A1セルに2020/10/15 12:30 B1セル2020/11/3 11:15   A1セルとB1セルの時間差は何時間何分になる関数を知りたい。 

  • Rubyで実行結果を時間差をつけて一行ずつ表示?

    10000を 10でわっていくプログラムです。これを普通に実行すると、一度に実行結果が、表示されますが、秒数を設定して、一行ずつ間隔をあけて、表示するには、どのようにプログラムを書けばよいでしょうか? よろしくお願いましす。  ソースコード n=10000 while n>=1 do break if n <= 1 if n%2 == 0 n = n / 10 end puts n end 実行結果 1000 100 10 0 ↑ この実行結果を  1000  1秒後に 100  1秒後に 10 1秒後に 0 のように 時間差をつけたいです。

    • ベストアンサー
    • Ruby
  • 正規化(時間)

    正規化についてその方法を教えてください。 例) Aデータ 15秒で200のデータ取得 Bデータ 18秒で120のデータ取得 Cデータ 22秒で222のデータ取得したとします。 これを時間で正規化してデータをグラフ化する方法。 宜しくお願いします。

専門家に質問してみよう