Vba excel столбец по номеру

Свойства 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
Регистрация: 01.01.1970

Всем здравствуйте! Подскажите, как с помощью VBA можно выделить определенные столбцы по их номерам?  
Т.е., например а=2, b=5, как выделить столбцы с а по b, со второго по пятый?

 

Юрий М

Модератор

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

Контакты см. в профиле

Включите макрорекордер и запишите выделение этих столбцов.

 

ran

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

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

 

Amberalex

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

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

Макрорекодер использует буквенные обозначения столбцов  
Columns(«B:F»).Select  
А мне нужно выделение столбцов и использованием числовых переменных, по их номеру.

 

Serge

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

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

{quote}{login=Amberalex}{date=26.09.2011 09:42}{thema=Выделение столбцов по номеру}{post}  
Т.е., например а=2, b=5, как выделить столбцы с а по b, со второго по пятый?{/post}{/quote}Извините, а между столбцами a и b какие идут?  
Я про третий и четвёртый…

 

Amberalex

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

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

RAN, большое спасибо, работает )  
Serge 007, не понял вопроса…

 

Serge

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

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

{quote}{login=Amberalex}{date=26.09.2011 09:52}{thema=}{post}  
Serge 007, не понял вопроса…{/post}{/quote}А что непонятного?  
У меня МЕЖДУ столбцами a и b других нет.  
a — первый, b — второй.  
У Вас не так?

 

Юрий М

Модератор

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

Контакты см. в профиле

Ага, про номера не углядел :-) Но по указанной ссылке всё есть.  
Серж, a и b — переменные :-)

 

Serge

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

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

#9

26.09.2011 21:59:06

{quote}{login=Юрий М}{date=26.09.2011 09:57}{thema=}{post}  
Серж, a и b — переменные :-){/post}{/quote}Тогда понятно…  
А я всё по старинке, в экселе…  
Пора на свалку.

<#0>

0 / 0 / 0

Регистрация: 13.02.2012

Сообщений: 18

1

14.02.2012, 21:04. Показов 23497. Ответов 12


Студворк — интернет-сервис помощи студентам

Есть ли в VBA функция переводящая номер столбца в его буквенный эквивалент в Excel’е?
Т.е. мне предположим надо вывести в msgbox информацию о том, с каким столбцом мы имеем дело. Его числовой номер я знаю, но хочу для удобства подать его в буквенном виде. Использовать оператор Select Case с длиной 256 строк как то не хочется… Есть другие варианты решения?



0



Казанский

15136 / 6410 / 1730

Регистрация: 24.09.2011

Сообщений: 9,999

14.02.2012, 22:08

2

Лучший ответ Сообщение было отмечено как решение

Решение

Например столбец 56

Visual Basic
1
2
3
4
Dim a
a = Cells(1, 56).Address(0, 0)
a = Left(a, Len(a) - 1)
Debug.Print a

Или так

Visual Basic
1
Debug.Print split(application.ConvertFormula ("R1C56",xlR1C1 ,xla1),"$")(1)

Добавлено через 24 минуты
Нашел тему с другого сайта, где это обсуждалось. Еще вариация на тему первого и второго вариантов:

Visual Basic
1
2
3
Узнаём имя 6-го столбца
 
MsgBox Split(Cells(1, 6).Address, "$")(1)

Еще

У меня получилась такая функция:

Visual Basic
1
2
3
4
5
6
Function Num2ABC(ByVal x As Long) As String
Do
Num2ABC = Chr$(64 + x Mod 26) & Num2ABC
x = x  26
Loop Until x = 0
End Function

Она работает в 25 раз быстрее, чем функция, основанная на Application.ConvertFormula



4



аналитика

здесь больше нет…

3372 / 1670 / 184

Регистрация: 03.02.2010

Сообщений: 1,219

15.02.2012, 10:45

3

вариант

Visual Basic
1
2
3
4
5
Function strCol(n As Integer) As String
    With Cells(1, n)
        strCol = Replace(.Address(0, 0), .Row, "")
    End With
End Function



1



KoGG

5590 / 1580 / 406

Регистрация: 23.12.2010

Сообщений: 2,366

Записей в блоге: 1

15.02.2012, 16:02

4

Цитата
Сообщение от Казанский
Посмотреть сообщение

Еще
У меня получилась такая функция:

Visual Basic
1
2
3
4
5
6
Function Num2ABC(ByVal x As Long) As String
Do
Num2ABC = Chr$(64 + x Mod 26) & Num2ABC
x = x  26
Loop Until x = 0
End Function

Она работает в 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@ и так далее

Visual Basic
1
2
3
4
5
6
7
Function Num2ABC(ByVal x As Long) As String
x = x - 1
Do
Num2ABC = Chr$(65 + x Mod 26) & Num2ABC
x = x  26 - 1
Loop While x >= 0
End Function



2



KoGG

5590 / 1580 / 406

Регистрация: 23.12.2010

Сообщений: 2,366

Записей в блоге: 1

15.02.2012, 17:39

6

Вот правильная функция:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Function Num2ABC(ByVal x As Long) As String
    Dim i As Integer
    Do While x > 0
        i = x Mod 26
        If i = 0 Then
            Num2ABC = "Z" & Num2ABC
            x = x  26 - 1
        Else
            Num2ABC = Chr$(64 + i) & Num2ABC
            x = x  26
        End If
    Loop
End Function



1



m-ch

6169 / 934 / 309

Регистрация: 25.02.2011

Сообщений: 1,359

Записей в блоге: 1

15.02.2012, 17:44

7

или так:

Visual Basic
1
2
3
4
5
6
Function Num2ABC(ByVal x As Long) As String
Do
Num2ABC = Chr$(65 + (x - 1) Mod 26) & Num2ABC
x = (x - 1)  26
Loop Until x = 0
End Function



2



KoGG

5590 / 1580 / 406

Регистрация: 23.12.2010

Сообщений: 2,366

Записей в блоге: 1

15.02.2012, 17:46

8

Цитата
Сообщение от m-ch
Посмотреть сообщение

Visual Basic
1
2
3
4
5
6
7
Function Num2ABC(ByVal x As Long) As String
x = x - 1
Do
Num2ABC = Chr$(65 + x Mod 26) & Num2ABC
x = x  26 - 1
Loop While x >= 0
End Function

Это лучше



2



Piramidon

0 / 0 / 0

Регистрация: 13.02.2012

Сообщений: 18

16.02.2012, 11:48

 [ТС]

9

Цитата
Сообщение от m-ch
Посмотреть сообщение

или так:

Visual Basic
1
2
3
4
5
6
Function Num2ABC(ByVal x As Long) As String
Do
Num2ABC = Chr$(65 + (x - 1) Mod 26) & Num2ABC
x = (x - 1)  26
Loop Until x = 0
End Function

Вы бы не могли написать комменты к проге… Не понятно это Num2ABC = Chr$(65 + (x — 1) Mod 26) & Num2ABC… Вообще не могу понять, что происходит в этом выражении…



0



0 / 0 / 0

Регистрация: 01.11.2012

Сообщений: 20

09.02.2016, 15:30

10

Цитата
Сообщение от Казанский
Посмотреть сообщение

Узнаём имя 6-го столбца
MsgBox Split(Cells(1, 6).Address, «$»)(1)

Коротко и ясно!!! Спасибо большое очень пригодилось.



0



Модератор

Эксперт MS Access

11341 / 4660 / 748

Регистрация: 07.08.2010

Сообщений: 13,496

Записей в блоге: 4

09.02.2016, 16:49

11

а есть ли обратная функция
имя ячейки FJD
какой это номер столбика



0



m-ch

6169 / 934 / 309

Регистрация: 25.02.2011

Сообщений: 1,359

Записей в блоге: 1

09.02.2016, 16:56

12

Visual Basic
1
Cells(1, "FJD").Column



0



Казанский

15136 / 6410 / 1730

Регистрация: 24.09.2011

Сообщений: 9,999

09.02.2016, 23:06

13

shanemac51, можно по аналогии

Visual Basic
1
2
3
4
5
6
7
Function ABC2Num(ByVal x As String) As Long
Dim i&
  x = UCase(x)
  For i = 1 To Len(x)
    ABC2Num = ABC2Num * 26 + AscW(Mid$(x, i, 1)) - 64
  Next
End Function

тест в 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.

Community's user avatar

asked Jan 17, 2012 at 0:49

HL8's user avatar

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

HRgiger's user avatar

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

GSerg's user avatar

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!!

Jose Ricardo Bustos M.'s user avatar

answered Dec 4, 2016 at 15:33

MORTON WAKELAND JR's user avatar

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

Jonh's user avatar

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

gavin's user avatar

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. Вы также можете просмотреть наши другие предлагаемые статьи —

  1. VBA Вставить столбец
  2. Группировка столбцов в Excel
  3. VBA Удалить столбец
  4. Переключение столбцов в Excel

Like this post? Please share to your friends:
  • Vba excel столбец по имени
  • Vba excel столбец массива в excel
  • Vba excel столбец буквой
  • Vba excel сохранить файл в папку
  • Vba excel сохранить файл без подтверждения