#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