Почему Excel меняет числа на даты и как это исправить навсегда

Вы вводите в Excel число типа 1-12 или 03.04, а программа упорно превращает его в 1-декабря или 3-апреля? Это не баг, а «фича» — автопреобразование форматов, которая экономит время... когда работает правильно. Но если вам нужны именно числа, а не даты, борьба с автоформатированием может занять часы. Особенно досадно, когда после импорта данных из CSV или базы все значения suddenly становятся датами, а вернуть оригинальные цифры уже невозможно.

Проблема усложняется тем, что Microsoft Excel (включая версии 2016, 2019, 2021 и Microsoft 365) не имеет единой кнопки «отключить автоформат навсегда». Решение зависит от контекста: вы вводите данные вручную, импортируете их, или работаете с формулами? В этой статье — 7 проверенных способов заблокировать преобразование чисел в даты, включая малоизвестные трюки с LOCALE и настройками реестра. А еще — таблица совместимости методов для разных версий Excel и Google Sheets.

Спойлер: самый надежный способ — предварительное форматирование ячеек, но он не сработает, если данные поступают из внешних источников. Для таких случаев пригодятся обходные пути с текстовыми функциями или даже VBA-скриптами. Далее — по порядку, от простого к сложному.

1. Предварительное форматирование ячеек как текст

Это базовый метод, который работает в 90% случаев. Суть: вы заранее сообщаете Excel, что ячейка должна содержать текст, а не число или дату. Программа не будет пытаться «угадать» формат автоматически.

Как сделать:

  1. Выделите ячейки или столбец, куда будете вводить данные.
  2. Нажмите правой кнопкой → Формат ячеек (или Ctrl+1).
  3. В окне формата выберите категорию ТекстовыйОК.

Теперь при вводе 10-12 или 05.06 значения останутся неизменными. Минус метода: если данные уже импортированы как даты, их придется конвертировать обратно (об этом — в разделе про функции).

Выделить диапазон ячеек|Открыть Формат ячеек (Ctrl+1)|Выбрать категорию "Текстовый"|Подтвердить изменения-->

⚠️ Внимание: Текстовый формат отключает математические операции в этих ячейках. Если позже вам понадобится сложить или умножить числа, придется конвертировать их обратно в числовой формат с помощью функции =ЗНАЧЕН().

2. Использование апострофа перед вводом

Быстрый способ для разовых вводов: добавьте ' (апостроф) перед числом. Excel воспримет его как текстовый префикс и не будет преобразовывать значение. Например:

  • 📌 Введите '1-12 → отобразится как 1-12 (а не 1-декабря).
  • 📌 Введите '05.06 → останется 05.06 (а не 5-июня).

Апостроф не отображается в ячейке, но виден в строке формул. Этот метод удобен для небольших наборов данных, но неприменим при импорте из CSV или баз.

💡 Лайфхак: Если апострофы мешают при дальнейшей обработке (например, при экспорте в SQL), используйте функцию =ПОДСТАВИТЬ(A1;""";""), чтобы удалить их позже.

3. Импорт данных через Power Query (без автоформата)

Если числа преобразуются в даты при импорте из CSV, XML или базы данных, стандартное открытие файла через Файл → Открыть не поможет. Вместо этого используйте Power Query — инструмент для загрузки и трансформации данных, доступный в Excel 2016+ и Microsoft 365.

Пошаговая инструкция:

  1. Перейдите на вкладку ДанныеПолучить данныеИз файлаИз текстового/CSV.
  2. Выберите файл и нажмите Импорт.
  3. В окне предварительного просмотра выделите столбец с числами.
  4. В верхнем меню измените тип данных с Дата на Текст или Целое число.
  5. Нажмите Загрузить.

Power Query сохраняет оригинальный формат и не применяет автопреобразования. Этот метод незаменим для работы с большими наборами данных.

Через Файл → Открыть|Через Power Query|Копирую из веб-страницы|Использую VBA|Другой способ-->

4. Применение функций для принудительной конвертации

Если данные уже импортированы как даты, их можно вернуть в исходный вид с помощью функций. Вот ключевые варианты:

Цель Функция Пример Результат
Преобразовать дату в текст =ТЕКСТ(A1;"0") Ячейка содержит 05.06.2023 45087 (серийный номер даты)
Получить день/месяц как число =ДЕНЬ(A1) или =МЕСЯЦ(A1) Ячейка содержит 05.06.2023 5 или 6
Вернуть оригинальный текст (если дата была текстом) =ПОЛУЧИТЬ.ДАННЫЕ.ЯЧЕЙКИ(A1;12) (только для Excel 365) Ячейка отображает 05.06, но хранит 05.06.2023 05.06 (если изначально был текст)

Для сложных случаев (например, когда даты импортированы как 10-Oct) комбинируйте функции:

=ЗНАЧЕН(ПОДСТАВИТЬ(ПОДСТАВИТЬ(A1;"-";".");"Jan";"01")...)

⚠️ Внимание: Функция =ЗНАЧЕН() вернет ошибку, если текст нельзя преобразовать в число (например, abc123). Проверяйте данные заранее!

5. Настройка региональных параметров (LOCALE)

Excel использует региональные настройки системы для интерпретации форматов дат. Например, в русской версии 01.02 станет 1-февраля, а в американскойянварем 2-м. Если вы работаете с международными данными, этот нюанс может все испортить.

Как изменить LOCALE для конкретного файла:

  1. Откройте Файл → Параметры → Дополнительно.
  2. Прокрутите до раздела Параметры редактирования.
  3. Снимите галочку с Автоматически вставлять десятичную запятую.
  4. Нажмите Параметры автозамены → вкладка Автоформат при вводе → снимите галочку с Значения, начинающиеся с.

Для глобальных изменений (все файлы):

  1. Закройте Excel.
  2. Откройте Панель управления → Часы и регион → Изменение форматов даты, времени и чисел.
  3. Выберите формат, где разделителем дат является не точка (например, дефис).
Что делать если настройки LOCALE заблокированы администратором?

В корпоративных сетях параметры LOCALE могут управляться групповой политикой. В этом случае:

1. Попробуйте открыть файл в Google Sheets — там настройки более гибкие.

2. Используйте VBA-скрипт для принудительного форматирования:

Range("A1:A100").NumberFormat = "@"

3. Экспортируйте данные в CSV и импортируйте заново через Power Query с ручным указанием форматов.

6. Решение через VBA (для продвинутых пользователей)

Если автоформат портит данные систематически, автоматизируйте исправление с помощью VBA. Ниже скрипт, который принудительно устанавливает текстовый формат для выделенного диапазона:

Sub ForceTextFormat()

Dim rng As Range

For Each rng In Selection

rng.NumberFormat = "@"

rng.Value = rng.Value ' Принудительное обновление

Next rng

End Sub

Как использовать:

  1. Нажмите Alt+F11, чтобы открыть редактор VBA.
  2. Вставьте код в новый модуль (Insert → Module).
  3. Выделите проблемные ячейки в Excel и запустите макрос (F5).

Для автоматического применения при открытии файла добавьте код в событие Workbook_Open:

Private Sub Workbook_Open()

Sheets("Лист1").Range("A:A").NumberFormat = "@"

End Sub

7. Альтернативы: Google Sheets и специализированное ПО

Если борьба с Excel кажется бесконечной, рассмотрите альтернативы:

  • 📊 Google Sheets: Автоформат дат здесь менее агрессивный. Чтобы отключить его полностью, используйте Формат → Числа → Обычный текст.
  • 📈 LibreOffice Calc: В настройках (Сервис → Параметры → LibreOffice Calc → Ввод) можно отключить Преобразование в даты.
  • 💾 CSV-редакторы: Программы вроде Notepad++ или VS Code позволяют редактировать сырые данные без автоформатирования.

Для работы с большими данными (например, логами или дампами баз) лучше использовать Python с библиотекой pandas:

import pandas as pd

df = pd.read_csv('data.csv', dtype={'column_name': str}) # Принудительный текстовый формат

FAQ: Частые вопросы по автоформату чисел

Почему Excel меняет 1-12 на 1-декабря, даже если я установил текстовый формат?

Это происходит, если данные импортируются из внешнего источника (например, CSV или SQL). Excel игнорирует формат ячеек при импорте и применяет автоопределение. Решение: используйте Power Query (раздел 3) или импортируйте данные как текст через VBA.

Можно ли отключить автоформат навсегда для всех файлов?

Нет, глобальной настройки не существует. Но можно:

  1. Создать шаблон файла с текстовым форматом для часто используемых столбцов.
  2. Настроить VBA-макрос, который будет запускаться при открытии любого файла (через Personal.xlsb).
  3. Использовать Google Sheets или LibreOffice Calc, где автоформат менее навязчивый.

Как вернуть оригинальные числа, если Excel уже преобразовал их в даты?

Если даты хранятся как серийные номера (например, 45087 для 05.06.2023), используйте:

  • Для извлечения дня: =ДЕНЬ(A1)
  • Для извлечения месяца: =МЕСЯЦ(A1)
  • Для извлечения года: =ГОД(A1)
  • Для получения текста в формате ДД.ММ: =ТЕКСТ(A1;"дд.мм")

Если даты были текстом (например, 05.06), но Excel их "исправил", попробуйте =ПОЛУЧИТЬ.ДАННЫЕ.ЯЧЕЙКИ(A1;12) (только для Excel 365).

Почему в некоторых ячейках числа остаются числами, а в других становятся датами?

Это зависит от:

  • 🔹 Формата ячейки: Если ячейка была отформатирована как Общий или Числовой, а вы ввели 1-12, Excel воспримет это как дату.
  • 🔹 Региональных настроек: В американском формате 01/02 — это 1-февраля, а в европейском — 1-е января или 2-е февраля (в зависимости от версии).
  • 🔹 Источника данных: При импорте из CSV Excel анализирует первые 8 строк, чтобы "угадать" формат. Если majority значений похожи на даты, он применит автоформат ко всему столбцу.

Как экспортировать данные в CSV так, чтобы числа не стали датами?

Проблема в том, что CSV — это текстовый формат, и Excel при экспорте может конвертировать даты в свой внутренний формат. Решения:

  1. Перед экспортом примените к ячейкам текстовый формат.
  2. Используйте Power Query для экспорта: Данные → Получить данные → Из таблицы/диапазона → Экспортировать.
  3. Экспортируйте в TSV (табулированный текст) — там меньше проблем с автоформатом.
  4. Откройте CSV в Блокноте, скопируйте данные и вставьте их в новый файл с расширением .txt, затем переименуйте обратно в .csv.