Номер столбца по значению в excel vba

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

Beez's user avatar

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.'s user avatar

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_Bester's user avatar

D_BesterD_Bester

5,6735 gold badges34 silver badges77 bronze badges

Определить номер столбца, в котором есть определенный текст

Dendibar

Дата: Пятница, 15.04.2016, 13:20 |
Сообщение № 1

Группа: Пользователи

Ранг: Прохожий

Сообщений: 8


Репутация:

0

±

Замечаний:
0% ±


Excel 2007

Добрый день!

Прошу помочь с макросом (он также есть во вложенном файле).
Я вынес номер столбца в качестве переменной x, для того чтобы подставить номер столбца в формулу дальше. Дело в том, что номер столбца будет меняться в разных файлах с которыми буду работать, поэтому хочу привязать номер столбца к наименованию столбца.
То есть вместо (x = 1), хочу присвоить что-то вроде (x = («номер столбца, где есть текст «Название 1»))

[vba]

Код

Sub Вопрос()

Dim lLastRow As Long, lLastCol As Long, cl As Long, rw As Long
lLastRow = Cells(Rows.Count, 1).End(xlUp).Row ‘
lLastCol = Cells(1, Columns.Count).End(xlToLeft).Column

For cl = 1 To lLastCol
For rw = 1 To lLastRow

x = 1

If (Cells(rw, x) > Cells(rw, x + 1)) And (Cells(rw, x + 1) <> «») Then
Cells(rw, x) = 0
End If

    Next rw
    Next cl
End Sub

[/vba]

К сообщению приложен файл:

6534510.xlsm
(16.3 Kb)

 

Ответить

_Boroda_

Дата: Пятница, 15.04.2016, 13:23 |
Сообщение № 2

Группа: Модераторы

Ранг: Местный житель

Сообщений: 16618


Репутация:

6465

±

Замечаний:
0% ±


2003; 2007; 2010; 2013 RUS

Что-то типа вот такого нужно?
[vba]

Код

x= WorksheetFunction.Match(«Название 1», Range(«1:1»), 0)

[/vba]
Это

Код

=ПОИСКПОЗ(«Название 1»;1:1;0)


Скажи мне, кудесник, любимец ба’гов…
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995

 

Ответить

Manyasha

Дата: Пятница, 15.04.2016, 13:29 |
Сообщение № 3

Группа: Модераторы

Ранг: Старожил

Сообщений: 2198


Репутация:

898

±

Замечаний:
0% ±


Excel 2010, 2016

Или вот так можно:
[vba]

Код

x = Rows(1).Find(«Название 1», , xlValues, xlWhole).Column

[/vba]
и х лучше вынести за циклы, зачем Вам его на каждом шаге вычислять?
[vba]

Код

    x = Rows(1).Find(«Название 1», , xlValues, xlWhole).Column
    For cl = 1 To lLastCol
        For rw = 1 To lLastRow

[/vba]


ЯД: 410013299366744 WM: R193491431804

 

Ответить

Dendibar

Дата: Пятница, 15.04.2016, 13:47 |
Сообщение № 4

Группа: Пользователи

Ранг: Прохожий

Сообщений: 8


Репутация:

0

±

Замечаний:
0% ±


Excel 2007

Большое спасибо — то, что нужно! И спасибо за совет по вынесению x за циклы — гораздо быстрее получается)

 

Ответить

 

Zhennya2030

Пользователь

Сообщений: 21
Регистрация: 29.08.2013

#1

11.08.2014 16:13:34

Есть таблица в эксель например «Таблица1»  :)  
B2   C2 D2   E2    F2
Имя; Фамилия; Телефон; размер груди; наличие мозга

как в VBA узнать номер столбца по его названию (телефон) ?
что-то типа этого есть?

Код
Range("Таблица1") .Columns("Телефон") .column
 

Kuzmich

Пользователь

Сообщений: 7998
Регистрация: 21.12.2012

#2

11.08.2014 16:36:26

Код
Sub Telephon()
Dim Stolb As Integer
    Stolb = Rows(2).Find("Телефон", , xlValues, xlWhole).Column
End Sub
 
 

Кузьмич Спасибо!

а еще вариант естьтипа такого?
а= Range(«Таблица1″ ) .Cells(1,»Телефон» )

 

Ёк-Мок

Пользователь

Сообщений: 1775
Регистрация: 16.01.2013

#4

11.08.2014 17:03:32

Код
Sub Макрос()
For i = 2 To 6
If Cells(2, i).Value = "Телефон" Then a = Cells(2, i).Column
Next
End Sub

Удивление есть начало познания © Surprise me!
И да пребудет с нами сила ВПР.

 

Kuzmich

Пользователь

Сообщений: 7998
Регистрация: 21.12.2012

Cells(1,»Телефон» )    Что это за ячейка?

 

Zhennya2030

Пользователь

Сообщений: 21
Регистрация: 29.08.2013

#6

12.08.2014 08:27:33

скорее всего я очень плохо объясняю.
Полная задача в том, чтобы из экселя именованной таблицы, передать данные на SQL.
ну тупо пошли перебор таблицы по строкам.

Код
For i = 2 To Sheet1.Range("TAble_Table").Rows.Count
objRecordset.Fields("Phone") = Sheet1.Range("TAble_Table").Cells(i, "Telephone").Value

поэтому хотел просто в номер столбца заталкать что-то, что автоматом определяет его номер.
потому что, пользователь может поменять местами столбцы.

Думаю просто на отдельном «скрытом» листе определю их и оттуда буду брать номера.

Изменено: Zhennya203012.08.2014 10:51:42

 

забыл сказать!
Спасибо большое за помощь Kuzmich, Ёк-Мок !!!!

 

Андрей VG

Пользователь

Сообщений: 11878
Регистрация: 22.12.2012

Excel 2016, 365

#8

12.08.2014 08:50:55

Доброе время суток
Если вы используете «умную» таблицу, то можно и таким образом

Код
    Dim pLO As ListObject, iRow As Long
    Set pLO = ActiveSheet.ListObjects(1)
    For iRow = 1 To pLO.ListRows.Count
        objRecordset("Phone").Value = pLO.ListColumns("Telephone").DataBodyRange(iRow).Value
    Next
 

Успехов.

 

Zhennya2030

Пользователь

Сообщений: 21
Регистрация: 29.08.2013

#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.

Понравилась статья? Поделить с друзьями:
  • Номера столбцов на каждой странице excel
  • Номера столбцов в таблице word
  • Номера символов в microsoft word
  • Номера непустых ячеек excel
  • Номера начальной страницы excel