2017-03-15 3 views
0

シート内のすべてのデータをバリアント配列にコピーしています。列1には次のようなタイムスタンプがあります。分範囲を比較するdatediff関数

木3月2日午前1時14分28秒ESTは2017

私は1分のタイムスパン内のすべての行を処理したいです。私は分の差異を見つけるためにdatediff関数を使用しています。しかし、何とかそれは期待どおりに動作していません。 ここにコードがあります。

For i = 1 To UBound(vBaseArray) 
      dSavedDate = convertDate(vBaseArray(i,1)) 'function to convert string to date 
.....   some code 
      For j = i To UBound(vBaseArray) 'function to convert string to date 

       If DateDiff("n", dSearchDate, dSavedDate) >= 1 And DateDiff("n", dSearchDate, dSavedDate) <= 2 Then 

       ----some code 

が、結果は期待 どおりではありませんdSavedDateは木3月2日の場合は1時14分28秒EST 2017その後、 文は、タイムスタンプ

木3月2日1時12分、次の私を返している場合:24 EST 2017

木3月2日午前1時12分44秒EST 2017

木3月2日午前1時12分40秒EST 2017

木3月2日午後12時47分12秒EST 2017

私はdSavedDate

の> = 1分、それは私が間違っているのことを何であるだろうタイムスタンプをしたいのに対し?

+0

は、それは ' dSavedDate'の値が "Thu Mar 02 01:14:28 EST 2017"であるか、それとも 'vBaseArray(i、1)'の値ですか? 'dSavedDate'でなければ**は' dSavedDate'の値です**そして 'dSearchDate'の価値は何ですか?そしてあなたのコードにエラーを隠すかもしれない 'On Error'ステートメントがありますか? – YowE3K

+0

はい、dSavedDateの値は03 Mar 02 01:14:28 EST 2017です。dSearchDateは、特定の基準内にある列1のすべてのタイムスタンプの値を持ちます。主に私が下で与えた4つの値。しかし明らかにそれらは正しくありません – Jay

+0

もし 'dSavedDate'がThu Mar 02 01:14:28 EST 2017ならば' convertDate'はうまくいきませんでした。もし私があなたの他の質問の答えに見た関数なら、あなたが示したような価値ではなく、日付を返すこと。 – YowE3K

答えて

2

Date変数は内部的にはと表され、時間部分は小数点以下の小数部の桁になります。あなただけのそれらを直接差し引くと、彼らはお互いの分以内にしているかどうかを確認するために、デルタを使用することができます。

Public Function WithinOneMinute(first As Date, second As Date) As Boolean 
    Const ONE_MINUTE As Double = 1/24/60 
    Dim difference As Date 
    difference = Abs(first - second) 
    WithinOneMinute = difference <= ONE_MINUTE 
End Function 

その後は、このようなあなたのループでそれを呼び出すことができます。

For i = 1 To UBound(vBaseArray) 
     dSavedDate = convertDate(vBaseArray(i, 1)) 
     For j = i To UBound(vBaseArray) 
      If Not WithinOneMinute(dSearchDate, dSavedDate) Then 
+0

小さな問題 - OPは> = 1と<= 2を望む。 – YowE3K

+0

@ YowE3K - 既にそれをキャッチし、 'Not'を追加しました。 ;-) – Comintern

+0

それだけで何も許可しません<-1 Or > 1? – YowE3K

関連する問題