1

文字列を日付に変換しようとしています

a = Datumo: 16.09.2012.

d = Mid(a, 9, 2) ' 16 - should be the day
m = Mid(a, 12, 2) ' 09 - month
y = Mid(a, 15, 4) ' 2012 - year

Dim dt As Date 
dt = DateValue(d, m, y) ' Error line 
dt = DateAdd("d", 1, dt) ' should be 17.09.2012.

どうすればこれを行うことができますか?

4

3 に答える 3

3

DateValueそれは, replaceの正しい使い方ではありません

dt = DateValue(d, m, y) ' Error line 
dt = DateAdd("d", 1, dt) ' should be 17.09.2012.

dt = DateSerial(y, m, d) 
dt = DateAdd("d", 1, dt)

また

dt = 1 + DateAdd("d", 1, dt)
于 2012-09-19T13:23:40.580 に答える
1

VBA/Excel は、しばしば日付を決定しようとし、それを間違えます。

例えば

dt = DateSerial(2012, 14, 42) 'returns #14/03/2013#

dtReal = IsDate("09 / 14 / 2012") 'returns TRUE when we really wanted to test dd/mm/yyyy - there's no 14th month.

私はよく以下のコードを使用します。これは、文字列の日付が本物かどうかを判断し、日付として返す、より長くても確実な方法です。

Option Explicit

    Sub test()
    Dim testDate As Boolean
    Dim dt As Date

    testDate = IsTextDate("05/07/2012", dt, "dd/mm/yyyy") 'Could pass "mm/dd/yyyy" instead
    If testDate = True Then
        Debug.Print "Valid Date " & Format(dt, "dd-mmm-yyyy")
    Else
        Debug.Print "Invalid Date"
    End If
    End Sub

    Function IsTextDate(ByVal str As String, ByRef dt As Date, Optional dtFormat As String = "dd/mm/yyyy") As Boolean
    Dim D As Date
    Dim day As Integer
    Dim month As Integer
    Dim year As Long
    Dim daysinFeb As Integer
    Dim dtArray() As String

    'Test input string mask matches date format
    If Not (str Like "##/##/####") Then
        'Debug.Print "Invalid Date"
        Exit Function
    Else
        'split string on delimiter and extract correct 'dd' and 'mm' based on UK/US format
        dtArray = Split(str, "/")
        year = CInt(dtArray(2))
        If dtFormat = "dd/mm/yyyy" Then
            day = CInt(dtArray(0))
            month = CInt(dtArray(1))
        Else
            day = CInt(dtArray(1))
            month = CInt(dtArray(0))
        End If

        'determine days in Feb for year given.
        If IsDate("2/29/" & year) Then
            daysinFeb = 29
        Else
            daysinFeb = 28
        End If

        'determine if date is valid
        Select Case month
            Case 9, 4, 6, 11
                '30 days
                If day <= 30 Then IsTextDate = True

            Case 1, 3, 5, 7, 8, 10, 12
                '31 days
                If day <= 31 Then IsTextDate = True

            Case 2
                'either 28 or 19 days
                If day <= daysinFeb Then IsTextDate = True

        End Select
        If IsTextDate Then dt = DateSerial(year, month, day)

    End If

    End Function
于 2012-09-19T14:50:31.893 に答える
1

関数を見てくださいDatePart;)

エクセルヘルプから:

Dim Datum1 As Date    ' Variablen deklarieren.
Dim Msg
Datum1 = InputBox("Geben Sie ein Datum ein:")
Msg = "Quartal: " & DatePart("q", Datum1)
MsgBox Msg

また、有効な日付の一部を取得する特定の関数があります。

Day()
Month()
Year()

エクセルヘルプの例:

Dim Datum1, Tag1
Datum1 = #12. Februar 1969#    ' Datum zuweisen.
Tag1 = Day(Datum1)    ' Tag1 enthält 12.
于 2012-09-19T13:19:12.747 に答える