Свойства 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
.
Amberalex Пользователь Сообщений: 111 |
Всем здравствуйте! Подскажите, как с помощью VBA можно выделить определенные столбцы по их номерам? |
Юрий М Модератор Сообщений: 60575 Контакты см. в профиле |
Включите макрорекордер и запишите выделение этих столбцов. |
ran Пользователь Сообщений: 7091 |
|
Amberalex Пользователь Сообщений: 111 |
Макрорекодер использует буквенные обозначения столбцов |
Serge Пользователь Сообщений: 11308 |
{quote}{login=Amberalex}{date=26.09.2011 09:42}{thema=Выделение столбцов по номеру}{post} |
Amberalex Пользователь Сообщений: 111 |
RAN, большое спасибо, работает ) |
Serge Пользователь Сообщений: 11308 |
{quote}{login=Amberalex}{date=26.09.2011 09:52}{thema=}{post} |
Юрий М Модератор Сообщений: 60575 Контакты см. в профиле |
Ага, про номера не углядел Но по указанной ссылке всё есть. |
Serge Пользователь Сообщений: 11308 |
#9 26.09.2011 21:59:06 {quote}{login=Юрий М}{date=26.09.2011 09:57}{thema=}{post} <#0> |
0 / 0 / 0 Регистрация: 13.02.2012 Сообщений: 18 |
|
1 |
|
14.02.2012, 21:04. Показов 23497. Ответов 12
Есть ли в VBA функция переводящая номер столбца в его буквенный эквивалент в Excel’е?
0 |
Казанский 15136 / 6410 / 1730 Регистрация: 24.09.2011 Сообщений: 9,999 |
||||||||||||||||
14.02.2012, 22:08 |
2 |
|||||||||||||||
Сообщение было отмечено как решение РешениеНапример столбец 56
Или так
Добавлено через 24 минуты
Еще У меня получилась такая функция:
Она работает в 25 раз быстрее, чем функция, основанная на Application.ConvertFormula
4 |
аналитика здесь больше нет… 3372 / 1670 / 184 Регистрация: 03.02.2010 Сообщений: 1,219 |
||||
15.02.2012, 10:45 |
3 |
|||
вариант
1 |
KoGG 5590 / 1580 / 406 Регистрация: 23.12.2010 Сообщений: 2,366 Записей в блоге: 1 |
||||
15.02.2012, 16:02 |
4 |
|||
Еще
Она работает в 25 раз быстрее, чем функция, основанная на Application.ConvertFormula Функция Num2ABC работает неправильно , при x = 26 Num2ABC=A@ и так далее.
1 |
m-ch 6169 / 934 / 309 Регистрация: 25.02.2011 Сообщений: 1,359 Записей в блоге: 1 |
||||
15.02.2012, 17:17 |
5 |
|||
Функция Num2ABC работает неправильно , при x = 26 Num2ABC=A@ и так далее
2 |
KoGG 5590 / 1580 / 406 Регистрация: 23.12.2010 Сообщений: 2,366 Записей в блоге: 1 |
||||
15.02.2012, 17:39 |
6 |
|||
Вот правильная функция:
1 |
m-ch 6169 / 934 / 309 Регистрация: 25.02.2011 Сообщений: 1,359 Записей в блоге: 1 |
||||
15.02.2012, 17:44 |
7 |
|||
или так:
2 |
KoGG 5590 / 1580 / 406 Регистрация: 23.12.2010 Сообщений: 2,366 Записей в блоге: 1 |
||||
15.02.2012, 17:46 |
8 |
|||
Это лучше
2 |
Piramidon 0 / 0 / 0 Регистрация: 13.02.2012 Сообщений: 18 |
||||
16.02.2012, 11:48 [ТС] |
9 |
|||
или так:
Вы бы не могли написать комменты к проге… Не понятно это Num2ABC = Chr$(65 + (x — 1) Mod 26) & Num2ABC… Вообще не могу понять, что происходит в этом выражении…
0 |
0 / 0 / 0 Регистрация: 01.11.2012 Сообщений: 20 |
|
09.02.2016, 15:30 |
10 |
Узнаём имя 6-го столбца Коротко и ясно!!! Спасибо большое очень пригодилось.
0 |
Модератор 11341 / 4660 / 748 Регистрация: 07.08.2010 Сообщений: 13,496 Записей в блоге: 4 |
|
09.02.2016, 16:49 |
11 |
а есть ли обратная функция
0 |
m-ch 6169 / 934 / 309 Регистрация: 25.02.2011 Сообщений: 1,359 Записей в блоге: 1 |
||||
09.02.2016, 16:56 |
12 |
|||
0 |
Казанский 15136 / 6410 / 1730 Регистрация: 24.09.2011 Сообщений: 9,999 |
||||
09.02.2016, 23:06 |
13 |
|||
shanemac51, можно по аналогии
тест в Immediate Код ?abc2num("FJD"),columns("FJD").column 4320 4320
2 |
Range.EntireColumn
Yes! You can use Range.EntireColumn
MSDN
dim column : column = 4
dim column_range : set column_range = Sheets(1).Cells(column).EntireColumn
Range(«ColumnName:ColumnName»)
If you were after a specific column, you could create a hard coded column range with the syntax e.g. Range("D:D")
.
However, I’d use entire column as it provides more flexibility to change that column at a later time.
Worksheet.Columns
Worksheet.Columns
provides Range access to a column within a worksheet. MSDN
If you would like access to the first column of the first sheet. You would
call the Columns
function on the worksheet.
dim column_range: set column_range = Sheets(1).Columns(1)
The Columns
property is also available on any Range
MSDN
EntireRow
can also be useful if you have a range for a single cell but would like to reach other cells on the row, akin to a LOOKUP
dim id : id = 12345
dim found : set found = Range("A:A").Find(id)
if not found is Nothing then
'Get the fourth cell from the match
MsgBox found.EntireRow.Cells(4)
end if
I would like to select multiple columns.
Eg. I want to select column a, b, d, e, g, h
I’ve tried:
Columns("A, B, D, E, G, H").select
I get error message: Type mismatch
.
asked Jan 17, 2012 at 0:49
2
Range("A:B,D:E,G:H").Select
can help
Edit note: I just saw you have used different column sequence, I have updated my answer
answered Jan 17, 2012 at 0:53
HRgigerHRgiger
2,72026 silver badges37 bronze badges
2
Some things of top of my head.
Method 1.
Application.Union(Range("a1"), Range("b1"), Range("d1"), Range("e1"), Range("g1"), Range("h1")).EntireColumn.Select
Method 2.
Range("a1,b1,d1,e1,g1,h1").EntireColumn.Select
Method 3.
Application.Union(Columns("a"), Columns("b"), Columns("d"), Columns("e"), Columns("g"), Columns("h")).Select
answered Jan 17, 2012 at 1:03
GSergGSerg
75.3k17 gold badges160 silver badges340 bronze badges
1
Some of the code looks a bit complex to me. This is very simple code to select only the used rows in two discontiguous columns D and H. It presumes the columns are of unequal length and thus more flexible vs if the columns were of equal length.
As you most likely surmised 4=column D and 8=column H
Dim dlastRow As Long
Dim hlastRow As Long
dlastRow = ActiveSheet.Cells(Rows.Count, 4).End(xlUp).Row
hlastRow = ActiveSheet.Cells(Rows.Count, 8).End(xlUp).Row
Range("D2:D" & dlastRow & ",H2:H" & hlastRow).Select
Hope you find useful — DON’T FORGET THAT COMMA BEFORE THE SECOND COLUMN, AS I DID, OR IT WILL BOMB!!
answered Dec 4, 2016 at 15:33
Working on a project I was stuck for some time on this concept — I ended up with a similar answer to Method 1 by @GSerg that worked great. Essentially I defined two formula ranges (using a few variables) and then used the Union concept. My example is from a larger project that I’m working on but hopefully the portion of code below can help some other people who might not know how to use the Union concept in conjunction with defined ranges and variables. I didn’t include the entire code because at this point it’s fairly long — if anyone wants more insight feel free to let me know.
First I declared all my variables as Public
Then I defined/set each variable
Lastly I set a new variable «SelectRanges» as the Union between the two other FormulaRanges
Public r As Long
Public c As Long
Public d As Long
Public FormulaRange3 As Range
Public FormulaRange4 As Range
Public SelectRanges As Range
With Sheet8
c = pvt.DataBodyRange.Columns.Count + 1
d = 3
r = .Cells(.Rows.Count, 1).End(xlUp).Row
Set FormulaRange3 = .Range(.Cells(d, c + 2), .Cells(r - 1, c + 2))
FormulaRange3.NumberFormat = "0"
Set FormulaRange4 = .Range(.Cells(d, c + c + 2), .Cells(r - 1, c + c + 2))
FormulaRange4.NumberFormat = "0"
Set SelectRanges = Union(FormulaRange3, FormulaRange4)
answered Jan 7, 2016 at 3:18
JonhJonh
11113 bronze badges
As a recorded macro.
range("A:A, B:B, D:D, E:E, G:G, H:H").select
answered Mar 8, 2018 at 15:56
gavingavin
3051 gold badge2 silver badges12 bronze badges
- Свойство столбцов Excel VBA
Свойство столбцов Excel VBA
Нам всем хорошо известен тот факт, что рабочая таблица Excel организована в столбцы и строки, и каждое пересечение строк и столбцов рассматривается как ячейка. Всякий раз, когда мы хотим сослаться на ячейку в Excel через VBA, мы можем использовать свойства Range или Cells. Что если мы хотим сослаться на столбцы из таблицы Excel? Есть ли какая-либо функция, которую мы можем использовать для ссылки на то же самое? Ответ большой ДА!
Да, в VBA есть свойство под названием «Столбцы», которое помогает вам ссылаться, а также возвращать столбец из данной таблицы Excel. Мы можем ссылаться на любой столбец на листе, используя это свойство, и можем манипулировать им.
Синтаксис столбцов VBA:
Синтаксис для свойства столбцов VBA показан ниже:
Где,
- RowIndex — представляет номер строки, из которой должны быть получены ячейки.
- ColumnIndex — представляет номер столбца, который находится на пересечении с соответствующими строками и ячейками.
Очевидно, какой столбец необходимо включить / использовать для дальнейшего разбирательства, используется этими двумя аргументами. Оба являются необязательными и, если они не предоставлены по умолчанию, будут рассматриваться как первая строка и первый столбец.
Как использовать свойство столбцов в Excel VBA?
Ниже приведены различные примеры использования свойства столбцов в Excel с использованием кода VBA.
Вы можете скачать этот шаблон Excel столбцов VBA здесь — Шаблон Excel столбцов VBA
Пример # 1 — Выбор столбца с использованием свойства столбцов VBA
Мы увидим, как можно выбрать столбец на листе, используя свойство VBA Columns. Для этого выполните следующие шаги:
Шаг 1: Вставьте новый модуль в Visual Basic Editor (VBE), где вы можете написать блок кодов. Нажмите на вкладку « Вставка » и выберите « Модуль» на панели VBA.
Шаг 2: Определите новую подпроцедуру, которая может содержать макрос, который вы собираетесь написать.
Код:
Sub Example_1 () End Sub
Шаг 3: Используйте свойство Columns.Select из VBA, чтобы выбрать первый столбец на рабочем листе. Это на самом деле по-разному, вы можете использовать Columns (1). Выберите изначально. Смотрите скриншот ниже:
Код:
Sub Example_1 () Столбцы (1). Выберите End Sub
Свойство Columns в этом небольшом фрагменте кода указывает номер столбца, а свойство Select позволяет VBA выбирать столбец. Поэтому в этом коде столбец 1 выбран на основе заданных входных данных.
Шаг 4: Нажмите F5 или нажмите кнопку «Выполнить», чтобы запустить этот код и увидеть результат. Вы можете видеть, что столбец 1 будет выбран в вашем листе Excel.
Это один из способов использования свойства столбцов для выбора столбца на листе. Мы также можем использовать имена столбцов вместо номеров столбцов в коде. Ниже код также дает тот же результат.
Код:
Sub Example_1 () Столбцы ("A"). Выберите End Sub
Пример № 2 — столбцы VBA как функция рабочего листа
Если мы используем свойство Columns без какого-либо спецификатора, оно будет работать только на всех активных рабочих листах, присутствующих в рабочей книге. Однако, чтобы сделать код более безопасным, мы можем использовать спецификатор рабочего листа со столбцами и сделать наш код более безопасным. Следуйте инструкциям ниже:
Шаг 1: Определите новую подпроцедуру, которая может содержать макрос под модулем.
Код:
Sub Example_2 () End Sub
Теперь мы будем использовать свойство Worksheets.Columns для выбора столбца из указанного листа.
Шаг 2: Начните вводить квалификатор Worksheets под данным макросом. Этому классификатору нужно имя листа, укажите имя листа как « Пример 2 » (не забудьте добавить скобки). Это позволит системе получить доступ к рабочему листу с именем Пример 2 из текущей рабочей книги.
Код:
Sub Example_2 () Рабочие таблицы («Пример 2») End Sub
Шаг 3: Теперь используйте свойство Columns, которое позволит вам выполнять различные операции над столбцами на выбранном листе. Я выберу 4- й столбец. Я могу выбрать его, написав индекс как 4 или указав алфавит столбца «D».
Код:
Sub Example_2 () Рабочие таблицы («Пример 2»). Столбцы («D») End Sub
На данный момент мы выбрали рабочий лист с именем Пример 2 и получили доступ к столбцу D из него. Теперь нам нужно выполнить некоторые операции со столбцом, к которому осуществляется доступ.
Шаг 4. Используйте свойство Выбрать после столбцов, чтобы выбрать столбец, указанный в текущем рабочем листе.
Код:
Sub Example_2 () Рабочие таблицы («Пример 2»). Столбцы («D»). Выберите End Sub
Шаг 5: Запустите код, нажав клавишу F5 или нажав кнопку воспроизведения.
Пример # 3 — свойство столбцов VBA для выбора диапазона ячеек
Предположим, мы хотим выбрать диапазон ячеек в разных столбцах. Мы можем комбинировать свойство Range и Columns для этого. Следуйте инструкциям ниже:
Предположим, что у нас есть данные, распределенные между B1 и D4 на листе, как показано ниже:
Шаг 1: Определите новую подпроцедуру для хранения макроса.
Код:
Sub Example_3 () End Sub
Шаг 2: Используйте квалификатор « Рабочие листы», чтобы получить доступ к рабочему листу с именем « Пример 3 », где у нас есть данные, показанные на снимке экрана выше.
Код:
Sub Example_3 () Рабочие таблицы («Пример 3») End Sub
Шаг 3: Используйте свойство Range, чтобы установить диапазон для этого кода от B1 до D4. Используйте следующий диапазон кодов («B1: D4») для того же.
Код:
Sub Example_3 () Рабочие листы («Пример 3»). Диапазон («B1: D4») End Sub
Шаг 4: Используйте свойство Columns для доступа ко второму столбцу из выбора. Используйте код как Столбцы (2) для доступа ко второму столбцу из доступного диапазона.
Код:
Sub Example_3 () Рабочие таблицы («Пример 3»). Диапазон («B1: D4»). Столбцы (2) End Sub
Шаг 5: Теперь самая важная часть. Мы получили доступ к рабочему листу, диапазону и столбцу. Однако, чтобы выбрать доступный контент, нам нужно использовать свойство Select в VBA. Смотрите скриншот ниже для макета кода.
Код:
Sub Example_3 () Рабочие таблицы («Пример 3»). Диапазон («B1: D4»). Столбцы (2). Выберите End Sub
Шаг 6: Запустите этот код, нажав F5 или кнопку Run, и посмотрите результат.
Вы можете видеть, что код выбрал Столбец C на листе Excel, хотя вы установили значение столбца как 2 (что означает второй столбец). Причина этого в том, что мы выбрали диапазон B1: D4 в этом коде. Который состоит из трех столбцов B, C, D. Во время выполнения столбец B считается первым столбцом, C — вторым, а D — третьим столбцом вместо их фактических положений. Функция диапазона уменьшила область действия этой функции только для B1: D4.
То, что нужно запомнить
- Мы не видим список свойств IntelliSense, когда работаем над столбцами VBA.
- Это свойство относится к категории свойства листа в VBA.
Рекомендуемые статьи
Это руководство к колонкам VBA. Здесь мы обсудим, как использовать свойство столбцов в Excel с помощью кода VBA, а также на практических примерах и загружаемом шаблоне Excel. Вы также можете просмотреть наши другие предлагаемые статьи —
- VBA Вставить столбец
- Группировка столбцов в Excel
- VBA Удалить столбец
- Переключение столбцов в Excel