Как получить номер столбца из имени столбца в 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
СНАПШОТ
Ответ 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