Vba excel число столбцов

Here’s a completely over the top answer — will give you the details of all separate regions in your workbook (a region being separated by a blank row and column).

You didn’t state if there’d be more than one table on a sheet — so this gives it all.

Sub Test()

    Dim aLists  As Variant
    Dim x As Long
    Dim rng As Range

    '//Find lists in the this workbook.
    aLists = FindRegionsInWorkbook(ThisWorkbook)

    For x = LBound(aLists) To UBound(aLists)
        Set rng = Range(aLists(x))
        Debug.Print rng.Parent.Name & "!" & rng.Address & _
            " | FirstCol: " & rng.Column & _
            " | LastCol: " & rng.Column + rng.Columns.Count - 1 & _
            " | TopRow: " & rng.Row & _
            " | BottomRow: " & rng.Row + rng.Rows.Count - 1 & _
            " | TotalRows: " & rng.Rows.Count & _
            " | TotalColumns: " & rng.Columns.Count
    Next x

    Debug.Assert False
End Sub

'---------------------------------------------------------------------------------------
' Procedure : FindRegionsInWorkbook
' Author    : Zack Barresse (MVP), Oregon, USA. (http://www.mrexcel.com/forum/showthread.php?t=309052)
' Date      : 20/03/2008
' Purpose   : Returns each region in each worksheet within the workbook in the 'sRegion' variable.
'---------------------------------------------------------------------------------------
Public Function FindRegionsInWorkbook(wrkBk As Workbook) As Variant
    Dim ws As Worksheet, rRegion As Range, sRegion As String, sCheck As String
    Dim sAddys As String, arrAddys() As String, aRegions() As Variant
    Dim iCnt As Long, i As Long, j As Long
    '//Cycle through each worksheet in workbook.
    j = 0
    For Each ws In wrkBk.Worksheets
        sAddys = vbNullString
        sRegion = vbNullString
        On Error Resume Next
        '//Find all ranges of constant & formula valies in worksheet.
        sAddys = ws.Cells.SpecialCells(xlCellTypeConstants, 23).Address(0, 0) & ","
        sAddys = sAddys & ws.Cells.SpecialCells(xlCellTypeFormulas, 23).Address(0, 0)
        If Right(sAddys, 1) = "," Then sAddys = Left(sAddys, Len(sAddys) - 1)
        On Error GoTo 0
        If sAddys = vbNullString Then GoTo SkipWs
        '//Put each seperate range into an array.
        If InStr(1, sAddys, ",") = 0 Then
            ReDim arrAddys(0 To 0)
            arrAddys(0) = "'" & ws.Name & "'!" & sAddys
        Else
            arrAddys = Split(sAddys, ",")
            For i = LBound(arrAddys) To UBound(arrAddys)
                arrAddys(i) = "'" & ws.Name & "'!" & arrAddys(i)
            Next i
        End If
        '//Place region that range sits in into sRegion (if not already in there).
        For i = LBound(arrAddys) To UBound(arrAddys)
            If InStr(1, sRegion, ws.Range(arrAddys(i)).CurrentRegion.Address(0, 0)) = 0 Then
                sRegion = sRegion & ws.Range(arrAddys(i)).CurrentRegion.Address(0, 0) & "," '*** no sheet
                sCheck = Right(arrAddys(i), Len(arrAddys(i)) - InStr(1, arrAddys(i), "!"))
                ReDim Preserve aRegions(0 To j)
                aRegions(j) = Left(arrAddys(i), InStr(1, arrAddys(i), "!") - 1) & "!" & ws.Range(sCheck).CurrentRegion.Address(0, 0)
                j = j + 1
            End If
        Next i
SkipWs:
    Next ws
    On Error GoTo ErrHandle
    FindRegionsInWorkbook = aRegions
    Exit Function
ErrHandle:
    'things you might want done if no lists were found...
End Function

  1. Count Columns in VBA
  2. Count Column in Range in VBA
  3. Use the Range().End Method in VBA
  4. Use the Cells.Find() Method in VBA

Count Columns in VBA

This article will discuss two ways to easily count columns with data using VBA in Excel.

Count Columns in VBA

When we have a small data table with a few columns, we can easily count them, but it’s quite tough for a large data table to count all the columns without any error. Besides that, some columns may contain data, whereas some columns may be completely blank.

Thus counting all the columns with data in case of a large data table is quite difficult. Now, let’s create a sheet with some sample data to work with.

creating sheet to count columns in VBA

We can see the three columns in the following data table. To control the number of used columns in a single Excel worksheet, We will use VBA codes.

First, we open the VBA editor by pressing the ALT + F11 key. After that, create a new module from Insert > Module.

creating new macro to count columns in VBA

Then, create a new sub, usedColumns(). Inside our new sub, we will use a with loop to get the used range using the method UsedRange.

After that, we use the count method of columns to output the number of used columns.

Example Code:

# VBA
Sub usedColumns()
With Sheet1.UsedRange
MsgBox "The Used Columns are: "& .Columns.Count
End With
End Sub

Save the macro and run it by pressing F5 or clicking on the run. The Macro dialog box will appear as shown below.

Output:

count columns in VBA using With loop

Count Column in Range in VBA

The following VBA code counts all the columns with data in a given range.

Let’s create a new sub ColumnsInRange(). Inside this sub, we will use the range function to select and count the number of columns in that range.

Example Code:

# VBA
Sub ColumnsInRange()
Dim newRange As Worksheet
Set newRange = Worksheets("Sheet1")
MsgBox "The Used Columns are: " & newRange.Range("A15:D15").Columns.Count
End Sub

Output:

counts all the columns with data in a given range

Use the Range().End Method in VBA

We can use the Range().End method to get the last column used in that range.

Create a new sub, findLastColumn(), and inside that sub, we will use the End method of range to find the last column used towards the right side of the sheet.

# VBA

Sub findLastColumn()
Dim newRange As Integer
newRange = Range("A2").End(xlToRight).Column
MsgBox newRange
End Sub

Output:

count columns in VBA last column being used towards right of the sheet using End method

We get the last column number in a pop-up dialog box, as in the picture shown above.

Use the Cells.Find() Method in VBA

We can also use the Range.Find method to get the last used column from the sheet using the VBA code.

Check the following code. In the LastColumnByFind() sub, we use the Cells.Find() method to find the last used column.

Example Code:

# VBA
Sub LastColumnByFind()
Dim newRange As Long
    newRange = Cells.Find(What:="*", _
                    After:=Range("A1"), _
                    LookAt:=xlPart, _
                    LookIn:=xlFormulas, _
                    SearchOrder:=xlByColumns, _
                    SearchDirection:=xlPrevious, _
                    MatchCase:=False).Column
    MsgBox "Last Used Column Number by Find Method: " & newRange
End Sub

Output:

count columns in VBA by using Find Method

Содержание

  1. Свойство Range.Columns (Excel)
  2. Синтаксис
  3. Замечания
  4. Пример
  5. Поддержка и обратная связь
  6. Определение количества непустых столбцов на листе Excel с помощью VBA
  7. 5 ответы
  8. Свойство Application.Rows (Excel)
  9. Синтаксис
  10. Примечания
  11. Пример
  12. Поддержка и обратная связь
  13. См. раздел «Строки и столбцы»
  14. Об участнике
  15. Поддержка и обратная связь
  16. Объект Range (Excel)
  17. Примечания
  18. Пример
  19. Методы
  20. Свойства
  21. См. также
  22. Поддержка и обратная связь

Свойство 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 и обратная связь.

Источник

Определение количества непустых столбцов на листе Excel с помощью VBA

Как узнать количество используемых столбцов на листе Excel с помощью VBA?

Используя приведенный выше VBA, я могу найти количество строк. Но как мне узнать количество столбцов в моем файле Excel?

@niko Неясно, хотите ли вы количество использованных столбцов (заголовок вопроса) или позицию последнего использованного столбца (подразумевается вашим row код)? — brettdj

@niko, лучший метод поиска фактически используемой части листа, а не xlUp варианты, или неуклюжие UsedRange is Find , видеть stackoverflow.com/questions/8283797/select-range-in-excel-vba/… — brettdj

5 ответы

Ваш примерный код получает номер строки последней непустой ячейки в текущем столбце и может быть переписан следующим образом:

Тогда легко увидеть, что эквивалентный код для получения номера столбца последней непустой ячейки в текущей строке:

Это также может быть полезно для вас:

но имейте в виду, что если столбец A и / или строка 1 пусты, это не приведет к тому же результату, что и в других примерах выше. Подробнее читайте на UsedRange имущество.

ответ дан 01 авг.

Привет. Я пробовал использовать код Dim lastRow As Long lastRow = Sheet1.Cells(Rows.Count, 1).End(xlUp).Row MsgBox lastRow но VBA сообщает «Ошибка выполнения 424: Требуется объект» во второй из этих строк. Теперь я потерялся. Какой функции нужен объект и что он получил взамен? — мзуба

У вас действительно есть лист под кодовым названием Sheet1 ? Если нет, то это единственное, что вызовет эту ошибку. — Жан-Франсуа Корбетт

Источник

Свойство Application.Rows (Excel)

Возвращает объект Range , представляющий все строки на активном листе. Если активный документ не является листом, свойство Rows завершается ошибкой . Объект Range предназначен только для чтения.

Синтаксис

expression. Строк

выражение: переменная, представляющая объект Application.

Примечания

Использование этого свойства без квалификатора объекта эквивалентно использованию ActiveSheet.Rows.

При применении к объекту Range , который является множественным выделением, это свойство возвращает строки только из первой области диапазона. Например, если объект Range имеет две области — A1:B2 и C3:D4, selection.Rows.Count возвращает 2, а не 4.

Чтобы использовать это свойство в диапазоне, который может содержать несколько выделенных элементов, проверьте Areas.Count, чтобы определить, является ли диапазон множественным выбором. Если это так, выполните цикл по каждой области диапазона, как показано в третьем примере.

Пример

В этом примере удаляется третья строка на листе Sheet1.

В этом примере удаляются строки в текущем регионе на листе, где значение одной ячейки в строке совпадает со значением в ячейке в предыдущей строке.

В этом примере отображается количество строк в выделенном фрагменте на листе Sheet1. Если выбрано несколько областей, в примере выполняется цикл по каждой области.

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Источник

См. раздел «Строки и столбцы»

Используйте свойство Rows или Columns для работы с целыми строками или столбцами. Эти свойства возвращают объект Range , представляющий диапазон ячеек. В следующем примере Rows(1) возвращает строку 1 на листе Sheet1. Затем для свойства Bold объекта Font для диапазона задается значение True.

В следующей таблице показаны некоторые ссылки на строки и столбцы с помощью свойств Rows и Columns .

Reference Смысл
Rows(1) Строка 1
Rows Все строки на листе
Columns(1) Столбец 1
Columns(«A») Столбец 1
Columns Все столбцы на листе

Чтобы одновременно работать с несколькими строками или столбцами, создайте переменную объекта и используйте метод Union , объединяя несколько вызовов свойства Rows или Columns . В следующем примере формат строк один, три и пять на листе один в активной книге изменяется полужирным шрифтом.

Пример кода, предоставляемый: Деннис Валлентин( Dennis Wallentin), VSTO & .NET & Excel В этом примере удаляются пустые строки из выбранного диапазона.

В этом примере удаляются пустые столбцы из выбранного диапазона.

Об участнике

Деннис Валлентин является автором блога VSTO & .NET & Excel, в который основное внимание уделяется решениям платформа .NET Framework для Excel и службы Excel. Деннис разрабатывает решения Excel более 20 лет и также является соавтором книги «Professional Excel Development: The Definitive Guide to Developing Applications Using Microsoft Excel, VBA, and .NET (2nd Edition)».

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Источник

Объект 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 и обратная связь.

Источник

Как узнать количество используемых столбцов на листе Excel с помощью VBA?

Dim lastRow As Long
lastRow = Sheet1.Range("A" & Rows.Count).End(xlUp).Row
MsgBox lastRow

Используя приведенный выше VBA, я могу найти количество строк. Но как мне узнать количество столбцов в моем файле Excel?

5 ответов

Лучший ответ

Ваш примерный код получает номер строки последней непустой ячейки в текущем столбце и может быть переписан следующим образом:

Dim lastRow As Long
lastRow = Sheet1.Cells(Rows.Count, 1).End(xlUp).Row
MsgBox lastRow

Тогда легко увидеть, что эквивалентный код для получения номера столбца последней непустой ячейки в текущей строке:

Dim lastColumn As Long
lastColumn = Sheet1.Cells(1, Columns.Count).End(xlToLeft).Column
MsgBox lastColumn

Это также может быть полезно для вас:

With Sheet1.UsedRange
    MsgBox .Rows.Count & " rows and " & .Columns.Count & " columns"
End With

Но имейте в виду, что если столбец A и / или строка 1 пусты, это не даст такого же результата, как в других примерах выше. Чтобы узнать больше, прочтите о свойстве UsedRange.


47

Jean-François Corbett
1 Авг 2011 в 16:36

Ответ Жана-Франсуа Корбетта идеален. Чтобы быть исчерпывающим, я просто хотел бы добавить, что с некоторыми ограничениями вы также можете использовать UsedRange.Columns.Count или UsedRange.Rows.Count.
Проблема в том, что UsedRange не всегда обновляется при удалении строк / столбцов (по крайней мере, пока вы снова не откроете книгу).


8

Patrick Honorez
1 Авг 2011 в 15:51

Возможно, вы забыли sheet1 каждый раз где-то перед columns.count, или он будет считать столбцы activesheet, а не sheet1.

Кроме того, не следует ли использовать xltoleft вместо xltoright? (Хорошо, здесь уже очень поздно, но я думаю, что знаю, что справа налево). Я проверил, вы должны написать xltoleft.

lastColumn = Sheet1.Cells(1, sheet1.Columns.Count).End(xlToleft).Column


2

seaotternerd
20 Дек 2013 в 06:40

Результат показан в следующем коде как номер столбца (8,9 и т. Д.):

Dim lastColumn As Long
lastColumn = Sheet1.Cells(1, Columns.Count).End(xlToLeft).Column
MsgBox lastColumn

Результат показан в следующем коде как буква (H, I и т. Д.):

Dim lastColumn As Long
lastColumn = Sheet1.Cells(1, Columns.Count).End(xlToLeft).Column
MsgBox Split(Sheet1.Cells(1, lastColumn).Address, "$")(1)


0

Martijn Pieters
7 Апр 2017 в 12:08

Свойства 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 excel число переменная
  • Vba excel число непустых строк
  • Vba excel число или текст
  • Vba excel число дней в месяце
  • Vba excel число в символах