Страницы: 1
RSS
Преобразовать текст в дату
 
Здравствуйте, нужно преобразовать текст 160201 в дату 16.02.2001  
 
Если использовать cell.Offset(, 0) = Format(cell, "00/00/00")  
получается текст 16/02/01 - нужна дата  
 
подредактируйте код пожалуйста или напишите лучший вариант
 
=ДАТА(2000+ПСТР(D11;5;2);ПСТР(D11;3;2);ПСТР(D11;1;2))
 
cell.Offset(, 0) = DateValue(Format(cell, "00/00/00"))  
 
Внимание! Это будет работать правильно на компьютерах, где системный формат даты "DD/MM/YYYY". Если в системе порядок дня и месяца противоположный (например US), то дата не будет распознана или будет распознана неверно.    
 
Если необходимо хранить даты в текстовом формате, то лучше это делать в универсальном формате ISO, т.е. "YYYYMMDD".    
 
Например:  
 
DateValue(Format("20010116", "0000-00-00"))  
 
будет распознано правильно в любой локали.
KL
 
мне надо "DD/MM/YYYY" смотрите файл
 
{quote}{login=Равиль}{date=10.09.2009 07:17}{thema=}{post}мне надо "DD/MM/YYYY" смотрите файл{/post}{/quote}  
Смотрите мой предыдущий ответ (подсказка: первая строка)  
 
Если же вам надо формулой, я бы сделал так:  
 
=--ТЕКСТ(A1;"00-00-00")
KL
 
И даже с cell.Offset(, 0) = DateValue(Format(cell, "00/00/00"))  
текст получается смотрите сами (вложенный файл) а формулой не вариант, т.к у мне преобрзовать надо 300 тыс. строк.
 
Это от того, что у вас ячейки отформатированы как ТЕКСТ ;-)  
 
Попробуйте вот так:  
 
Sub CreateTime()  
Dim cell As Range, ra As Range: Application.ScreenUpdating = False  
 
Set ra = Range([C1], Range("C" & Rows.Count).End(xlUp))
ra.NumberFormat = "General"  
For Each cell In ra.Cells  
   cell.Offset(, 0) = Format(cell, "00/00/00")  
Next cell  
End Sub  
 
А для 300 тыс. лучше - вот так  
 
Sub CreateTime2()  
   Dim cell As Range, ra As Range: Application.ScreenUpdating = False  
   Set ra = Range([C1], Range("C" & Rows.Count).End(xlUp))
   ra.NumberFormat = "General"  
   ra.Value = Evaluate("TEXT(" & ra.Address(, , , True) & ",""00-00-00"")")  
End Sub
KL
Страницы: 1
Наверх