Excel VBA – преобразовать текст в дату?

У меня есть столбец дат (столбец A), который хранится в виде текста в формате yyyy-mm-dd, который я пытаюсь преобразовать в даты, в конечном счете, чтобы я мог выполнять поиск по ним.

Я прочитал несколько тем здесь и попробовал некоторые из предложений, но я не могу заставить ничего работать. Один использовал:

Columns("A").Select Selection.NumberFormat = "date" 

Это изменило формат ячеек на сегодняшний день, но фактически не изменило формат значения, которое все еще хранилось в виде текста.

Я понимаю, что мне нужно использовать CDate () для изменения формата значения из текста на сегодняшний день. Я пробовал что-то вроде этого:

 Dim c As Range For Each c In ActiveSheet.UsedRange.columns("A").Cells c.Value = CDate(c.Value) Next c 

Это дает мне ошибку несоответствия типа. Я задавался вопросом, было ли это из-за того, что я пытался сохранить значения даты обратно в неформатную форматированную ячейку, поэтому я попытался объединить ее с .NumberFormat = “date” выше, что тоже не сработало.

Мы ценим любые предложения.

9 Solutions collect form web for “Excel VBA – преобразовать текст в дату?”

Вы можете быстро преобразовать столбец текста, который напоминает даты в фактические даты, с эквивалентом VBA команды Data ► Text-to-Columns.

 With ActiveSheet.UsedRange.Columns("A").Cells .TextToColumns Destination:=.Cells(1), DataType:=xlFixedWidth, FieldInfo:=Array(0, xlYMDFormat) .NumberFormat = "yyyy-mm-dd" 'change to any date-based number format you prefer the cells to display End With 

Массовые операции, как правило, намного быстрее, чем цикл по ячейкам, а метод VBA Range.TextToColumns очень быстрый. Это также позволяет вам установить маску преобразования MDY или DMY или YMD, которая наносит большой урон текстовому ввозу, если формат даты не соответствует региональным настройкам системы. См. Свойство TextFileColumnDataTypes для получения полного списка доступных доступных форматов даты.

Предостережение: будьте осторожны при импорте текста, который некоторые даты еще не были преобразованы. Текстовая дата с двусмысленными целыми числами месяца и дня может быть неверно преобразована; например, 07/11/2015, возможно, были интерпретированы как 07-Nov-2015 или 11-Jul-2015 в зависимости от региональных настроек системы. В таких случаях откажитесь от импорта и верните текст с помощью данных ► Получить внешние данные ► Из текста и укажите маска преобразования даты в мастере импорта текста. В VBA используйте метод Workbooks.OpenText и укажите xlColumnDataType.

Вы можете использовать DateValue для преобразования вашей строки в дату в этом экземпляре

 Dim c As Range For Each c In ActiveSheet.UsedRange.columns("A").Cells c.Value = DateValue(c.Value) Next c 

Он может преобразовать строку формата yyyy-mm-dd непосредственно в значение даты Excel.

Помимо других вариантов, я подтверждаю, что использование

 c.Value = CDate(c.Value) 

работает (просто протестировано с описанием вашего дела, с Excel 2010). Что касается причин получения ошибки несоответствия типа, вы можете проверить (например) это .

Это может быть проблема локали.

Может быть:

 Sub dateCNV() Dim N As Long, r As Range, s As String N = Cells(Rows.Count, "A").End(xlUp).Row For i = 1 To N Set r = Cells(i, "A") s = r.Text r.Clear r.Value = DateSerial(Left(s, 4), Mid(s, 6, 2), Right(s, 2)) Next i End Sub 

Это предполагает, что столбец А содержит текстовые значения, такие как 2013-12-25, без ячейки заголовка.

Этот код работает для меня

 Dim N As Long, r As Range N = Cells(Rows.Count, "B").End(xlUp).Row For i = 1 To N Set r = Cells(i, "B") r.Value = CDate(r.Value) Next i 

Попробуйте изменить столбцы в соответствии с вашим листом

Для OP … Я также получил ошибку несоответствия типа при первом запуске вашей подпрограммы. В моем случае это было связано с данными, не относящимися к дате, в первой ячейке (т. Е. Заголовке). Когда я изменил содержимое ячейки заголовка в txt для тестирования даты, он просто отлично …

Надеюсь, это тоже поможет.

Взрыв из прошлого, но я думаю, что нашел легкий ответ на это. Следующие работали для меня. Я думаю, что это эквивалент выбора ячейки, нажимая F2, а затем нажав enter, что делает Excel распознавать текст как дату.

 Columns("A").Select Selection.Value = Selection.Value 

Я избавился от несоответствия типов, выполнив следующий код:

 Sub ConvertToDate() Dim r As Range Dim setdate As Range 'in my case I have a header and no blank cells in used range, 'starting from 2nd row, 1st column Set setdate = Range(Cells(2, 1), Cells(2, 1).End(xlDown)) With setdate .NumberFormat = "dd.mm.yyyy" 'I have the data in format "dd.mm.yy" .Value = .Value End With For Each r In setdate r.Value = CDate(r.Value) Next r End Sub 

Но в моем конкретном случае у меня есть данные в формате «dd.mm.yy»,

Для DD- MM -YYYY это простой способ обхода строк и дат:

вставьте дату в строку через DD- MMM -YYYY, например 01-11-2017 -> 01-Nov-2017

U может использовать FORMAT (дата, «dd- mmm -yyyy») для ввода дат в строку из листа распространения.

Позже, когда вы выводите его из строки, это не будет путать дни и месяцы.

  • Разделить разделенные запятой записи на новые строки
  • Используйте автофильтр по более чем 2 критериям
  • Удалить ячейки в столбце Excel при строках = 0
  • Показать данные фильтра столбца Excel в ячейках
  • VBA: преобразовать текст в число
  • Открыть html-страницу в браузере по умолчанию с помощью VBA?
  • Как получить цвет фона из Условного форматирования в Excel с помощью VBA
  • Выполнить панель состояния Excel?
  • Управление IE11 «Вы хотите открыть / сохранить» диалоговые windows в VBA
  • Как анализировать XML с помощью vba
  • Запуск макроса Excel из внешнего Excel с помощью VBScript из командной строки
  • Interesting Posts

    jQuery bind click * НИЧЕГО * но * ELEMENT *

    Уровень APM для ноутбука сбрасывается при выходе из Suspend

    В excel, как я могу автоматически изменить содержимое ячейки, если она равна определенному значению

    Когда и как использовать функцию защиты стека GCC?

    Почему мангуста всегда добавляет s в конец имени моей коллекции

    Как изменить значение в раскрывающемся списке Excel

    Как я могу вызвать конкретный метод Java при нажатии / отправке события определенной кнопки в JSP?

    JPA Entity как JSF Bean?

    Полностью воспроизводимые параллельные модели с использованием каретки

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

    Jqgrid – группировка данных уровня строки

    Как определить тип MIME загруженного файла в ASP.NET?

    Смещение фонового изображения справа с помощью CSS

    Захват данных, отправляемых моим модемом ADSL

    Какой носитель следует использовать для долговременного, большого объема, хранения данных (архивирования)?

    Давайте будем гением компьютера.