web-dev-qa-db-ja.com

整数としてのVBA日付

vBAのDate関数の基になる整数を取得する方法はありますか? Excelに保存されている整数を参照して、メモリ内の日付を日数で表します(時間が含まれる場合、浮動小数点数になる可能性があります)。ただし、整数部分にのみ興味があります。そのための別の機能はありますか?

たとえば、today()の場合、40877を取得できます。

君たちありがとう ;)

18
BuZz

日付はVB(A)の整数ではなく、倍精度です。

CDbl()に渡すことで、Dateの値を取得できます。

_CDbl(Now())      ' 40877.8052662037 
_

整数部分を取得するには、使用します

_Int(CDbl(Now())) ' 40877
_

返すだろう 長いです小数点以下を含まないdouble(つまり、Floor()が他の言語で行うこと)。

CLng()またはRound()を使用すると、丸めが行われ、正午12:00以降に呼び出されたときに「将来の日」が返されるため、実行しないでください。

29
Tomalak

CLng(Date)を使用してください。

現在の日付の値は> 32767であるため、LongではなくIntegerを使用する必要があることに注意してください。

10
Jon Egerton

MDateのような日付文字列とtoDayのようなNow()に以下のコード例を使用できます。また、エージングのように両方の日付の差を計算することもできます。

Public Sub test(mdate As String)
    Dim toDay As String
    mdate = Round(CDbl(CDate(mdate)), 0)
    toDay = Round(CDbl(Now()), 0)
    Dim Aging as String
    Aging = toDay - mdate
    MsgBox ("So aging is -" & Aging & vbCr & "from the date - " & _
    Format(mdate, "dd-mm-yyyy")) & " to " & Format(toDay, "dd-mm-yyyy"))
End Sub

注意:日付文字列を有効な日付に変換するためにCDateを使用しました

私はOffice 2007でこれを使用しています:)

1
SftAps
Public SUB test()
    Dim mdate As Date
    mdate = now()
    MsgBox (Round(CDbl(mdate), 0))
End SUB
1
xQbert