Как узнать числовой или буквенный код столбца на рабочем листе Excel с помощью VBA? Числовой или буквенный индекс столбца активной ячейки.
Зачем это нужно?
Довольно часто при написании кода VBA Excel нужно знать, какому буквенному обозначению соответствует числовой код столбца (или наоборот). Вручную считать числовой индекс неудобно, а буквенный определить у отдалённых столбцов практически невозможно.
Ручное переключение стиля ссылок
Самый простой, но и самый неудобный вариант — это ручное переключение стиля ссылок.
По умолчанию Excel использует стиль «A1»: столбцы обозначаются буквами (A, B, C… AA, AB…), строки — числами.
В настройках можно включить стиль «R1C1», где и столбцы, и строки пронумерованы. Этот режим часто используется при программировании на VBA, так как он упрощает индексацию ячеек (через свойство .Cells) и циклические вычисления.
Как переключить стиль ссылок в Excel?
«Файл» → «Параметры» → «Формулы» → раздел «Работа с формулами» → снять/поставить галочку «Стиль ссылок R1C1».
Неудобство ручного переключения стиля заключается не только в нескольких манипуляциях с мышью, но и в невозможности одновременно видеть и буквенный, и числовой код столбца. Этих недостатков лишено программное преобразование буквенного индекса в числовой (и наоборот) с помощью кода VBA Excel.
Программное преобразование индекса
Код VBA Excel для преобразования буквенного кода столбца в числовой, и наоборот:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
Sub ShowColumnCode() Dim colNum As Long colNum = ActiveCell.Column ' Проверяем текущий стиль ссылок If Application.ReferenceStyle = xlR1C1 Then ' Если включён стиль R1C1 (столбцы = числа) → показываем буквы MsgBox "Буквенный код столбца: " & GetColumnLetter(colNum), _ vbInformation, "Стиль R1C1" Else ' По умолчанию A1 (столбцы = буквы) → показываем число MsgBox "Числовой код столбца: " & colNum, _ vbInformation, "Стиль A1" End If End Sub ' Функция перевода номера столбца в буквенный код (A, B, ... Z, AA, AB...) Function GetColumnLetter(colNum As Long) As String Dim result As String result = "" Do While colNum > 0 colNum = colNum - 1 result = Chr(65 + (colNum Mod 26)) & result colNum = colNum \ 26 Loop GetColumnLetter = result End Function |
Код преобразования числа в буквенный индекс, для наглядности, вынесен в отдельную функцию.
Результат работы кода, если включён стиль ссылок «A1»:

Результат работы кода, если включён стиль ссылок «R1C1»:

Как работает код?
| Строка/Блок | Назначение |
|---|---|
| colNum = ActiveCell.Column | Получает числовой индекс столбца текущей ячейки (всегда от 1 до 16384) |
| Application.ReferenceStyle = xlR1C1 | Проверяет, включён ли стиль R1C1. Возвращает True или False |
| GetColumnLetter() | Реализует перевод десятичного номера в 26-ричную систему с использованием символов A-Z. Корректировка colNum = colNum - 1 нужна, потому что в Excel нет «нулевого» столбца |
| MsgBox … | Выводит всплывающее окно с результатом |
Для того, чтобы можно было скопировать результат преобразования и вставить в создаваемый код VBA Excel, замените MsgBox на Debug.Print. Тогда результат будет выведен в окно отладки Immediate.