Zhennya2030 Пользователь Сообщений: 21 |
#1 11.08.2014 16:13:34 Есть таблица в эксель например “Таблица1” как в VBA узнать номер столбца по его названию (телефон) ?
|
||
Kuzmich Пользователь Сообщений: 7999 |
#2 11.08.2014 16:36:26
|
||
Кузьмич Спасибо! а еще вариант естьтипа такого? |
|
Ёк-Мок Пользователь Сообщений: 1779 |
#4 11.08.2014 17:03:32
Удивление есть начало познания © Surprise me! |
||
Kuzmich Пользователь Сообщений: 7999 |
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, Спасибо большое! |
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.
Свойства 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
.
Добрый день уважаемые форумчане!
Опыт написания каких либо макросов на VBA у меня очень маленький (редко возникает необходимость) по этому сильно не пинайте.
Вопрос вот в чем. Надо перенести в пределах одной книги с одного листа (таблицы) на другой некие данные.
Понятное дело пользователь может наплодить в таблице своих столбцов и тогда жесткая привязка к определенным ячейкам сломает всю таблицу.
Выход из положения вижу один. Присвоил диапазонам ячеек в столбце определенные имена. Но вот как воспользоваться никак не могу понять.
Сейчас делаю вот так:
[vba]
Код
‘С помощью цикла заполняю таблицу
Worksheets(“График”).Cells(R + i, C + 1).Value = Worksheets(“Лист1”).Range(“СУММА”).Value / 1000 ‘СУММА – имя ячейки из которой получаю данные
Worksheets(“График”).Cells(R + i, C + 1).NumberFormat = “0.00”
[/vba]
На листе “График” есть столбец, в нем части ячеек из таблицы присвоено имя (Например “Расход” =График!$Y$9:$Y$1895).
Как вытащить из этого имени номер/имя столбца?
[moder]Прочитайте Правила форума
Приложите пример в Excel
Ученик
(162),
на голосовании
7 лет назад
Голосование за лучший ответ
Полосатый жираф Алик
Искусственный Интеллект
(310763)
7 лет назад
ActiveCell.Row – строка активной ячейки.
ActiveCell.Column – столбец активной ячейки.
Дмитрий ВладимировичУченик (162)
7 лет назад
Спасибо от части это, то что надо, но мне нужно иначе, помогите правильно написать.
Public Function Test(a, b)
a = ActiveCell.Row
b = ActiveCell.Column
Value = Cells(a, b)
Test = Value
End Function
Нужно чтобы переменные a, b передавали номер активной строки и столбца не из места, где расположена функция, а от указанных ячеек в функции, например =test (B3, B1) при этом сама функция находится в другом месте.
Извините за не внятно поставленный вопрос, я плохо разбираюсь в VB.