Обратное преобразование даты в число

Когда вы связываете несколько систем друг с другом возможны всякие…нюансы. Вроде таблицы с числами вида

Числовая дата

Само собой при выгрузке не имелся ввиду июнь 2034 года или 4 августа 2016 года. А конкретные числа 6.34 или 4.08, которые Excel по ошибке попытался преобразовать в даты. Тот же самый механизм, что и если вы введете в любой ячейке любого листа, например, текстом «12-15» и нажмете на Enter. Вы думаете, что вводите числовой диапазон, а Excel думает, что это незавершенная дата вида 12-15-2016 и «помогает» вам дописать его.

Исправить при вводе это автоматическое преобразование можно добавив в начало формулы одинарный апостроф — ‘ . В этом случае неважно что вы введете в значение ячейки (в том числе формулу) — Excel будет считать, что дальше текст.

Само преобразование может пойти по трем путям (в т.ч. в зависимости от региональных разделителей):
1. Если второе число меньше или равно 12. Excel будет пытаться определить в первом числе день, во втором числе месяц
2. Если второе число больше 12, но меньше или равно 29. Excel будет считать первое число месяцем, второе — годом. Год будет считаться от 1900
3. Если второе число больше или равно 30. Excel будет считать первое число месяцем, второе — годом. Год будет считаться от 2000

Итак, причины и механизмы возникновения ошибки ясны. Как поправить? Простая махинация вроде —A2 не поможет ведь после «дописки» значения до даты прошло преобразование и то же число 6.34 это теперь 12 571.

Исправление немного сложнее. Во-первых посмотрим по какому пути пошло преобразование. Если год от этой даты совпадает с текущим годом — значит мы имеем дело с первой ситуацией, в ином случае — ситуация 2 или 3.

Запишем формулу с вложенным ЕСЛИ():

[code]
=ЕСЛИ(ГОД(A2)=ГОД(СЕГОДНЯ());"Ситуация 1";"Ситуация 2 или 3")
[/code]

Для Ситуации 1 мы должны склеить дни (целое число) и номер месяца (дробная часть числа):

[code]
=ДЕНЬ(A2)&","&МЕСЯЦ(A2)
[/code]

Для Ситуации 2 и 3 мы должны взять номер месяца (целое число) и две последние цифры года (дробная часть числа).

[code]
=МЕСЯЦ(A2)&","&ТЕКСТ(A2;"ГГ")
[/code]

Осталось только подставить эти значения в наш ЕСЛИ() в соответствующие группы формулы:

[code]
=ЕСЛИ(ГОД(A2)=ГОД(СЕГОДНЯ());ДЕНЬ(A2)&","&МЕСЯЦ(A2);МЕСЯЦ(A2)&","&ТЕКСТ(A2;"ГГ"))
[/code]
И вуаля. Можем преобразовать хоть 10 000 строк за раз.

Дата в число

PS К сожалению, в ситуации 1 мы не можем точно знать какое число было преобразовано в дату — с нулем, или без него как первый знак после запятой. То есть 4,08 и 4,8 в данном случае будут преобразованы одинаково.

PPS Если на компьютере стоит в качестве разделителя точки — нужно поправить формулу в двойных кавычках должна быть точка.

4 комментария к “Обратное преобразование даты в число”

    • В этом примере если в соседнем столбце прописать функцию Ч() от столбца с преобразованными данными, то результатом будет преобразованные данные (как их понял Excel после вставки), а не первоначальные данные.

      Эта функция возвращает
      0 — для аргумента — текст или ЛОЖЬ
      1 — для аргумента ИСТИНА
      Число — для числового аргумента
      Дату — если аргумент дата

      То есть преобразованием эта функция, к сожалению, не занимается…

      Ответить

Оставьте комментарий

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.