Удаление лишних символов и сохранение чисел в Excel

Иван Корнев·21.05.2024·4 мин

Чтобы оставить в ячейке Excel только цифры, используйте формулу массива (для новых версий) или функцию TEXTJOIN в сочетании с MID и ISNUMBER. Для больших таблиц эффективнее применить надстройку Power Query с функцией Text.Select, а для разовой быстрой очистки — простой макрос VBA. Эти методы позволяют превратить данные вида «Артикул №123-А» в чистое число 123.

Подготовка данных и выбор метода

Перед началом работы определите объем данных и версию вашего Excel. Если нужно обработать несколько ячеек, подойдут формулы. Для тысяч строк лучше использовать Power Query, так как формулы могут замедлить работу файла.

Важно: При извлечении цифр ведущие нули (например, в коде 007) часто теряются при преобразовании в числовой формат. Если нули важны, оставляйте результат в текстовом формате.

Способ 1: Формулы для извлечения цифр

Этот метод не требует включения макросов и работает непосредственно в ячейках листа.

Для Excel 365 и Excel 2019+

В современных версиях используется функция TEXTJOIN, которая объединяет найденные цифры.

  1. Предположим, грязные данные находятся в ячейке A2.
  2. Вставьте следующую формулу в ячейку B2:
    =TEXTJOIN("");TRUE;IF(ISNUMBER(--MID(A2;SEQUENCE(LEN(A2));1));MID(A2;SEQUENCE(LEN(A2));1);""))
    ```
    *Примечание: В русской версии Excel разделителем аргументов может быть точка с запятой `;`, в английской — запятая `,`.*
3.  Если нужно получить именно **число** (для расчетов), оберните формулу в функцию `ЧИСЛОЗНАЧ` (или `VALUE`):
    
```excel
    =ЧИСЛОЗНАЧ(TEXTJOIN("");TRUE;IF(ISNUMBER(--MID(A2;SEQUENCE(LEN(A2));1));MID(A2;SEQUENCE(LEN(A2));1);"")))
    ```

### Для старых версий Excel (2010–2016)
В этих версиях нет функции `TEXTJOIN`. Решение сложнее и требует создания пользовательской функции через VBA или использования вспомогательных столбцов, что неудобно. Рекомендуется обновить файл до формата `.xlsm` и использовать **Способ 3 (Макрос)** или загрузить данные в **Power Query**.

## Способ 2: Очистка через Power Query (Рекомендуется для больших таблиц)

Power Query — самый надежный инструмент для регулярной очистки данных. Он не перегружает файл формулами.

1.  Выделите диапазон с данными.
2.  Перейдите на вкладку **Данные** → **Из таблицы/диапазона**.
3.  Откроется редактор Power Query. Выделите столбец, который нужно очистить.
4.  На вкладке **Добавление столбца** выберите **Настраиваемый столбец**.
5.  Введите имя нового столбца (например, `ТолькоЦифры`) и формулу:
    
```powerquery
    Text.Select([НазваниеВашегоСтолбца], {"0".."9"})
    ```
    *(Замените `[НазваниеВашегоСтолбца]` на реальное имя столбца, кликнув по нему в списке справа).*
6.  Нажмите **ОК**. Теперь в новом столбце только цифры.
7.  При необходимости измените тип данных на **Целое число** или **Десятичное число**.
8.  Нажмите **Закрыть и загрузить**, чтобы выгрузить очищенную таблицу обратно в Excel.

Функция Text.Select оставляет только те символы, которые перечислены во вторых скобках. Диапазон {"0".."9"} означает все цифры от 0 до 9. Все буквы, пробелы и знаки препинания будут автоматически удалены.

Способ 3: Макрос VBA для мгновенной очистки

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

  1. Нажмите Alt + F11, чтобы открыть редактор VBA.
  2. В меню выберите InsertModule.
  3. Вставьте следующий код:
    Sub KeepOnlyDigits()
        Dim cell As Range
        Dim i As Integer
        Dim rawText As String
        Dim cleanText As String
        
        For Each cell In Selection
            If Not cell.HasFormula Then
                rawText = CStr(cell.Value)
                cleanText = ""
                For i = 1 To Len(rawText)
                    If Mid(rawText, i, 1) Like "[0-9]" Then
                        cleanText = cleanText & Mid(rawText, i, 1)
                    End If
                Next i
                ' Если нужно число, раскомментируйте строку ниже:
                ' If cleanText <> "" Then cell.Value = CDbl(cleanText) Else cell.Value = ""
                
                ' Оставляем как текст (сохраняет ведущие нули):
                cell.Value = cleanText
            End If
        Next cell
    End Sub
    ```
4.  Закройте редактор, выделите нужные ячейки на листе.
5.  Нажмите `Alt + F8`, выберите `KeepOnlyDigits` и нажмите **Выполнить**.

## Сравнение методов обработки

<div class="table-container"><table style="border-collapse: collapse; width: 100%; margin: 16px 0;"><thead><tr><th style="border: 1px solid #e5e7eb; padding: 8px; text-align: left; background: #f9fafb; font-weight: 600;">Метод</th><th style="border: 1px solid #e5e7eb; padding: 8px; text-align: left; background: #f9fafb; font-weight: 600;">Сложность</th><th style="border: 1px solid #e5e7eb; padding: 8px; text-align: left; background: #f9fafb; font-weight: 600;">Производительность</th><th style="border: 1px solid #e5e7eb; padding: 8px; text-align: left; background: #f9fafb; font-weight: 600;">Сохраняет ведущие нули</th><th style="border: 1px solid #e5e7eb; padding: 8px; text-align: left; background: #f9fafb; font-weight: 600;">Лучше всего подходит для</th></tr></thead><tbody><tr><td style="border: 1px solid #e5e7eb; padding: 8px; text-align: left; vertical-align: top;"><strong>Формулы</strong></td><td style="border: 1px solid #e5e7eb; padding: 8px; text-align: left; vertical-align: top;">Средняя</td><td style="border: 1px solid #e5e7eb; padding: 8px; text-align: left; vertical-align: top;">Низкая (на больших данных)</td><td style="border: 1px solid #e5e7eb; padding: 8px; text-align: left; vertical-align: top;">Да (если не конвертировать в число)</td><td style="border: 1px solid #e5e7eb; padding: 8px; text-align: left; vertical-align: top;">Небольших таблиц, разовых задач</td></tr><tr><td style="border: 1px solid #e5e7eb; padding: 8px; text-align: left; vertical-align: top;"><strong>Power Query</strong></td><td style="border: 1px solid #e5e7eb; padding: 8px; text-align: left; vertical-align: top;">Средняя</td><td style="border: 1px solid #e5e7eb; padding: 8px; text-align: left; vertical-align: top;">Высокая</td><td style="border: 1px solid #e5e7eb; padding: 8px; text-align: left; vertical-align: top;">Да (до смены типа данных)</td><td style="border: 1px solid #e5e7eb; padding: 8px; text-align: left; vertical-align: top;">Регулярных отчетов, тысяч строк</td></tr><tr><td style="border: 1px solid #e5e7eb; padding: 8px; text-align: left; vertical-align: top;"><strong>Макрос VBA</strong></td><td style="border: 1px solid #e5e7eb; padding: 8px; text-align: left; vertical-align: top;">Высокая*</td><td style="border: 1px solid #e5e7eb; padding: 8px; text-align: left; vertical-align: top;">Очень высокая</td><td style="border: 1px solid #e5e7eb; padding: 8px; text-align: left; vertical-align: top;">Да (по умолчанию в коде)</td><td style="border: 1px solid #e5e7eb; padding: 8px; text-align: left; vertical-align: top;">Быстрой очистки выделений &quot;на лету&quot;</td></tr></tbody></table></div>


*\*Требуется одноразовая настройка кода.*

## Частые ошибки

*   **Потеря отрицательного знака.** Стандартные методы извлечения цифр удаляют знак минуса (`-`). Если в тексте есть числа вида `-150`, результатом будет `150`. Для сохранения знака нужна более сложная логика проверки первого символа.
*   **Ошибка #ИМЯ? в формулах.** Возникает, если вы используете функции `TEXTJOIN` или `SEQUENCE` в старой версии Excel (ранее 2019 года).
*   **Преобразование в дату.** После очистки, если результат похож на дату (например, `12.05`), Excel может автоматически изменить формат ячейки. Принудительно установите формат «Текстовый» или «Общий» перед вставкой данных.

## FAQ

**Можно ли удалить всё кроме цифр без формул?**
Да, самый быстрый способ без формул — использовать макрос (Способ 3) или скопировать данные в Блокнот, воспользоваться заменой (Ctrl+H) для удаления букв (что трудоемко), либо использовать онлайн-инструменты, но это менее безопасно для конфиденциальных данных.

**Как извлечь цифры, если они разделены пробелами (например, "100 200")?**
Предложенные методы склеят их в одно число `100200`. Если нужно разделить их, потребуется более сложная формула с поиском позиций пробелов или обработка в Power Query с разделением столбцов по разделителю перед очисткой.

**Что делать, если в ячейке вообще нет цифр?**
Формулы вернут пустую строку `""`. Макрос также оставит ячейку пустой. Это корректное поведение, которое не вызывает ошибок в расчетах, если использовать функции обработки ошибок типа `ЕСЛИОШИБКА`.