Вы вводите в 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, что ячейка должна содержать текст, а не число или дату. Программа не будет пытаться «угадать» формат автоматически.
Как сделать:
- Выделите ячейки или столбец, куда будете вводить данные.
- Нажмите правой кнопкой →
Формат ячеек(илиCtrl+1). - В окне формата выберите категорию Текстовый →
ОК.
Теперь при вводе 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.
Пошаговая инструкция:
- Перейдите на вкладку
Данные→Получить данные→Из файла→Из текстового/CSV. - Выберите файл и нажмите
Импорт. - В окне предварительного просмотра выделите столбец с числами.
- В верхнем меню измените тип данных с
ДатанаТекстилиЦелое число. - Нажмите
Загрузить.
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 для конкретного файла:
- Откройте
Файл → Параметры → Дополнительно. - Прокрутите до раздела
Параметры редактирования. - Снимите галочку с
Автоматически вставлять десятичную запятую. - Нажмите
Параметры автозамены→ вкладкаАвтоформат при вводе→ снимите галочку сЗначения, начинающиеся с.
Для глобальных изменений (все файлы):
- Закройте Excel.
- Откройте
Панель управления → Часы и регион → Изменение форматов даты, времени и чисел. - Выберите формат, где разделителем дат является не точка (например, дефис).
Что делать если настройки 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
Как использовать:
- Нажмите
Alt+F11, чтобы открыть редактор VBA. - Вставьте код в новый модуль (
Insert → Module). - Выделите проблемные ячейки в 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.
Можно ли отключить автоформат навсегда для всех файлов?
Нет, глобальной настройки не существует. Но можно:
- Создать шаблон файла с текстовым форматом для часто используемых столбцов.
- Настроить VBA-макрос, который будет запускаться при открытии любого файла (через
Personal.xlsb). - Использовать 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 при экспорте может конвертировать даты в свой внутренний формат. Решения:
- Перед экспортом примените к ячейкам текстовый формат.
- Используйте Power Query для экспорта:
Данные → Получить данные → Из таблицы/диапазона → Экспортировать. - Экспортируйте в TSV (табулированный текст) — там меньше проблем с автоформатом.
- Откройте CSV в Блокноте, скопируйте данные и вставьте их в новый файл с расширением
.txt, затем переименуйте обратно в.csv.