I’m trying to get the column number of a cell in the first row with a specific value. The code I’m using isn’t working for some reason.
Dim colNum As Integer
'sheetName is a String
With ActiveWorkbook.Sheets(sheetName)
colNum = column(.Match("ID", 1:1, 0))
It’s telling me it’s expecting a «list separator or )». How do I make it work?
Thanks
asked Feb 18, 2013 at 18:15
BeezBeez
3815 gold badges6 silver badges16 bronze badges
Try this code:
Dim colNum As Integer
'sheetName is a String
colNum = WorksheetFunction.Match("ID", ActiveWorkbook.Sheets(sheetname).Range("1:1"), 0)
answered Feb 18, 2013 at 18:26
Peter L.Peter L.
7,2465 gold badges34 silver badges53 bronze badges
1
Note that if the match is not found it will return an error; try this to handle that.
Dim Result As Variant
If Not VBA.IsError(Application.Match(...)) Then
Result = Application.Match(...)
End If
This tries the match and if there is an error on the function it will not assign a result.
WorksheetFunction.Match Method (Excel)
answered Feb 20, 2014 at 5:20
D_BesterD_Bester
5,6735 gold badges34 silver badges77 bronze badges
Определить номер столбца, в котором есть определенный текст |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
Zhennya2030 Пользователь Сообщений: 21 |
#1 11.08.2014 16:13:34 Есть таблица в эксель например «Таблица1» как в VBA узнать номер столбца по его названию (телефон) ?
|
||
Kuzmich Пользователь Сообщений: 7998 |
#2 11.08.2014 16:36:26
|
||
Кузьмич Спасибо! а еще вариант естьтипа такого? |
|
Ёк-Мок Пользователь Сообщений: 1775 |
#4 11.08.2014 17:03:32
Удивление есть начало познания © Surprise me! |
||
Kuzmich Пользователь Сообщений: 7998 |
Cells(1,»Телефон» ) Что это за ячейка? |
Zhennya2030 Пользователь Сообщений: 21 |
#6 12.08.2014 08:27:33 скорее всего я очень плохо объясняю.
поэтому хотел просто в номер столбца заталкать что-то, что автоматом определяет его номер. Думаю просто на отдельном «скрытом» листе определю их и оттуда буду брать номера. Изменено: Zhennya2030 — 12.08.2014 10:51:42 |
||
забыл сказать! |
|
Андрей VG Пользователь Сообщений: 11878 Excel 2016, 365 |
#8 12.08.2014 08:50:55 Доброе время суток
Успехов. |
||
Zhennya2030 Пользователь Сообщений: 21 |
#9 12.08.2014 09:41:57 Андрей VG, Спасибо большое! |
Свойства Column и Columns объекта Range в VBA Excel. Возвращение номера первого столбца и обращение к столбцам смежных и несмежных диапазонов.
Range.Column — свойство, которое возвращает номер первого столбца в указанном диапазоне.
Свойство Column объекта Range предназначено только для чтения, тип данных — Long.
Если диапазон состоит из нескольких областей (несмежный диапазон), свойство Range.Column возвращает номер первого столбца в первой области указанного диапазона:
Range(«B2:F10»).Select MsgBox Selection.Column ‘Результат: 2 Range(«E1:F8,D4:G13,B2:F10»).Select MsgBox Selection.Column ‘Результат: 5 |
Для возвращения номеров первых столбцов отдельных областей несмежного диапазона используется свойство Areas объекта Range:
Range(«E1:F8,D4:G13,B2:F10»).Select MsgBox Selection.Areas(1).Column ‘Результат: 5 MsgBox Selection.Areas(2).Column ‘Результат: 4 MsgBox Selection.Areas(3).Column ‘Результат: 2 |
Свойство Range.Columns
Range.Columns — свойство, которое возвращает объект Range, представляющий коллекцию столбцов в указанном диапазоне.
Чтобы возвратить один столбец заданного диапазона, необходимо указать его порядковый номер (индекс) в скобках:
Set myRange = Range(«B4:D6»).Columns(1) ‘Возвращается диапазон: $B$4:$B$6 Set myRange = Range(«B4:D6»).Columns(2) ‘Возвращается диапазон: $C$4:$C$6 Set myRange = Range(«B4:D6»).Columns(3) ‘Возвращается диапазон: $D$4:$D$6 |
Самое удивительное заключается в том, что выход индекса столбца за пределы указанного диапазона не приводит к ошибке, а возвращается диапазон, расположенный за пределами исходного диапазона (отсчет начинается с первого столбца заданного диапазона):
MsgBox Range(«B4:D6»).Columns(7).Address ‘Результат: $H$4:$H$6 |
Если указанный объект Range является несмежным, состоящим из нескольких смежных диапазонов (областей), свойство Columns возвращает коллекцию столбцов первой области заданного диапазона. Для обращения к столбцам других областей указанного диапазона используется свойство Areas объекта Range:
Range(«E1:F8,D4:G13,B2:F10»).Select MsgBox Selection.Areas(1).Columns(2).Address ‘Результат: $F$1:$F$8 MsgBox Selection.Areas(2).Columns(2).Address ‘Результат: $E$4:$E$13 MsgBox Selection.Areas(3).Columns(2).Address ‘Результат: $C$2:$C$10 |
Определение количества столбцов в диапазоне:
Dim c As Long c = Range(«D5:J11»).Columns.Count MsgBox c ‘Результат: 7 |
Буква вместо номера
Если в качестве индекса столбца используется буква, она соответствует порядковому номеру этой буквы на рабочем листе:
"A" = 1;
"B" = 2;
"C" = 3;
и так далее.
Пример использования буквенного индекса вместо номера столбца в качестве аргумента свойства Columns объекта Range:
Range(«G2:K10»).Select MsgBox Selection.Columns(2).Address ‘Результат: $H$2:$H$10 MsgBox Selection.Columns(«B»).Address ‘Результат: $H$2:$H$10 |
Обратите внимание, что свойство Range("G2:K10").Columns("B")
возвращает диапазон $H$2:$H$10
, а не $B$2:$B$10
.
While you were looking for a VBA solution, this was my top result on google when looking for a formula solution, so I’ll add this for anyone who came here for that like I did:
Excel formula to return the number from a column letter (From @A. Klomp’s comment above), where cell A1 holds your column letter(s):
=column(indirect(A1&»1″))
As the indirect function is volatile, it recalculates whenever any cell is changed, so if you have a lot of these it could slow down your workbook. Consider another solution, such as the ‘code’ function, which gives you the number for an ASCII character, starting with ‘A’ at 65. Note that to do this you would need to check how many digits are in the column name, and alter the result depending on ‘A’, ‘BB’, or ‘CCC’.
Excel formula to return the column letter from a number (From this previous question How to convert a column number (eg. 127) into an excel column (eg. AA), answered by @Ian), where A1 holds your column number:
=substitute(address(1,A1,4),»1″,»»)
Note that both of these methods work regardless of how many letters are in the column name.
Hope this helps someone else.