2015-09-15 3 views
0

У меня есть дата в виде номера, которая выглядит так: 20150529 Есть ли способ конвертировать это в 29/05/2015?Номера к датам

Мне нужно написать макрос для этого.

У меня есть этот код, но он не работает:

Dim Current_Date As Date 
Dim Date_String As String 


Range("K2").Select 
Date_String = Range("K2").Value 
Current_Date = CDate(Date_String) 
Range("Q2").Select 
Range("Q2").Value = Current_Date 
+1

что вы пробовали? Что не сработало? SO - для программирования вопросов, а не для поиска свободных кодеров. –

+0

Dim текущая_дата As Date Dim DATE_STRING As String Range ("К2"). Выберите DATE_STRING = Range ("К2"). Value текущая_дата = CDate (DATE_STRING) Range ("Q2"). Выберите Диапазон («Q2»). Value = Current_Date – Nant

ответ

2

The Range.TextToColumns method может сделать быструю работу одной или нескольких ячеек в выборе или целой колонке 20150629, как даты.

sub YMD_2_Date 
    with selection 
     .TextToColumns Destination:=.cells(1), DataType:=xlFixedWidth, _ 
         FieldInfo:=Array(0, 5) 
    end with 
end sub 

xlColumnDataType property из xlYMDFormat (например) заставляет Excel рассматривать номер как год-месяц-день.

Это может быть расширено от выбора (одной или нескольких ячеек в одном столбце) до нескольких столбцов путем циклического перехода через них.

+0

Splendid. Гораздо эффективнее, чем мой ответ в этом случае. Не знал этого (я слишком стар :) –

1

Вы должны переставить строки в американском формате первого (дд/мм/гггг).
Затем вы можете использовать CDate().

r = Mid(Date_String , 5, 2) & "/" & Right(Date_String , 2) & "/" & Left(Date_String , 4) 
current_date = CDate(r) 
0

Это также работает сейчас

Range("K2", Range("K2").End(xlDown)).Select 
        For Each c In Selection.Cells 
         c.Value = DateSerial(Left(c.Value, 4), Mid(c.Value, 5, 2), Right(c.Value, 2)) 
         'Following line added only to enforce the format. 
         c.NumberFormat = "mm/dd/yyyy" 
         Next 
Смежные вопросы