Если вам не нужен VBA для какой-либо другой части вашего проекта, это также можно сделать с помощью формул рабочего листа:
=AGGREGATE(15,6,DATEVALUE(MID(SUBSTITUTE(A1," ",REPT(" ",99)),seq_99,99)),1)
, где seq_99
- именованная формула и относится к:
=IF(ROW($A$1:INDEX($A:$A,255,1))=1,1,(ROW($A$1:INDEX($A:$A,255,1))-1)*99)
*seq_99
создает массив чисел {1;99;198;297;396;495;...
Отформатируйте ячейку с формулой как Дата некоторого типа.
Если даты отсутствуют, будет возвращена ошибка, которую вы можете оставить или обернуть функцию в IFERROR(your_formula,your_error_message)
Алгоритм
- Разделить ячейку на пробелы
- Заменить каждый пробел на 99 пробелов
- Используя функцию
MID
, вернуть массив подстрок длиной 99 символов
- Примените функцию
DATEVALUE
, которая будет возвращать либо ошибку (если подстрока не является датой), либо серийный номер даты. - Поскольку даты в Excel являются серийными номерами с 1/1 /1900, мы можем использовать функцию
AGGREGATE
, чтобы выбрать значение и игнорировать ошибки.