Формат даты VBA - PullRequest
       0

Формат даты VBA

0 голосов
/ 31 января 2020

Я хочу внедрить этот записанный макрос в макрос для моего кода, я успешно преобразовал строку "E" в общую, и я хочу изменить эту дату в формат короткой даты DD / MM / YYYY, макрос, который я записал, - это тот ниже:

Sub Macro2()
'
' Macro2 Macro

    Range("L4").Select
    ActiveCell.FormulaR1C1 = "=DATEVALUE(MID(RC[-7],1,10))"
    Range("L4").Select
    Selection.AutoFill Destination:=Range("L4:L4500"), Type:=xlFillDefault
    Range("L4:L4500").Select
    Selection.NumberFormat = "m/d/yyyy"
End Sub

Я попытался сделать это, поместив функцию в столбец L, если это возможно, я хотел бы реализовать ее в одном столбце, чтобы все значения изменились, а затем вставить их в столбец E

Весь столбец E выглядит следующим образом:

  • 01-10-2019 52: 59: 76
  • 02-10-2019 52: 59: 76
  • 02-10-2019 52: 59: 76
  • 05-10-2019 52: 59: 76

И я хочу, чтобы они превратились в

  • 01/10/2019
  • 02/10/2019
  • 02/10/2019
  • 05/10/2019

Этот код я использовал, чтобы преобразовать все данные столбца E в формат дд-мм-гггг чч: мм: сс, чтобы исправить ошибку, связанную с изменением некоторых данных в неправильный формат

With ActiveSheet.UsedRange.Columns("E").Cells
    Columns("E").NumberFormat = "0"
    Columns("E").NumberFormat = "General"
End With

1 Ответ

0 голосов
/ 31 января 2020

Если в '01 -10-2019 52:59:76 'первые две цифры означают день, попробуйте следующий код:

Sub testDateFormat()
  Dim lastRow As Long, sh As Worksheet, x As String, i As Long
    Set sh = ActiveSheet 'use here your sheet, if not active one
     lastRow = sh.Range("E" & sh.Rows.count).End(xlUp).Row
     sh.Range("E1:E" & lastRow).NumberFormat = "dd/mm/yyyy"

    For i = 2 To lastRow
        If sh.Range("E" & i).Value <> Empty Then
            If chkFind(CStr(sh.Range("E" & i).Value)) = True Then
               x = CStr(sh.Range("E" & i).Value)
               sh.Range("E" & i).Value = Format(DateSerial(Split(left(x, WorksheetFunction.Find(" ", x) - 1), "-")(2), _
                           Split(left(x, WorksheetFunction.Find(" ", x) - 1), "-")(1), _
                           Split(left(x, WorksheetFunction.Find(" ", x) - 1), "-")(0)), "dd/mm/yyyy")
            Else
                Debug.Print "Unusual string on the row " & i
            End If
        End If
    Next i
End Sub
Private Function chkFind(strVal As String) As Boolean
    On Error Resume Next
     If WorksheetFunction.Find(" ", strVal) = 11 Then
        chkFind = True
        If Err.Number <> 0 Then
           Err.Clear
           On Error GoTo 0
           chkFind = False
        End If
     Else
        chkFind = False
     End If
     On Error GoTo 0
End Function

Если первые цифры представляют месяц, то последние два массива ( разделить) элементы должны быть наоборот:

Split(left(x, WorksheetFunction.Find(" ", x) - 1), "-")(0), _ Split(left(x, WorksheetFunction.Find(" ", x) - 1), "-")(0))

вместо

Split(left(x, WorksheetFunction.Find(" ", x) - 1), "-")(1), _ Split(left(x, WorksheetFunction.Find(" ", x) - 1), "-")(1))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...