2017-01-15 11 views
0

編集:私は範囲から最小/最大日付を取得することができた回答に基づいて:は、特定の日時書式(VBA)で日付を比較

Dim dt As Date 
dt = WorksheetFunction.Min(Range("D2:D300")) 

しかし、それは十分ではありません。範囲の代わりに配列でこの関数を使用するにはどうすればよいですか?

オリジナルのポスト: I持って次の列:

enter image description here

形式は次のとおりです。DD/MM/YYYYのHH:MM

私は最も早い日時を取得しようとしています列1の最新の日時と列2の最新の日時。この場合:

2017年2月1日6時07分(最初の列からearlist日時、1月2)

2017年2月2日14時11分(第二列から最新の日時、 2月の第2回)

私は細胞からの値を持つ多次元配列(MYDATA)を持っていると私の機能は、これらのものです:

Private Function GetLatestDateFromData() As String 
    Dim latestDate As String 
    Dim i As Long 

    latestDate = myData(1, ColumnsIndex(3) - 1) 

    For i = 1 To UBound(myData, 1) - 1 
     If latestDate < myData(i, ColumnsIndex(3) - 1) Then 
      latestDate = myData(i, ColumnsIndex(3) - 1) 
     End If 
    Next 
    GetLatestDateFromData = latestDate 
End Function 

Private Function GetEarliestDateFromData() As String 
    Dim earliestDate As String 
    Dim i As Long 

    earliestDate = myData(1, ColumnsIndex(2) - 1) 

    For i = 1 To UBound(myData, 1) - 1 
     If earliestDate > myData(i, ColumnsIndex(2) - 1) Then 
      earliestDate = myData(i, ColumnsIndex(2) - 1) 
     End If 
    Next 

    GetEarliestDateFromData = earliestDate 
End Function 

問題は私の結果であるということです次のもの:

startingFrom = DateValue(GetEarliestDateFromData) 'returns 01/02/2017, 1st of February 
untilDate = DateValue(GetLatestDateFromData) 'returns 01/06/2017, 1st of June 

私は日付の書式に問題があります。どういうわけか、日と月が混ざり合っている。どうすれば修正できますか?

おかげ

EDIT:(リンクのスレッドで提案されているように)私は、同様の日付が、時間を気にしないのでDateSerialここでは適用されません。 DateSerialは引数としてyear-month-dayだけをとります。

+0

が重複する可能性を文字列を日付形式](http://stackoverflow.com/questions/20672875/vba-convert-string-to-date-format) –

+0

それらが実際に日付である場合、形式は完全に無関係です。 Excelは、1900年1月1日以降の日付と時刻を日付と分数として保存します。 '= MIN(D:D)'は列Dの最も早い日付/時刻を返します。 '= MAX(E:E)'は列Eの最新の日付/時刻を返します –

+1

配列でその関数を使用するには、範囲を1次元配列に置き換えます。 –

答えて

1

日付を修正するには、format関数を使用します。もっと簡単に

date = Format(value, "MM\/DD\/YYYY") 

あなただけの表示形式とは独立している実際の値(例えば、2017年2月1日午前6時07分には42737,2548611111に等しい)を比較することができます。

さらに私は、あなたの範囲で最大vauleを返す、あなたはマックス・機能をExcelにVBAのequvalentあるWorksheetFunction.Max機能を使用し、何かのようなことをお勧めしたい:[VBAの変換の

date = WorksheetFunction.Max(your_used_range) 
+0

したがって、操作を行う前に、Format関数を追加します。フォーマットがDD/MMであることを自動的に理解し、MM/DDに変換しますか? 02/01/2017 06:07から42737.25486に変換するにはどうすればよいですか?これはどのような機能ですか? その最大の機能は面白そうです。あなたがこれらの質問に答えることができれば、私はそれを完全に理解するでしょう、ありがとう! –

+0

Dim dt日付 dt = WorksheetFunction.Min(Range( "D2:D300"))、これは動作しますが、Rangeを使用する代わりに配列を使用してどのようにしますか? –