Как перевести число из одной системы счисления в другую в Excel: 4 рабочих способа

Работа с разными системами счисления в Microsoft Excel — задача, с которой сталкиваются программисты, инженеры и студенты технических специальностей. Вручную переводить длинные двоичные коды в десятичные или шестнадцатеричные значения не только утомительно, но и чревато ошибками. К счастью, в Excel есть встроенные функции для автоматического преобразования чисел между системами с основаниями 2 (двоичная), 8 (восьмеричная), 10 (десятичная) и 16 (шестнадцатеричная).

Однако не все пользователи знают, что помимо стандартных функций типа BIN2DEC или HEX2OCT, можно использовать формулы массива, Power Query и даже VBA-макросы для нестандартных задач — например, для перевода чисел с основанием 5, 12 или 36. В этой статье разберём все доступные методы, от базовых до продвинутых, с примерами и предупреждениями о типичных ошибках.

Если вам нужно быстро конвертировать одно-два числа, подойдут встроенные функции. Для обработки больших массивов данных или нестандартных систем счисления потребуются более гибкие инструменты. Мы покажем, как избежать распространённых проблем — например, ошибки #ЧИСЛО! при переводе слишком длинных двоичных чисел или потери ведущих нулей в шестнадцатеричных значениях.

📊 Какую систему счисления вам чаще всего приходится использовать в Excel?
Двоичная (2)
Восьмеричная (8)
Десятичная (10)
Шестнадцатеричная (16)
Другая

1. Встроенные функции Excel для перевода между системами счисления

Excel предлагает 6 специализированных функций для конвертации чисел между наиболее распространёнными системами. Все они относятся к категории Инженерные функции и доступны во всех версиях программы, начиная с Excel 2007.

Основной синтаксис функций:

  • 🔢 BIN2DEC(число) — из двоичной (2) в десятичную (10)
  • 🔢 BIN2HEX(число; [разрядов]) — из двоичной (2) в шестнадцатеричную (16)
  • 🔢 BIN2OCT(число; [разрядов]) — из двоичной (2) в восьмеричную (8)
  • 🔢 DEC2BIN(число; [разрядов]) — из десятичной (10) в двоичную (2)
  • 🔢 DEC2HEX(число; [разрядов]) — из десятичной (10) в шестнадцатеричную (16)
  • 🔢 DEC2OCT(число; [разрядов]) — из десятичной (10) в восьмеричную (8)
  • 🔢 HEX2BIN(число; [разрядов]) — из шестнадцатеричной (16) в двоичную (2)
  • 🔢 HEX2DEC(число) — из шестнадцатеричной (16) в десятичную (10)
  • 🔢 OCT2BIN(число; [разрядов]) — из восьмеричной (8) в двоичную (2)
  • 🔢 OCT2DEC(число) — из восьмеричной (8) в десятичную (10)
  • 🔢 OCT2HEX(число; [разрядов]) — из восьмеричной (8) в шестнадцатеричную (16)

Пример использования:

=BIN2DEC("101010")  // Вернёт 42 (двоичное 101010 в десятичное)

=DEC2HEX(255; 4) // Вернёт "00FF" (десятичное 255 в шестнадцатеричное с 4 разрядами)

⚠️ Внимание: Функции BIN2DEC, HEX2DEC и OCT2DEC возвращают ошибку #ЧИСЛО!, если входное значение превышает 10 символов (для двоичной системы) или 10 разрядов (для восьмеричной/шестнадцатеричной). Это ограничение связано с максимальным значением, которое может храниться в ячейке Excel (до 2^53).

2. Как перевести число в систему счисления с произвольным основанием

Что делать, если нужно перевести число в систему с основанием 5, 12 или 36? В Excel нет встроенных функций для таких задач, но их можно решить с помощью формул массива или Power Query.

Для перевода десятичного числа в систему с основанием N (где N ≤ 36) используйте эту формулу:

=ЕСЛИОШИБКА(ТЕКСТ(ЦЕЛОЕ(A1/СТЕПЕНЬ(36;СТРОКА(ДВССЫЛ("A1:A"&ДЛСТР(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ЦЕЛОЕ.В.ТЕКСТ(A1;36);"0";"");"1";"");...;""))))-1)));"")&МИН(ОСТАТ(A1;СТЕПЕНЬ(36;СТРОКА(ДВССЫЛ("A1:A"&...))));35))
Примечание: Эта формула требует доработки под конкретное основание (в примере — 36). Для упрощения можно использовать VBA (см. раздел 4).

Для обратного перевода (из системы с основанием N в десятичную) подойдёт формула:

=СУММПРОИЗВ(--ПСТР(A1;СТРОКА(ДВССЫЛ("1:"&ДЛСТР(A1)));1);СТЕПЕНЬ(36;ДЛСТР(A1)-СТРОКА(ДВССЫЛ("1:"&ДЛСТР(A1)))))

Убедитесь, что число не превышает максимальное значение для целевой системы

Проверьте, что в числе нет недопустимых символов (например, буквы "G" для основания 16)

Для оснований >10 используйте буквы A-Z (A=10, B=11, ..., Z=35)

Сохраните оригинальные данные в отдельном столбце-->

3. Перевод с сохранением ведущих нулей

По умолчанию Excel убирает ведущие нули в числовых значениях. Например, при переводе десятичного числа 15 в двоичную систему функцией =DEC2BIN(15) вы получите 1111, а не 00001111. Чтобы сохранить ведущие нули, используйте второй аргумент функции — [разрядов]:

Примеры:

=DEC2BIN(15; 8)   // Вернёт "00001111" (8 разрядов)

=DEC2HEX(15; 4) // Вернёт "000F" (4 разряда)

Если вам нужно динамически определять количество разрядов (например, для выравнивания всех чисел в столбце), используйте функцию ДЛСТР с максимальным значением в диапазоне:

=DEC2BIN(A1; МАКС(ДЛСТР(DEC2BIN($A$1:$A$100))))
⚠️ Внимание: При экспорте данных в CSV или TXT ведущие нули могут снова исчезнуть. Чтобы этого избежать, предварительно отформатируйте ячейки как текст (нажмите Ctrl+1 → выберите категорию Текстовый).

4. Автоматизация перевода с помощью VBA

Для массовой обработки данных или работы с нестандартными системами счисления удобно использовать VBA-макросы. Ниже приведён код для создания пользовательской функции BASE_CONVERT, которая работает аналогично функции BASE() в Google Sheets:

Function BASE_CONVERT(Number As Variant, FromBase As Integer, ToBase As Integer) As String

Dim Digits As String

Dim i As Integer, j As Integer

Dim Num As Variant, Result As String

Digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"

' Проверка корректности оснований

If FromBase < 2 Or FromBase > 36 Or ToBase < 2 Or ToBase > 36 Then

BASE_CONVERT = "Ошибка: основание должно быть от 2 до 36"

Exit Function

End If

' Преобразование в десятичную систему

Num = 0

For i = 1 To Len(Number)

Num = Num * FromBase + InStr(1, Digits, Mid(UCase(Number), i, 1), vbTextCompare) - 1

Next i

' Преобразование из десятичной в целевую систему

If Num = 0 Then

BASE_CONVERT = "0"

Exit Function

End If

Result = ""

Do While Num > 0

j = Num Mod ToBase

Result = Mid(Digits, j + 1, 1) & Result

Num = Int(Num / ToBase)

Loop

BASE_CONVERT = Result

End Function

Как использовать эту функцию:

  1. Нажмите Alt+F11, чтобы открыть редактор VBA.
  2. Вставьте код в новый модуль (Insert → Module).
  3. Сохраните файл как .xlsm (с поддержкой макросов).
  4. Теперь в Excel можно использовать функцию =BASE_CONVERT("1A"; 16; 2) для перевода шестнадцатеричного 1A в двоичное (11010).
Как ускорить работу макроса для больших диапазонов?

Для обработки тысяч строк отключите автоматический пересчёт формул перед запуском макроса:

Application.Calculation = xlCalculationManual

' Ваш код

Application.Calculation = xlCalculationAutomatic

Это сократит время выполнения в 5-10 раз.

5. Перевод с помощью Power Query (для Excel 2016 и новее)

Power Query — мощный инструмент для преобразования данных, который позволяет создавать пользовательские функции для перевода между системами счисления. Этот метод подходит для обработки больших наборов данных (тысячи строк) и интеграции с внешними источниками.

Алгоритм действий:

  1. Выделите исходные данные и нажмите Данные → Из таблицы/диапазона (или Data → From Table/Range).
  2. В редакторе Power Query добавьте пользовательский столбец (Добавить столбец → Пользовательский столбец).
  3. Введите формулу для перевода. Например, для перевода из десятичной в двоичную систему:
    = Number.ToText([ВашСтолбец], 2)

    Для перевода из двоичной в десятичную:

    = Binary.ToNumber([ВашСтолбец])
  4. Нажмите Закрыть и загрузить, чтобы вернуть данные в Excel.

Преимущества этого метода:

  • 🔄 Обработка миллионов строк без замедления Excel.
  • 🔗 Возможность объединить перевод с другими преобразованиями (фильтрация, сортировка).
  • 📊 Автоматическое обновление при изменении исходных данных.
⚠️ Внимание: В Power Query функция Number.ToText поддерживает основания только до 36. Для работы с большими основаниями потребуется написать пользовательский скрипт на языке M.

6. Типичные ошибки и как их избежать

Даже опытные пользователи Excel сталкиваются с проблемами при переводе чисел между системами счисления. Вот наиболее распространённые ошибки и способы их решения:

Ошибка Причина Решение
#ЧИСЛО! в функциях BIN2DEC, HEX2DEC Число содержит более 10 символов (для двоичной системы) или недопустимые символы Разбейте число на части или используйте VBA для обработки длинных значений
Потеря ведущих нулей Excel автоматически убирает нули в числовых форматах Укажите количество разрядов во втором аргументе функции или отформатируйте ячейку как текст
Неправильный перевод отрицательных чисел Функции Excel не поддерживают прямую конвертацию отрицательных значений Переведите число по модулю, затем добавьте знак "-" вручную или через формулу =ЕСЛИ(A1<0;"-";"") & DEC2BIN(ABS(A1))
Ошибка #ЗНАЧ! в HEX2DEC Шестнадцатеричное число содержит буквы в нижнем регистре или недопустимые символы Приведите число к верхнему регистру: =HEX2DEC(ПРОПИСН(A1))
Некорректный перевод дробных чисел Встроенные функции Excel работают только с целыми числами Используйте VBA или разделите число на целую и дробную части

FAQ: Ответы на частые вопросы

Можно ли в Excel перевести число из троичной системы (основание 3) в десятичную?

Да, но только с помощью пользовательской функции VBA или формулы массива. Встроенных функций для троичной системы в Excel нет. Пример формулы для перевода из троичной в десятичную:

=СУММПРОИЗВ(--ПСТР(A1;СТРОКА(ДВССЫЛ("1:"&ДЛСТР(A1)));1);СТЕПЕНЬ(3;ДЛСТР(A1)-СТРОКА(ДВССЫЛ("1:"&ДЛСТР(A1)))))
Примечание: В ячейке A1 должно быть троичное число (например, 102).

Почему функция DEC2BIN(256) возвращает ошибку?

Функция DEC2BIN в Excel имеет ограничение: она может обрабатывать только числа до 511 (так как 511 в двоичной системе — это 9 символов: 111111111). Для чисел ≥512 используйте:

  • Функцию BASE_CONVERT из раздела 4 (VBA).
  • Разбиение числа на части (например, =DEC2BIN(ЦЕЛОЕ(256/256)) & DEC2BIN(ОСТАТ(256;256);8)).

Как перевести шестнадцатеричный цвет (например, #FF5733) в десятичные значения RGB?

Используйте комбинацию функций HEX2DEC и ПРАВСИМВ:

=HEX2DEC(ПРАВСИМВ(ПОДСТАВИТЬ(A1;"#";"");2))  // Красный канал

=HEX2DEC(ПРАВСИМВ(ПОДСТАВИТЬ(A1;"#";"");4;2)) // Зелёный канал

=HEX2DEC(ПРАВСИМВ(ПОДСТАВИТЬ(A1;"#";"");6;2)) // Синий канал

Пример: Для цвета #FF5733 формулы вернут 255, 87 и 51 соответственно.

Можно ли автоматически переводить числа при вводе в ячейку?

Да, для этого настройте условное форматирование или используйте событие Worksheet_Change в VBA. Пример кода для автоматического перевода введенного десятичного числа в двоичное:

Private Sub Worksheet_Change(ByVal Target As Range)

Dim Cell As Range

For Each Cell In Target

If Cell.Column = 1 Then ' Если изменение в столбце A

Cell.Offset(0, 1).Value = WorksheetFunction.Dec2Bin(Cell.Value)

End If

Next Cell

End Sub

Примечание: Этот код будет срабатывать при каждом изменении ячейки в столбце A и записывать двоичный эквивалент в соседнюю ячейку справа.

Как сохранить форматирование при копировании переведённых чисел в другую программу?

При копировании в Word, Notepad или другие программы ведущие нули могут пропадать. Чтобы этого избежать:

  1. Скопируйте ячейки с результатами.
  2. Вставьте их через Специальная вставка → Текст (или Paste Special → Text).
  3. Если нули всё равно пропадают, предварительно добавьте к числу апостроф (') в Excel (например, '00001111).