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
Мартын Пользователь Сообщений: 282 |
#1 22.12.2016 11:32:51 Здравствуйте, все!
и т.д….. |
||
Пытливый Пользователь Сообщений: 4587 |
#2 22.12.2016 11:37:37 Сделал на листочке простую «умную» таблицу с заголовками «Один», «Два», «Три»
Может через это как-то попробовать? Кому решение нужно — тот пример и рисует. |
||
Sanja Пользователь Сообщений: 14838 |
#3 22.12.2016 13:10:29 Ничего лучшего не придумал
Изменено: Sanja — 22.12.2016 13:10:48 Согласие есть продукт при полном непротивлении сторон. |
||
Мартын Пользователь Сообщений: 282 |
#4 22.12.2016 14:00:21
Может быть и прокатит, но хочется верить, что создатели VBA догадывались, что кому-нибудь может потребоваться выбрать более одного столбца и предусмотрели некий простой и удобный вариант. Только забыли его задокументировать. |
||
Dima S Пользователь Сообщений: 2063 |
#5 22.12.2016 22:19:52
чем не
Изменено: Dima S — 22.12.2016 22:20:25 |
||||
Sanja Пользователь Сообщений: 14838 |
#7 22.12.2016 23:25:35
Согласие есть продукт при полном непротивлении сторон. |
||||
Мартын Пользователь Сообщений: 282 |
Sanja, огромное спасибо!!! Я верил, что простой способ есть! |
Sanja Пользователь Сообщений: 14838 |
Согласие есть продукт при полном непротивлении сторон. |
RAN Пользователь Сообщений: 7091 |
#10 23.12.2016 18:45:57
Но не этот
и
дадут два совершенно различных диапазона (если только случайно второй столбец таблицы не имеет имя «b»)
|
||||||||
Sanja Пользователь Сообщений: 14838 |
#11 24.12.2016 08:39:50 RAN, точно, промашка вышла. Названия столбцов действительно совпадали с их заголовками (#7)
Прикрепленные файлы
Изменено: Sanja — 24.12.2016 09:43:00 Согласие есть продукт при полном непротивлении сторон. |
||
RAN Пользователь Сообщений: 7091 |
#12 24.12.2016 10:12:00
Перемудрил |
||
ZVI Пользователь Сообщений: 4328 |
#13 25.12.2016 01:02:08 Для примера таблицы Андрея из сообщения #11
Изменено: ZVI — 25.12.2016 04:48:28 |
||
Мартын Пользователь Сообщений: 282 |
Нашел простой ИМХО способ: |
tchack Пользователь Сообщений: 183 |
#15 19.12.2022 17:47:26
А как таким образом выделить столбец «Один», «Пять», «Восемь»?? |
||
нажмите Ctrl Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете! |
|
tchack Пользователь Сообщений: 183 |
#17 19.12.2022 18:11:41
Таким способом:
При выборе несмежных столбцов макрорекордер пишет обычный диапазон (не диапазон умной таблицы). |
||||
Дмитрий(The_Prist) Щербаков Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
#18 19.12.2022 18:19:39
выше же дали способ — чем не подходит? Сообщение #13 от 25.12.2016 01:02:08 Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
||
tchack Пользователь Сообщений: 183 |
#19 19.12.2022 19:09:34
Столбцы «Один» и «Два» смежные:
Столбцы «Один», «Пять», «Восемь» — несмежные, а перечисление через запятую выдает ошибку:
|
||||||
sokol92 Пользователь Сообщений: 4445 |
#20 19.12.2022 20:32:32 Найдите разницу между #13:
и #19:
Владимир |
||||
tchack Пользователь Сообщений: 183 |
sokol92, благодарю. Не обратил внимание. |
tchack Пользователь Сообщений: 183 |
#22 19.12.2022 22:05:33 Возможно ли соединить два таких диапазона в одном объекте Range:
Изменено: tchack — 19.12.2022 22:05:56 |
||||
New Пользователь Сообщений: 4581 |
#23 19.12.2022 23:40:48
|
||
tchack Пользователь Сообщений: 183 |
#24 19.12.2022 23:55:35 New, спасибо, так лучше:
но я ищу вариант без Union (если это возможно). Изменено: tchack — 19.12.2022 23:56:01 |
||
New Пользователь Сообщений: 4581 |
если честно, вы ищите костыли ) |
Дмитрий(The_Prist) Щербаков Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
#26 20.12.2022 08:29:43
Вы бы еще написали зачем эти грабли вообще Вам нужны — может чего и придумалось бы. А пока выглядит как желание капризного ребенка — хочу и все Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
||
tchack Пользователь Сообщений: 183 |
Дмитрий(The_Prist) Щербаков, во всех сообщениях спрашивается о возможности, а не о «желании капризного ребенка». Логичный ответ был бы или «такая возможность отсутствует», или «такая возможность есть…..». PS: Если бы покупая внедорожник, Вы бы поинтересовались о возможности проехать на нем через лес, а в ответ бы Вам сказали, что можно проехать по шоссе, а Ваш вопрос это желание капризного ребенка, то чтобы Вы ответили? Изменено: tchack — 20.12.2022 10:43:23 |
Дмитрий(The_Prist) Щербаков Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
#28 20.12.2022 11:04:25
я бы ответил, что Вы сейчас фигню полную написали и с аллегориями у Вас явно проблемы. Вы не подумали о том, что лес лесу рознь? Если в лесу нет дорог — одни деревья и нет даже тропинки — какой нафиг внедорожник? Покупайте танк. А если надо через лес конкретный проехать и мне в салоне вместо дороги через лес показали нормальную дорогу — да я только спасибо им скажу, что не отправили напролом в лес.
Вам привели несколько вариантов — ни один не подошел. Логично на Вашем месте было бы пояснить почему не подходит. Но Вы не хотите — значит это именно желание/каприз, а не конкретная задача. Вот когда поясните как-то иначе, кроме «а как еще можно?», тогда может и появится еще какой-то вариант. Ибо решать задачу просто из разряда «накидайте мне разных вариантов» вряд ли кто захочет.
Изменено: Дмитрий(The_Prist) Щербаков — 20.12.2022 11:10:03 Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
||||||
tchack Пользователь Сообщений: 183 |
#29 11.01.2023 12:18:45 Подскажите, пожалуйста, почему не работает вариант:
но работает:
|
||||
New Пользователь Сообщений: 4581 |
#30 11.01.2023 12:43:22 потому что у вас неверная запись при обращении к объектам Изменено: New — 11.01.2023 12:44:55 |
Excel VBA Columns Property
VBA Columns property is used to refer to columns in the worksheet. Using this property we can use any column in the specified worksheet and work with it.
When we want to refer to the cell, we use either the Range object or Cells property. Similarly, how do you refer to columns in VBA? We can refer to columns by using the “Columns” property. Look at the syntax of COLUMNS property.
Table of contents
- Excel VBA Columns Property
- Examples
- Example #1
- Example #2 – Select Column Based on Variable Value
- Example #3 – Select Column Based on Cell Value
- Example #4 – Combination of Range & Column Property
- Example #5 – Select Multiple Columns with Range Object
- Recommended Articles
- Examples
We need to mention the column number or header alphabet to reference the column.
For example, if we want to refer to the second column, we can write the code in three ways.
Columns (2)
Columns(“B:B”)
Range (“B:B”)
Examples
You can download this VBA Columns Excel Template here – VBA Columns Excel Template
Example #1
If you want to select the second column in the worksheet, then first, we need to mention the column number we need to select.
Code:
Sub Columns_Example() Columns (2) End Sub
Now, put a dot (.) to choose the “Select” method.
One of the problems with this property is we do not get to see the IntelliSense list of VBA.
Code:
Sub Columns_Example() Columns(2).Select End Sub
So, the above VBA codeVBA code refers to a set of instructions written by the user in the Visual Basic Applications programming language on a Visual Basic Editor (VBE) to perform a specific task.read more will select the second column of the worksheet.
Instead of mentioning the column number, we can use the column header alphabet “B” to select the second column.
Code:
Sub Columns_Example() Columns("B").Select Columns("B:B").Select End Sub
The above codes will select column B, i.e., the second column.
Example #2 – Select Column Based on Variable Value
We can also use the variable to select the column number. For example, look at the below code now.
Code:
Sub Columns_Example() Dim ColNum As Integer ColNum = 4 Columns(ColNum).Select End Sub
In the above, we have declared the variable as “Integer” and assigned the value of 4 to this variable.
We have supplied this variable instead of the column number for the Column’s property. Since the variable holds the value of 4, it will select the 4th column.
Example #3 – Select Column Based on Cell Value
We have seen how to select the column based on variable value now. Next, we will see how we can select the column based on the cell value number. For example, in cell A1 we have entered the number 3.
The code below will select the column based on the number in cell A1.
Code:
Sub Columns_Example() Dim ColNum As Integer ColNum = Range("A1").Value Columns(ColNum).Select End Sub
The above code is the same as the previous one. Still, the only thing we have changed here is instead of assigning the direct number to the variable. Instead, we gave a variable value as “whatever the number is in cell A1.”
Since we have a value of 3 in cell A1, it will select the third column.
Example #4 – Combination of Range & Column Property
We can also use the Columns property with the Range object. Using the Range object, we can specify the specific range. For example, look at the below code.
Code:
Sub Columns_Example1() Range("C1:D5").Columns(2).Select End Sub
In the above example, we have specified the range of cells as C1 to D5. Then, using the columns property, we have specified the column number as 2 to select.
Now, in general, our second column is B. So the code has to select the “B” column but see what happens when we run the code.
It has selected the cells from D1 to D5.
In our perception, it should have selected the second column, i.e., column B. But now, it has selected the cells from D1 to D5.
It has selected these cells because before using the COLUMNS property, we have specified the range using the RANGE object as C1 to D5. Now, the property thinks within this range as the columns and selects the second column in the range C1 to D5. Therefore, D is the second column, and specified cells are D1 to D5.
Example #5 – Select Multiple Columns with Range Object
Using the Range object and Columns property, we can select multiple columns. For example, look at the below code.
Code:
Sub Columns_Example1() Range(Columns(2), Columns(5)).Select End Sub
The code will select the column from the second column to the fifth column, i.e., from column B to E.
We can also write the code in this way.
Code:
Sub Columns_Example1() Range(Columns(B), Columns(E)).Select End Sub
The above is the same as the previous one and selects the columns from B to E.
Like this, we can use the COLUMNS property to work with the worksheet.
Recommended Articles
This article has been a guide to VBA Columns. Here, we discuss examples of the column property in Excel VBA and select multiple columns with the range object and downloadable Excel templates. Below are some useful articles related to VBA: –
- DateSerial Function in Excel VBA
- Hide Columns in VBA
- Insert Columns in VBA
- Delete Column in VBA
- VBA Variable Types
Содержание
- Свойство Range.Columns (Excel)
- Синтаксис
- Замечания
- Пример
- Поддержка и обратная связь
- Выбор ячеек и диапазонов с помощью процедур Visual Basic в Excel
- Выбор ячейки на активном листе
- Выбор ячейки на другом листе в той же книге
- Выбор ячейки на листе в другой книге
- Выбор диапазона ячеек на активном листе
- Выбор диапазона ячеек на другом листе в той же книге
- Выбор диапазона ячеек на листе в другой книге
- Выбор именованного диапазона на активном листе
- Выбор именованного диапазона на другом листе в той же книге
- Выбор именованного диапазона на листе в другой книге
- Выбор ячейки относительно активной ячейки
- Выбор ячейки относительно другой (не активной) ячейки
- Выбор смещения диапазона ячеек из указанного диапазона
- Выбор указанного диапазона и изменение его размера
- Выбор указанного диапазона, его смещение и изменение размера
- Выбор объединения двух или более указанных диапазонов
- Выбор пересечения двух или более указанных диапазонов
- Выбор последней ячейки столбца непрерывных данных
- Выбор пустой ячейки в нижней части столбца непрерывных данных
- Выбор целого диапазона смежных ячеек в столбце
- Как выбрать весь диапазон несмежных ячеек в столбце
- Выбор прямоугольного диапазона ячеек
- Выбор нескольких несмежных столбцов разной длины
- Примечания к примерам
- Excel VBA — select multiple columns not in sequential order
- 5 Answers 5
- Linked
- Related
- Hot Network Questions
- Subscribe to RSS
- Объект Range (Excel)
- Примечания
- Пример
- Методы
- Свойства
- См. также
- Поддержка и обратная связь
Свойство Range.Columns (Excel)
Возвращает объект Range , представляющий столбцы в указанном диапазоне.
Синтаксис
expression. Столбцы
выражение: переменная, представляющая объект Range.
Замечания
Чтобы вернуть один столбец, используйте свойство Item или аналогично включите индекс в круглые скобки. Например, и Selection.Columns(1) возвращают Selection.Columns.Item(1) первый столбец выделенного фрагмента.
При применении к объекту Range , который является выделенным с несколькими областями, это свойство возвращает столбцы только из первой области диапазона. Например, если объект Range имеет две области — A1:B2 и C3:D4, возвращает Selection.Columns.Count значение 2, а не 4. Чтобы использовать это свойство в диапазоне, который может содержать выбор из нескольких областей, проверьте Areas.Count , содержит ли диапазон несколько областей. Если это так, выполните цикл по каждой области в диапазоне.
Возвращаемый диапазон может находиться за пределами указанного диапазона. Например, Range(«A1:B2»).Columns(5).Select возвращает ячейки E1:E2.
Если буква используется в качестве индекса, она эквивалентна числу. Например, Range(«B1:C10»).Columns(«B»).Select возвращает ячейки C1:C10, а не ячейки B1:B10. В примере «B» эквивалентно 2.
Использование свойства Columns без квалификатора объекта эквивалентно использованию ActiveSheet.Columns . Дополнительные сведения см. в свойстве Worksheet.Columns .
Пример
В этом примере для каждой ячейки в столбце один в диапазоне с именем myRange задается значение 0 (ноль).
В этом примере отображается количество столбцов в выделенном фрагменте на листе Sheet1. Если выбрано несколько областей, в примере выполняется цикл по каждой области.
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Источник
Выбор ячеек и диапазонов с помощью процедур Visual Basic в Excel
Корпорация Майкрософт предоставляет примеры программирования только в целях демонстрации без явной или подразумеваемой гарантии. Данное положение включает, но не ограничивается этим, подразумеваемые гарантии товарной пригодности или соответствия отдельной задаче. Эта статья предполагает, что пользователь знаком с представленным языком программирования и средствами, используемыми для создания и отладки процедур. Специалисты технической поддержки Майкрософт могут пояснить работу той или иной процедуры, но модификация примеров и их адаптация к задачам разработчика не предусмотрена. В примерах в этой статье используются методы Visual Basic, перечисленные в следующей таблице.
В примерах в этой статье используются свойства, приведенные в следующей таблице.
Выбор ячейки на активном листе
Чтобы выбрать ячейку D5 на активном листе, можно использовать один из следующих примеров:
Выбор ячейки на другом листе в той же книге
Чтобы выбрать ячейку E6 на другом листе в той же книге, можно использовать один из следующих примеров:
Кроме того, можно активировать лист, а затем выбрать ячейку с помощью метода 1, приведенного выше:
Выбор ячейки на листе в другой книге
Чтобы выбрать ячейку F7 на листе в другой книге, можно использовать один из следующих примеров:
Кроме того, можно активировать лист, а затем выбрать ячейку с помощью метода 1, приведенного выше:
Выбор диапазона ячеек на активном листе
Чтобы выбрать диапазон C2:D10 на активном листе, можно использовать любой из следующих примеров:
Выбор диапазона ячеек на другом листе в той же книге
Чтобы выбрать диапазон D3:E11 на другом листе в той же книге, можно использовать один из следующих примеров:
Кроме того, можно активировать лист, а затем выбрать диапазон с помощью метода 4, приведенного выше:
Выбор диапазона ячеек на листе в другой книге
Чтобы выбрать диапазон E4:F12 на листе в другой книге, можно использовать один из следующих примеров:
Кроме того, можно активировать лист, а затем выбрать диапазон с помощью метода 4, приведенного выше:
Выбор именованного диапазона на активном листе
Чтобы выбрать именованный диапазон «Тест» на активном листе, можно использовать один из следующих примеров:
Выбор именованного диапазона на другом листе в той же книге
Чтобы выбрать именованный диапазон «Тест» на другом листе в той же книге, можно использовать следующий пример:
Или можно активировать лист, а затем использовать метод 7 выше, чтобы выбрать именованный диапазон:
Выбор именованного диапазона на листе в другой книге
Чтобы выбрать именованный диапазон «Тест» на листе в другой книге, можно использовать следующий пример:
Или можно активировать лист, а затем использовать метод 7 выше, чтобы выбрать именованный диапазон:
Выбор ячейки относительно активной ячейки
Чтобы выбрать ячейку с пятью строками ниже и четырьмя столбцами слева от активной ячейки, можно использовать следующий пример:
Чтобы выбрать ячейку с двумя строками выше и тремя столбцами справа от активной ячейки, можно использовать следующий пример:
При попытке выбрать ячейку, которая находится вне листа, произойдет ошибка. Первый пример, показанный выше, вернет ошибку, если активная ячейка находится в столбцах A–D, так как перемещение четырех столбцов влево приведет к переходу активной ячейки на недопустимый адрес ячейки.
Выбор ячейки относительно другой (не активной) ячейки
Чтобы выбрать ячейку с пятью строками ниже и четырьмя столбцами справа от ячейки C7, можно использовать один из следующих примеров:
Выбор смещения диапазона ячеек из указанного диапазона
Чтобы выбрать диапазон ячеек того же размера, что и именованный диапазон «Тест», но сдвинув четыре строки вниз и три столбца вправо, можно использовать следующий пример:
Если именованный диапазон находится на другом (не активном) листе, сначала активируйте этот лист, а затем выберите диапазон, используя следующий пример:
Выбор указанного диапазона и изменение его размера
Чтобы выбрать именованный диапазон «База данных», а затем расширить выделение на пять строк, можно использовать следующий пример:
Выбор указанного диапазона, его смещение и изменение размера
Чтобы выбрать диапазон из четырех строк ниже и трех столбцов справа от именованного диапазона «База данных» и включить две строки и один столбец больше именованного диапазона, можно использовать следующий пример:
Выбор объединения двух или более указанных диапазонов
Чтобы выбрать объединение (то есть объединенную область) двух именованных диапазонов «Тест» и «Образец», можно использовать следующий пример:
Значение , чтобы оба диапазона были на одном листе для работы в этом примере. Обратите внимание, что метод Union не работает на разных листах. Например, эта строка работает нормально.
возвращает сообщение об ошибке:
Сбой метода Union класса приложения
Выбор пересечения двух или более указанных диапазонов
Чтобы выбрать пересечение двух именованных диапазонов «Тест» и «Образец», можно использовать следующий пример:
Обратите внимание, что для работы в этом примере оба диапазона должны находиться на одном листе.
Примеры 17–21 в этой статье относятся к следующему примеру набора данных. В каждом примере указывается диапазон ячеек в выборке данных, которые будут выбраны.
Выбор последней ячейки столбца непрерывных данных
Чтобы выбрать последнюю ячейку в непрерывном столбце, используйте следующий пример:
При использовании этого кода с образцом таблицы будет выбрана ячейка A4.
Выбор пустой ячейки в нижней части столбца непрерывных данных
Чтобы выбрать ячейку под диапазоном смежных ячеек, используйте следующий пример:
При использовании этого кода с образцом таблицы будет выбрана ячейка A5.
Выбор целого диапазона смежных ячеек в столбце
Чтобы выбрать диапазон смежных ячеек в столбце, используйте один из следующих примеров:
При использовании этого кода с образцом таблицы будут выделены ячейки A1–A4.
Как выбрать весь диапазон несмежных ячеек в столбце
Чтобы выбрать диапазон несмежных ячеек, используйте один из следующих примеров:
При использовании этого кода с образцом таблицы будут выделены ячейки A1–A6.
Выбор прямоугольного диапазона ячеек
Чтобы выбрать прямоугольный диапазон ячеек вокруг ячейки, используйте метод CurrentRegion. Диапазон, выбранный методом CurrentRegion, — это область, ограниченная любым сочетанием пустых строк и пустых столбцов. Ниже приведен пример использования метода CurrentRegion.
Этот код будет выбирать ячейки A1–C4. Ниже перечислены другие примеры выбора того же диапазона ячеек.
В некоторых случаях может потребоваться выбрать ячейки A1–C6. В этом примере метод CurrentRegion не будет работать из-за пустой строки в строке 5. В следующих примерах будут выделены все ячейки:
Выбор нескольких несмежных столбцов разной длины
Чтобы выбрать несколько несмежных столбцов разной длины, используйте следующий пример таблицы и макроса:
При использовании этого кода с образцом таблицы будут выбраны ячейки A1:A3 и C1:C6.
Примечания к примерам
Свойство ActiveSheet обычно можно опустить, так как оно подразумевается, если конкретный лист не называется. Например, вместо
вы можете использовать:
Свойство ActiveWorkbook также обычно можно опустить. Если не указано имя конкретной книги, она подразумевается.
При использовании метода Application.Goto, если вы хотите использовать два метода Cells в методе Range, если указанный диапазон находится на другом (не активном) листе, необходимо каждый раз включать объект Sheets. Например:
Для любого элемента в кавычках (например, именованного диапазона Test) можно также использовать переменную, значение которой является текстовой строкой. Например, вместо
Источник
Excel VBA — select multiple columns not in sequential order
I would like to select multiple columns.
Eg. I want to select column a, b, d, e, g, h
I get error message: Type mismatch .
5 Answers 5
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
Some things of top of my head.
Method 1.
Method 2.
Method 3.
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
Hope you find useful — DON’T FORGET THAT COMMA BEFORE THE SECOND COLUMN, AS I DID, OR IT WILL BOMB!!
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
As a recorded macro.
Linked
Hot Network Questions
To subscribe to this RSS feed, copy and paste this URL into your RSS reader.
Site design / logo © 2023 Stack Exchange Inc; user contributions licensed under CC BY-SA . rev 2023.3.20.43327
By clicking “Accept all cookies”, you agree Stack Exchange can store cookies on your device and disclose information in accordance with our Cookie Policy.
Источник
Объект Range (Excel)
Представляет ячейку, строку, столбец или группу ячеек, содержащую один или несколько смежных блоков ячеек или объемный диапазон.
Хотите создавать решения, которые расширяют возможности Office на разнообразных платформах? Ознакомьтесь с новой моделью надстроек Office. Надстройки Office занимают меньше места по сравнению с надстройками и решениями VSTO, и вы можете создавать их, используя практически любую технологию веб-программирования, например HTML5, JavaScript, CSS3 и XML.
Примечания
Элемент по умолчанию объекта Range направляет вызовы без параметров в свойство Value, а вызовы с параметрами — в элемент Item. Таким образом, someRange = someOtherRange соответствует someRange.Value = someOtherRange.Value , someRange(1) соответствует someRange.Item(1) и someRange(1,1) соответствует someRange.Item(1,1) .
В разделе Пример описаны следующие свойства и методы для возврата объекта Range:
- Свойства Range и Cells объекта Worksheet
- Свойства Range и Cells объекта Range
- Свойства Rows и Columns объекта Worksheet
- Свойства Rows и Columns объекта Range
- Свойство Offset объекта Range
- Метод Union объекта Application
Пример
Чтобы вернуть объект Range, представляющий одну ячейку или диапазон ячеек, используйте синтаксис Range ( arg ), где arg обозначает диапазон. В следующем примере значение ячейки A1 помещается в ячейку A5.
В следующем примере диапазон A1:H8 заполняется случайными числами путем задания формулы для каждой ячейки в диапазоне. При использовании без квалификатора объекта (объекта слева от точки) свойство Range возвращает диапазон на активном листе. Если активное окно не является листом, метод завершается с ошибкой.
Используйте метод Activate объекта Worksheet, чтобы активировать лист перед использованием свойства Range без явного квалификатора объекта.
В следующем примере очищается содержимое диапазона Criteria.
Если используется текстовый аргумент для адреса диапазона, необходимо указать адрес в нотации стиля A1 (нельзя использовать нотацию в стиле R1C1).
Чтобы получить диапазон, содержащий все отдельные ячейки листа, используйте свойство Cells на листе. Вы можете обращаться к отдельным ячейкам, используя синтаксис Item(строка, столбец), где строка — индекс строки, а столбец — индекс столбца. Свойство Item можно пропустить, так как вызов направляется к нему с помощью элемента по умолчанию объекта Range. В следующем примере на первом листе активной книги ячейке A1 присваивается значение 24, а в ячейке B1 — значение 42.
В следующем примере задается формула для ячейки A2.
Хотя также можно использовать Range(«A1») , чтобы вернуть значение ячейки A1, иногда свойство Cells может быть удобнее, так как позволяет использовать переменную для строки или столбца. В следующем примере создаются заголовки столбцов и строк на листе Sheet1. Обратите внимание, что после активации листа можно использовать свойство Cells без явного объявления листа (оно возвращает ячейку на активном листе).
Хотя для изменения ссылок в стиле A1 можно использовать строковые функции Visual Basic, проще (и лучше при программировании) использовать нотацию Cells(1, 1) .
Используйте синтаксис_выражение_.Cells, где выражение возвращает объект Range, чтобы получить диапазон с тем же адресом, состоящий из отдельных ячеек. В таком диапазоне отдельные ячейки доступны с помощью синтаксиса Item(строка, столбец) относительно левого верхнего угла первой области диапазона. Свойство Item можно пропустить, так как вызов направляется к нему с помощью элемента по умолчанию объекта Range. В следующем примере на первом листе активной книги в ячейках C5 и D5 указывается формула.
Чтобы вернуть объект Range, используйте синтаксис Range ( ячейка1, ячейка2 ), где ячейка1 и ячейка2 — это объекты Range, указывающие начальную и конечную ячейки. В следующем примере устанавливается тип линии границы для ячеек A1:J10.
Имейте в виду, что точка перед каждым появлением свойства Cells является обязательной, если результат предыдущего оператора With нужно применять к свойству Cells. В данном случае указано, что ячейки расположены на листе один (без точки свойство Cells будет возвращать ячейки активного листа).
Чтобы получить диапазон, содержащий все строки листа, используйте свойство Rows на листе. Вы можете обращаться к отдельным строкам с помощью синтаксиса Item(строка), где строка — это индекс строки. Свойство Item можно пропустить, так как вызов направляется к нему с помощью элемента по умолчанию объекта Range.
Недопустимо указывать второй параметр свойства Item для диапазонов, состоящих из строк. Сначала нужно преобразовать их в отдельные ячейки, используя свойство Cells.
В следующем примере удаляются строки 5 и 10 первого листа активной книги.
Чтобы получить диапазон, содержащий все столбцы листа, используйте свойство Columns на листе. Вы можете обращаться к отдельным столбцам с помощью синтаксиса Item(строка) [sic], где строка — это индекс столбца в виде числа или адреса столбца в формате А1. Свойство Item можно пропустить, так как вызов направляется к нему с помощью элемента по умолчанию объекта Range.
Недопустимо указывать второй параметр свойства Item для диапазонов, состоящих из столбцов. Сначала нужно преобразовать их в отдельные ячейки, используя свойство Cells.
В следующем примере удаляются столбцы B, C, E и J первого листа активной книги.
Используйте синтаксис_выражение_.Rows, где выражение возвращает объект Range, чтобы получить диапазон, состоящий из строк первой области диапазона. Вы можете обращаться к отдельным строкам с помощью синтаксиса Item(строка), где строка — это относительный индекс строки от верхнего края первой области диапазона. Свойство Item можно пропустить, так как вызов направляется к нему с помощью элемента по умолчанию объекта Range.
Недопустимо указывать второй параметр свойства Item для диапазонов, состоящих из строк. Сначала нужно преобразовать их в отдельные ячейки, используя свойство Cells.
В следующем примере удаляются диапазоны C8:D8 и C6:D6 первого листа активной книги.
Используйте синтаксис_выражение_.Columns, где выражение возвращает объект Range, чтобы получить диапазон, состоящий из столбцов первой области диапазона. Вы можете обращаться к отдельным столбцам с помощью синтаксиса Item(строка) [sic], где строка — это относительный индекс столбца от левого края первой области диапазона, указанный в виде числа или адреса столбца в формате A1. Свойство Item можно пропустить, так как вызов направляется к нему с помощью элемента по умолчанию объекта Range.
Недопустимо указывать второй параметр свойства Item для диапазонов, состоящих из столбцов. Сначала нужно преобразовать их в отдельные ячейки, используя свойство Cells.
В следующем примере удаляются диапазоны L2:L10, G2:G10, F2:F10 и D2:D10 первого листа активной книги.
Чтобы вернуть диапазон с указанным смещением относительно другого диапазона, используйте синтаксис Offset ( строка, столбец ), где строка и столбец — это смещения строк и столбцов. В следующем примере выделяются ячейки, расположенные на три строки вниз и на один столбец вправо от ячейки в левом верхнем углу текущего выделенного фрагмента. Нельзя выбрать ячейку, которая находится не на активном листе, поэтому сначала необходимо активировать лист.
Используйте синтаксис Union ( диапазон1, диапазон2, . ) для возврата диапазонов из нескольких областей, то есть диапазонов, состоящих из двух или более смежных блоков ячеек. В следующем примере создается объект, определенный как объединение диапазонов A1:B2 и C3:D4, а затем выбирается определенный диапазон.
При работе с выделенными фрагментами, содержащими несколько областей, удобно применять свойство Areas. Оно разделяет выделенный фрагмент с несколькими областями на отдельные объекты Range, а затем возвращает объекты в виде коллекции. Используйте свойство Count в возвращенной коллекции, чтобы убедиться, что выделение содержит более одной области, как показано в следующем примере.
В этом примере используется метод AdvancedFilter объекта Range для создания списка уникальных значений, а также количества появлений этих уникальных значений в диапазоне столбца A.
Методы
Свойства
См. также
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Источник
In this Article
- Select Entire Rows or Columns
- Select Single Row
- Select Single Column
- Select Multiple Rows or Columns
- Select ActiveCell Row or Column
- Select Rows and Columns on Other Worksheets
- Is Selecting Rows and Columns Necessary?
- Methods and Properties of Rows & Columns
- Delete Entire Rows or Columns
- Insert Rows or Columns
- Copy & Paste Entire Rows or Columns
- Hide / Unhide Rows and Columns
- Group / UnGroup Rows and Columns
- Set Row Height or Column Width
- Autofit Row Height / Column Width
- Rows and Columns on Other Worksheets or Workbooks
- Get Active Row or Column
This tutorial will demonstrate how to select and work with entire rows or columns in VBA.
First we will cover how to select entire rows and columns, then we will demonstrate how to manipulate rows and columns.
Select Entire Rows or Columns
Select Single Row
You can select an entire row with the Rows Object like this:
Rows(5).Select
Or you can use EntireRow along with the Range or Cells Objects:
Range("B5").EntireRow.Select
or
Cells(5,1).EntireRow.Select
You can also use the Range Object to refer specifically to a Row:
Range("5:5").Select
Select Single Column
Instead of the Rows Object, use the Columns Object to select columns. Here you can reference the column number 3:
Columns(3).Select
or letter “C”, surrounded by quotations:
Columns("C").Select
Instead of EntireRow, use EntireColumn along with the Range or Cells Objects to select entire columns:
Range("C5").EntireColumn.Select
or
Cells(5,3).EntireColumn.Select
You can also use the Range Object to refer specifically to a column:
Range("B:B").Select
Select Multiple Rows or Columns
Selecting multiple rows or columns works exactly the same when using EntireRow or EntireColumn:
Range("B5:D10").EntireRow.Select
or
Range("B5:B10").EntireColumn.Select
However, when you use the Rows or Columns Objects, you must enter the row numbers or column letters in quotations:
Rows("1:3").Select
or
Columns("B:C").Select
Select ActiveCell Row or Column
To select the ActiveCell Row or Column, you can use one of these lines of code:
ActiveCell.EntireRow.Select
or
ActiveCell.EntireColumn.Select
Select Rows and Columns on Other Worksheets
In order to select Rows or Columns on other worksheets, you must first select the worksheet.
Sheets("Sheet2").Select
Rows(3).Select
The same goes for when selecting rows or columns in other workbooks.
Workbooks("Book6.xlsm").Activate
Sheets("Sheet2").Select
Rows(3).Select
Note: You must Activate the desired workbook. Unlike the Sheets Object, the Workbook Object does not have a Select Method.
VBA Coding Made Easy
Stop searching for VBA code online. Learn more about AutoMacro — A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!
Learn More
Is Selecting Rows and Columns Necessary?
However, it’s (almost?) never necessary to actually select Rows or Columns. You don’t need to select a Row or Column in order to interact with them. Instead, you can apply Methods or Properties directly to the Rows or Columns. The next several sections will demonstrate different Methods and Properties that can be applied.
You can use any method listed above to refer to Rows or Columns.
Methods and Properties of Rows & Columns
Delete Entire Rows or Columns
To delete rows or columns, use the Delete Method:
Rows("1:4").Delete
or:
Columns("A:D").Delete
VBA Programming | Code Generator does work for you!
Insert Rows or Columns
Use the Insert Method to insert rows or columns:
Rows("1:4").Insert
or:
Columns("A:D").Insert
Copy & Paste Entire Rows or Columns
Paste Into Existing Row or Column
When copying and pasting entire rows or columns you need to decide if you want to paste over an existing row / column or if you want to insert a new row / column to paste your data.
These first examples will copy and paste over an existing row or column:
Range("1:1").Copy Range("5:5")
or
Range("C:C").Copy Range("E:E")
Insert & Paste
These next examples will paste into a newly inserted row or column.
This will copy row 1 and insert it into row 5, shifting the existing rows down:
Range("1:1").Copy
Range("5:5").Insert
This will copy column C and insert it into column E, shifting the existing columns to the right:
Range("C:C").Copy
Range("E:E").Insert
Hide / Unhide Rows and Columns
To hide rows or columns set their Hidden Properties to True. Use False to hide the rows or columns:
'Hide Rows
Rows("2:3").EntireRow.Hidden = True
'Unhide Rows
Rows("2:3").EntireRow.Hidden = False
or
'Hide Columns
Columns("B:C").EntireColumn.Hidden = True
'Unhide Columns
Columns("B:C").EntireColumn.Hidden = False
Group / UnGroup Rows and Columns
If you want to Group rows (or columns) use code like this:
'Group Rows
Rows("3:5").Group
'Group Columns
Columns("C:D").Group
To remove the grouping use this code:
'Ungroup Rows
Rows("3:5").Ungroup
'Ungroup Columns
Columns("C:D").Ungroup
This will expand all “grouped” outline levels:
ActiveSheet.Outline.ShowLevels RowLevels:=8, ColumnLevels:=8
and this will collapse all outline levels:
ActiveSheet.Outline.ShowLevels RowLevels:=1, ColumnLevels:=1
Set Row Height or Column Width
To set the column width use this line of code:
Columns("A:E").ColumnWidth = 30
To set the row height use this line of code:
Rows("1:1").RowHeight = 30
AutoMacro | Ultimate VBA Add-in | Click for Free Trial!
Autofit Row Height / Column Width
To Autofit a column:
Columns("A:B").Autofit
To Autofit a row:
Rows("1:2").Autofit
Rows and Columns on Other Worksheets or Workbooks
To interact with rows and columns on other worksheets, you must define the Sheets Object:
Sheets("Sheet2").Rows(3).Insert
Similarly, to interact with rows and columns in other workbooks, you must also define the Workbook Object:
Workbooks("book1.xlsm").Sheets("Sheet2").Rows(3).Insert
Get Active Row or Column
To get the active row or column, you can use the Row and Column Properties of the ActiveCell Object.
MsgBox ActiveCell.Row
or
MsgBox ActiveCell.Column
This also works with the Range Object:
MsgBox Range("B3").Column
Содержание
- Выбрать целые строки или столбцы
- Методы и свойства строк и столбцов
- Строки и столбцы на других листах или книгах
- Получить активную строку или столбец
В этом руководстве будет показано, как выбирать и работать с целыми строками или столбцами в VBA.
Сначала мы рассмотрим, как выбирать целые строки и столбцы, а затем продемонстрируем, как управлять строками и столбцами.
Выбрать целые строки или столбцы
Выбрать одну строку
Вы можете выбрать всю строку с помощью Строки объекта нравится:
Или вы можете использовать Весь ряд вместе с Диапазон или Объекты Cells:
1 | Диапазон («B5»). Весь ряд. Выбрать |
или
1 | Ячейки (5,1) .EntireRow.Select |
Вы также можете использовать Объект диапазона для обозначения конкретно строки:
1 | Диапазон («5: 5»). Выберите |
Выбрать один столбец
Вместо Строки объекта, использовать Столбцы Объект для выбора столбцов. Здесь вы можете сослаться на столбец номер 3:
или буква «C», окруженная цитатами:
Вместо того Весь ряд, использовать Весь столбец вместе с Диапазон или Объекты Cells для выбора целых столбцов:
1 | Диапазон («C5»). Весь столбец. Выбрать |
или
1 | Ячейки (5,3) .EntireColumn.Select |
Вы также можете использовать Объект диапазона чтобы обратиться конкретно к столбцу:
1 | Диапазон («B: B»). Выберите |
Выберите несколько строк или столбцов
Выбор нескольких строк или столбцов работает точно так же, когда используются полные строки или полные столбцы:
1 | Диапазон («B5: D10»). Весь ряд. Выбрать |
или
1 | Диапазон («B5: B10»). Весь столбец. Выбрать |
Однако, когда вы используете объекты Rows или Columns, вы должны вводить номера строк или буквы столбцов в кавычках:
1 | Ряды («1: 3»). Выберите |
или
1 | Столбцы («B: C»). Выберите |
Выберите строку или столбец ActiveCell
Чтобы выбрать строку или столбец ActiveCell, вы можете использовать одну из следующих строк кода:
1 | ActiveCell.EntireRow.Select |
или
1 | ActiveCell.EntireColumn.Select |
Выберите строки и столбцы на других листах
Чтобы выбрать строки или столбцы на других листах, вы должны сначала выбрать рабочий лист.
12 | Таблицы («Лист2»). ВыберитеРяды (3) .Выбрать. |
То же самое происходит при выборе строк или столбцов в других книгах.
123 | Книги («Book6.xlsm»). АктивироватьТаблицы («Лист2»). ВыберитеРяды (3) .Выбрать. |
Примечание: вы должны Активировать желаемую книгу. в отличие от Листы Объект, то Объект книги не имеет Выбрать метод.
Нужно ли выбирать строки и столбцы?
Однако (почти?) Фактически никогда не нужно выбирать строки или столбцы. Вам не нужно выбирать строку или столбец, чтобы взаимодействовать с ними. Вместо этого вы можете применять методы или свойства непосредственно к строкам или столбцам. В следующих нескольких разделах будут продемонстрированы различные методы и свойства, которые можно применить.
Вы можете использовать любой из перечисленных выше методов для обращения к строкам или столбцам.
Методы и свойства строк и столбцов
Удалить целые строки или столбцы
Чтобы удалить строки или столбцы, используйте Удалить метод:
1 | Строки («1: 4»). Удалить. |
или:
1 | Столбцы («A: D»). Удалить |
Вставить строки или столбцы
Использовать Вставить метод для вставки строк или столбцов:
1 | Ряды («1: 4»). Вставить |
или:
1 | Столбцы («A: D»). Вставить |
Копировать и вставлять целые строки или столбцы
Вставить в существующую строку или столбец
При копировании и вставке целых строк или столбцов вам необходимо решить, хотите ли вы вставить поверх существующей строки / столбца или вы хотите вставить новую строку / столбец для вставки данных.
Эти первые примеры будут копировать и вставлять существующую строку или столбец:
1 | Диапазон («1: 1»). Копировать диапазон («5: 5») |
или
1 | Диапазон («C: C»). Копировать диапазон («E: E») |
Вставить и вставить
Эти следующие примеры будут вставлены во вновь вставленную строку или столбец.
Это скопирует строку 1 и вставит ее в строку 5, сдвинув существующие строки вниз:
12 | Диапазон («1: 1»). КопироватьДиапазон («5: 5»). Вставить |
Это скопирует столбец C и вставит его в столбец E, сдвинув существующие столбцы вправо:
12 | Диапазон («C: C»). КопироватьДиапазон («E: E»). Вставить |
Скрыть / показать строки и столбцы
Чтобы скрыть строки или столбцы, установите их Скрытые свойства к True. Используйте False, чтобы скрыть строки или столбцы:
12345 | ‘Скрыть строкиСтроки («2: 3»). CompleteRow.Hidden = True’Показать строкиСтроки («2: 3»). CompleteRow.Hidden = False |
или
12345 | ‘Скрыть столбцыСтолбцы («B: C»). CompleteColumn.Hidden = True’Показать столбцыСтолбцы («B: C»). CompleteColumn.Hidden = False |
Группировать / разгруппировать строки и столбцы
Если вы хотите сгруппировать строки (или столбцы), используйте такой код:
12345 | ‘Групповые строкиРяды («3: 5»). Группа’Столбцы группыСтолбцы («C: D»). Группа |
Чтобы удалить группировку, используйте этот код:
12345 | ‘Разгруппировать строкиРяды («3: 5»). Разгруппировать.’Разгруппировать столбцыСтолбцы («C: D»). Разгруппировать |
Это расширит все «сгруппированные» уровни структуры:
1 | ActiveSheet.Outline.ShowLevels RowLevels: = 8, ColumnLevels: = 8 |
и это свернет все уровни структуры:
1 | ActiveSheet.Outline.ShowLevels RowLevels: = 1, ColumnLevels: = 1 |
Установить высоту строки или ширину столбца
Чтобы установить ширину столбца, используйте эту строку кода:
1 | Столбцы («A: E»). Ширина столбца = 30 |
Чтобы установить высоту строки, используйте эту строку кода:
1 | Ряды («1: 1»). RowHeight = 30 |
Автоподбор высоты строки / ширины столбца
Для автозаполнения столбца:
1 | Столбцы («A: B»). Автоподбор |
Для автоматического заполнения строки:
1 | Ряды («1: 2»). Автоподбор |
Строки и столбцы на других листах или книгах
Чтобы взаимодействовать со строками и столбцами на других листах, вы должны определить Листы Объект:
1 | Листы («Лист2»). Ряды (3) .Вставить |
Точно так же, чтобы взаимодействовать со строками и столбцами в других книгах, вы также должны определить Объект книги:
1 | Рабочие тетради («book1.xlsm»). Листы («Sheet2»). Строки (3). Вставить |
Получить активную строку или столбец
Чтобы получить активную строку или столбец, вы можете использовать Ряд а также Свойства столбца принадлежащий Объект ActiveCell.
или
1 | MsgBox ActiveCell.Column |
Это также работает с Объект диапазона:
1 | MsgBox Range («B3»). Столбец |
AndreA SN 1014 / 118 / 2 Регистрация: 26.08.2011 Сообщений: 1,113 Записей в блоге: 2 |
||||||||
1 |
||||||||
05.04.2018, 14:29. Показов 15264. Ответов 2 Метки нет (Все метки)
Существует способ выделить строки
хотелось бы таким же путем выделять столбцы. Что-то типа
где кол_начальное и кол_конечное — числа
0 |
Казанский 15136 / 6410 / 1730 Регистрация: 24.09.2011 Сообщений: 9,999 |
||||
05.04.2018, 14:32 |
2 |
|||
РешениеAndreA SN,
1 |
1014 / 118 / 2 Регистрация: 26.08.2011 Сообщений: 1,113 Записей в блоге: 2 |
|
05.04.2018, 14:33 [ТС] |
3 |
Спасибо, Алексей.
0 |