Обычно это можно решить с помощью функции DATEVALUE для преобразования даты, которая является текстовой, в значение даты Excel (т. Е. Число, которое Excel распознает как дату). Использование будет DATEVALUE (date_string или cell_address).
Однако это не сработает, потому что 1) день предшествует месяцу в строках вашего примера, а DATEVALUE ожидает, что за месяцем следует день, и 2) для некоторых строк даты также включается время.
Вот альтернатива формулы массива, которая работает с примерами, которые вы предоставили. Он должен быть введен с помощью комбинации клавиш Control - Shift - Enter .
=DATE(
RIGHT(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8),MATCH("/",MID(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8),LEN(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8))-ROW(1:25),1),0)),
LEFT(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8),SEARCH("/",IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8))-1),
LEN(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8))-MATCH("/",MID(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8),LEN(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8))-ROW(1:25),1),0)-LEN(LEFT(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8),SEARCH("/",IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8))+1)))
)
Эта очень сложная формула массива (я надеюсь, что кто-то может предложить более простую) использует функцию DATE для построения значения даты в Excel. (При создании даты у меня была оригинальная строка даты в ячейке F8.)
Строка даты, которую необходимо преобразовать, не может использоваться в необработанном виде, поскольку иногда она содержит время. Вместо этого используется RIGHT(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8)
. Эта формула ищет пробел в строке даты. Если он находит пробел, он использует функцию LEFT, чтобы получить все символы слева от пробела; если он не находит пробел, он просто возвращает исходную строку.
Самая внешняя часть формулы - это функция DATE: если заданы год, месяц и день, она возвращает дату в формате Excel. Я разбил расчет этих трех частей в коде выше.
Год рассчитывается следующим образом:
- Переверните строку даты (с отсечением времени, как описано выше).
- Найдите позицию первого символа "/" в этой перевернутой строке, используя функцию ПОИСК (эта косая черта фактически является первой косой чертой в строке необратимой даты.)
- Возьмите столько символов справа от строки даты с помощью функции RIGHT.
Расчет месяца состоит из следующих этапов:
- Найти позицию первой косой черты в строке необратимых дат.
- Определите количество символов в месяце (которое может быть 1 или 2), рассчитав разницу между этой позицией и позицией второй буквы "/", определенной в расчете года.
- Используйте функцию MID для возврата символов между первым слешем и вторым слешем.
Расчет дня самый простой.
- Вычислите позицию первого "/", используя тот же метод, что и при расчете месяца.
- Возьмите столько символов (минус 1) с левой стороны строки, используя функцию ВЛЕВО.
Есть менее сложные способы получения результата, самым простым из которых, несомненно, будет использование команды «Текст в столбцы» на вкладке «Данные» на ленте, как предлагает @Barry.
Другой способ продолжить - использовать функцию сопоставления с шаблоном REGEX. Эта функция не встроена в Excel, но может быть создана и доступна с помощью кода VBA. Хотя код немного сложнее, в сети доступно несколько версий (например, этот пример). Однако использовать функцию было бы очень просто. Например, выражение соответствия для получения Дня может быть чем-то вроде REGEXP("./",F8)
, которое затем можно использовать в функции DATE для получения значения даты в Excel.
Для удобства приведу формулу в ее полной форме.
=DATE(RIGHT(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8),MATCH("/",MID(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8),LEN(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8))-ROW(1:25),1),0)),LEFT(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8),SEARCH("/",IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8))-1),MID(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8),LEN(LEFT(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8),SEARCH("/",IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8))+1)),LEN(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8))-MATCH("/",MID(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8),LEN(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8))-ROW(1:25),1),0)-LEN(LEFT(IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8),SEARCH("/",IFERROR(LEFT(F8,IFERROR(SEARCH(" ",F8),0)-1),F8))+1))))