Преобразование сохраненной строки с разделителями строк обратно в даты, запятые (десятичный разделитель), удаленные из нее

В листе, который я делаю, я храню старые данные в виде строк с разделителями строк.

Функция для хранения данных такова:

target_cell.Offset(0, i) = Join(Application.WorksheetFunction.Transpose(source_range(i).Resize(, 1)), "|") 

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

 42145,5416666662|42145,6249999996|42145,2083333329|42144,8333333329|42145,9999999996 

Теперь, иногда, я хочу взглянуть на мои старые данные и, следовательно, попытаться записать их на листе. Часть моего кода, которая выглядит так:

  temp_arr = Split(source_cell.Offset(0, i), "|", -1, vbTextCompare) target_range(i).Resize(, 1) = Application.WorksheetFunction.Transpose(temp_arr) For Each c In target_range(i).Resize(, 1) If Not IsEmpty(c) Then c = CDate(c) c.NumberFormat = "dd. mmm kl. hh" End If Next 

Тем не менее, я получаю ошибку переполнения в строке c = CDate(c) , и когда я просматриваю рабочий лист, то значения, которые я нахожу, это 421455416666662 , 421456249999996 и т. Д., Другими словами, похоже, что запятые были удалены из значений где-то по пути их записи на рабочий лист.

Кто-нибудь из вас понял, какой шаг в этом процессе удаляет запятые, и что я могу сделать, чтобы этого избежать?

Запятая разделяется, потому что Excel может ошибочно считать, что это разделитель тысяч .

EDIT # 1

Используя ваши данные, я побежал:

 Sub ytrewq() Dim s As String, D As Date s = "42145,5416666662" s = Replace(s, ",", ".") Range("A1").Value = s D = CDate(Range("A1").Value) MsgBox D End Sub 

и получил:

введите описание изображения здесь

Я просто не знаю, будет ли это работать для вашего региона.

Вы можете обрабатывать ошибку времени выполнения 6 / Overflow:

  On Error GoTo ErrHandler Dim value As String For Each c In target_range(i).Resize(, 1) If Not IsEmpty(c) Then value = c.value c.Value = CDate(value) c.NumberFormat = "dd. mmm kl. hh" End If Next CleanExit: Exit Sub 'Function? ErrHandler: If Err.Number = 6 Then 'overflow value = Left$(value, 5) & "," & Right$(value, Len(value) - 5) Resume Else MsgBox "Unhandled error: " & Err.Description Resume CleanExit End If 

Этот обработчик предполагает, что единственная возможная ошибка переполнения заключается в том, что преобразование value в Date переполнения по указанной вами причине. Не может быть идеальным. Он также принимает региональные настройки и что числовая дата имеет 5 цифр. Это должно быть так, если только ваши данные действительно не старые.

Изменение c = CDate(c)c = CDate(c.Text)

Interesting Posts

Ошибки при вложении формул IF ()

Применение VBA к переименованным вкладкам и всем вкладкам в книге

PHPExcel, скопировать лист из одного в другой.

Как выполнить цикл с помощью вторичных (дочерних) полей таблицы сводных таблиц Excel?

Добавить текстовое значение в соседний целевой диапазон с помощью макроса Vlookup

Фильтровать только для отображения данных после даты, которая вводится в ячейку

Excel VBA – нажмите кнопку, когда кнопки имеют одно и то же имя

EXCEL VBA: Сравнить, затем обновить / изменить, удалить и добавить между двумя листами

Как рассчитать квантили для нормального-обратного распределения Гаусса в Excel

Таблица Excel с несколькими массивами в список

Как открыть все файлы подстановочных файлов из созданного списка путей к файлу?

Экспорт в Excel не работает

Ошибка vlookup в excel

Реализованный код в большую книгу и Loop through делает некоторые фанки-вещи Excel VBA

Как открыть .xlsx-файлы в Android?

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