Есть ли альтернативный способ получить второе вхождение dateTime в VBA? - PullRequest
0 голосов
/ 04 февраля 2019

Как искать последнее вхождение DateTime в строке, используя VBA?

Например, учитывая приведенный ниже пример: enter image description here

В моем примерениже, в столбце A, есть заметки с отметкой DateTime.Мне нужно получить последнее вхождение dateTime.Если только заметки содержат только 1 дату и время, тогда мне нужно это получить.Ожидаемый результат находится в столбце B.

Я пытался получить dateTime, но он получает 1-е вхождение.Смотрите мои коды ниже:

Sub test()
    For x = 1 To Cells(Rows.Count, 1).End(xlUp).Row
        Cells(x, 2).Value = Left(Cells(x, 1).Value, 19)
        Cells(x, 2).Select
        Selection.NumberFormat = "yyyy-mm-dd hh:mm:ss"
    Next x
End Sub

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

Это также можно сделать, используя формулу, например, у меня есть следующее в A1

"01/02/2019 testing

04/05/19 test stage


05/09/2019 test3"

И используя следующую формулу

=MID(A1,FIND("@",SUBSTITUTE(A1,"/","@",LEN(A1)-LEN(SUBSTITUTE(A1,"/",""))-1))-2,10)

Я получаю

05/09/2019

Надеюсь, это поможет.

0 голосов
/ 04 февраля 2019

Я считаю, что это должно делать то, что вы ищете.Вы можете вернуться назад после разделения содержимого ячейки и выйти, когда найдете первую действительную дату.

Option Explicit
Private Function GetLastDate(TextRange As Range) As String
    Dim textToParse         As String: textToParse = TextRange.Value
    Dim textArray           As Variant: textArray = Split(textToParse, vbLf)
    Dim possibleDate        As Variant
    Dim i                   As Long
    Dim j                   As Long
    Const textToSplit = " - "

    'Loop backwards
    For i = UBound(textArray) To LBound(textArray) Step -1
        'A Dash Exists
        If (InStr(1, textArray(i), textToSplit) > 0) Then
            possibleDate = Split(textArray(i), textToSplit)

            'Loop forwards
            For j = LBound(possibleDate) To UBound(possibleDate)
                'If it is a date exit
                If IsDate(Trim(possibleDate(j))) Then
                    GetLastDate = Trim(possibleDate(j))
                    Exit Function
                End If
            Next

        End If
    Next

End Function

Sub Example()
    Dim rng As Range: Set rng = ThisWorkbook.Sheets("Sheet1").Range("a1")
    Debug.Print "the last date is: " & GetLastDate(rng)
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...