Я часто получаю наборы данных от клиентов в формате CSV.Я пытаюсь создать набор макросов Excel VBA для предварительной очистки данных.В частности, у меня есть проблема с датами.
В наборе, который я сейчас смотрю, некоторые поля дат содержат даты, отформатированные таким образом:
2016-03-25 14:18:03
В то время как другие отформатированынапример:
2016-03-25 14:18:02.566000
Когда Excel открывает CSV, первый формат, без долей секунды, отображается как 25.03.2016 14:18, а когда выбрана эта ячейка, формулабар содержит 25.03.2016 14:18:03.Для второго формата он отображается в формате mm: ss.0 (18: 02.6), и если я выбираю поле в excel, он отображается так же, как первый в строке формул.
I 'Я пытаюсь написать свой макрос, чтобы определить, является ли поле датой.Функция IsDate
идентифицирует только первый формат как дату.Когда я смотрю, какое значение передается для второго значения, оно, очевидно, преобразовало дату в десятичное значение (в данном случае 42454.59586080556
).Когда я пытаюсь отформатировать это как дату, выдается ошибка.
В настоящее время в Excel VBA я перебираю все используемые ячейки в активном листе (ActiveSheet.UsedRange.Cells
).Затем для каждой ячейки я использую: If IsDate(Cell.Value) Then
и, если она определена как дата, она форматируется в указанном мной формате вывода.Однако, когда он передается в десятичном виде, это не дата, поэтому он пропускает форматирование.
У меня есть другие поля, которые являются целыми и десятичными в данных, поэтому я не могу просто добавить еще одно выражение if вобрабатывать значение, если оно получено таким образом.
Единственное, о чем я могу думать сейчас, - это попытаться преобразовать десятичное число в дату (я видел способ для этого, но, похоже, не могу найтив данный момент), ТО проверяет, находится ли он в ожидаемом диапазоне, а если нет, то сохраните десятичную дробь и, если это так, сохраните дату.Но это не представляется жизнеспособным.
Я мог бы написать это, чтобы указать столбцы, но данные не всегда поступают со столбцами в одинаковом порядке (разные источники, разные форматы).
Основная проблема заключается в том, что Excel пытается перевести данные в поле при открытии файла.Кажется, я не могу найти способ помешать Excel сделать это.
Итак ... у кого-нибудь есть хорошие идеи?Прямо сейчас мне нужно открыть файлы и вручную переформатировать даты в каждом файле ... и когда некоторые из файлов содержат миллионы строк данных, это занимает очень много времени для практического процесса.