Преобразование текста в формат даты в гггг / мм / дд

#excel #vba

#excel #vba

Вопрос:

Когда отчет экспортируется из нашей системы, даты отображаются как «гггг / название месяца».

Я попытался изменить их на формат даты, создав пользовательский в Excel> вкладка Главная. Только когда я нажимаю на один столбец и конвертирую его в текст, он изменится на формат даты, с общего «2015 March» на дату 2015/03/01.

Пользовательский формат не работает
введите описание изображения здесь

Сейчас я пытаюсь запустить макрос для преобразования всех столбцов, содержащих эти даты месяца / года, в текст, поскольку я не нашел другого способа исправить сообщение 1004.

 Sub Text_to_columns()
'
' Text_to_columns Macro
'

'
Range("H2").Select
Range(Selection, Selection.End(xlToRight)).Select
Selection.Replace What:=" / ", Replacement:=" ", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2
        

Dim col As Range
Dim i As Integer
For i = 8 To 300
    
    Selection.TextToColumns Destination:=Cells(2, i), DataType:=xlDelimited, _
      TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
      Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
      :=Array(1, 5), TrailingMinusNumbers:=True

Next i

End Sub
  

Он показывает

Ошибка 1004
Microsoft может конвертировать только один столбец за раз

Как я могу это исправить? Есть ли другой способ преобразовать этот текст в даты?

Комментарии:

1. Каков результат (в окне сообщения) следующей процедуры: Sub showNumberFormat(): MsgBox Range("H2").NumberFormat: End Sub . Просто скопируйте / вставьте и запустите.

Ответ №1:

Ваш вопрос неясен, но я думаю, вы хотите изменить текстовые значения в этих ячейках на формат даты, отформатированный определенным образом.

Я предлагаю что-то вроде (и вам придется изменить некоторые константы в соответствии с вашими особенностями):

 Option Explicit
Sub convToDate()
    Const firstCol As Long = 8
    Dim lastCol As Long
    Const myRow As Long = 2
    Dim WS As Worksheet
    Dim I As Long, x As Variant
    
'Set worksheet variable
Set WS = ThisWorkbook.Worksheets("sheet1")

'Find the last column
With WS
    lastCol = .Cells(myRow, .Columns.Count).End(xlToLeft).Column

'convert contents to date
    For I = firstCol To lastCol
        x = .Cells(myRow, I)
        If IsDate(x) Then .Cells(myRow, I) = CDate(x)
    Next I
    '.Range(.Cells(myrow,firstcol),.Cells(myrow,lastcol)).NumberFormat = "whatever format you want"
    'If you really want to convert these to text, use the VBA Format function

End With

End Sub