Номер столбца Excel из имени столбца

Как получить номер столбца из имени столбца в Excel с помощью макроса Excel?

Ответ 1

Думаю, ты хочешь этого?

Имя столбца для столбца

Sub Sample()
    ColName = "C"
    Debug.Print Range(ColName & 1).Column
End Sub

Изменить. Также включите обратное, что вы хотите

Номер столбца для имени столбца

Sub Sample()
    ColNo = 3
    Debug.Print Split(Cells(, ColNo).Address, "$")(1)
End Sub

FOLLOW UP

  

Как если бы у меня было поле зарплаты на самом верху, скажем, в ячейке C (1,1) теперь, если я изменю файл и сдвиг столбца зарплаты в какое-то другое место скажу F (1,1), тогда мне придется изменить код, поэтому я хочу, чтобы код проверялся на зарплату и находил номер столбца, а затем выполнял остальные операции в соответствии с этим номером столбца.

  

В таком случае я бы рекомендовал использовать .FIND См. этот пример ниже

Option Explicit

Sub Sample()
    Dim strSearch As String
    Dim aCell As Range

    strSearch = "Salary"

    Set aCell = Sheet1.Rows(1).Find(What:=strSearch, LookIn:=xlValues, _
    LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
    MatchCase:=False, SearchFormat:=False)

    If Not aCell Is Nothing Then
        MsgBox "Value Found in Cell " & aCell.Address & _
        " and the Cell Column Number is " & aCell.Column
    End If
End Sub

СНАПШОТ

enter image description here

Ответ 2

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

Формула Excel возвращает номер из столбца (из комментария @A. Klomp выше), где ячейка A1 содержит ваши столбцовые письма:

= столбец (непрямой (А1 & "1" ))

Поскольку косвенная функция является изменчивой, она пересчитывается всякий раз, когда изменяется какая-либо ячейка, поэтому, если у вас их много, это может замедлить работу вашей книги. Рассмотрим другое решение, такое как функция "code", которая дает вам номер для символа ASCII, начиная с "A" в 65. Обратите внимание, что для этого вам нужно будет проверить, сколько цифр указано в имени столбца, и изменить результат в зависимости от "A", "BB" или "CCC".

Формула Excel, чтобы вернуть букву столбца из числа (из этого предыдущего вопроса Как преобразовать номер столбца (например, 127) в столбец Excel (например, AA), на который отвечает @Ian), где A1 содержит номер столбца:

= запасной (адрес (1, A1,4), "1", "")

Обратите внимание, что оба этих метода работают независимо от количества букв в имени столбца.

Надеюсь, это поможет кому-то еще.

Ответ 3

Запишите и запустите следующий код в окне Immediate Window

?cells(,"type the column name here").column

Например, ?cells(,"BYL").column вернется в 2014 году. Код нечувствителен к регистру, поэтому вы можете написать ?cells(,"BYL").column, а вывод все равно будет таким же.

Ответ 4

Вы можете пропустить все это и просто поместить свои данные в таблицу. Затем обратитесь к таблице и заголовку, и она будет полностью динамичной. Я знаю, что это с 3 лет назад, но кто-то все еще может найти это полезным.

Пример кода:

Activesheet.Range("TableName[ColumnName]").Copy

Вы также можете использовать:

activesheet.listobjects("TableName[ColumnName]").Copy

Вы даже можете использовать эту систему ссылок в формулах рабочих таблиц. Это очень динамично.

Надеюсь, это поможет!

Ответ 5

На основании ответа Анастасии. Я думаю, что это самая короткая команда VBA:

Option Explicit

Sub Sample()
    Dim sColumnLetter as String
    Dim iColumnNumber as Integer

    sColumnLetter = "C"
    iColumnNumber = Columns(sColumnLetter).Column

    MsgBox "The column number is " & iColumnNumber
End Sub

Предостережение: единственное условие для работы этого кода - активная рабочая таблица, поскольку Columns эквивалентны ActiveSheet.Columns. ;)

Ответ 6

Здесь чисто решение VBA, потому что Excel может содержать соединенные ячейки:

Public Function GetIndexForColumn(Column As String) As Long
    Dim astrColumn()    As String
    Dim Result          As Long
    Dim i               As Integer
    Dim n               As Integer

    Column = UCase(Column)
    ReDim astrColumn(Len(Column) - 1)
    For i = 0 To (Len(Column) - 1)
        astrColumn(i) = Mid(Column, (i + 1), 1)
    Next
    n = 1
    For i = UBound(astrColumn) To 0 Step -1
        Result = (Result + ((Asc(astrColumn(i)) - 64) * n))
        n = (n * 26)
    Next
    GetIndexForColumn = Result
End Function

По сути, эта функция работает так же, как любая функция Hex to Dec, за исключением того, что она принимает только алфавитные символы (A = 1, B = 2,...). Самый правый символ считается одинарным, каждый символ слева в 26 раз больше символа справа от него (что составляет AA = 27 [1 + 26], AAA = 703 [1 + 26 + 676]). Использование UCase() делает эту функцию без учета регистра.

Ответ 7

На мой взгляд, самый простой способ получить номер столбца:
Sub Sample() ColName = ActiveCell.Column MsgBox ColName End Sub