Узнать количество столбцов excel vba

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

How do I find the number of used columns in an Excel sheet using VBA?

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

Using the above VBA I’m able to find the number of rows. But how do I find the number of columns in my given excel file?

Jean-François Corbett's user avatar

asked Aug 1, 2011 at 10:48

niko's user avatar

2

Your example code gets the row number of the last non-blank cell in the current column, and can be rewritten as follows:

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

It is then easy to see that the equivalent code to get the column number of the last non-blank cell in the current row is:

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

This may also be of use to you:

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

but be aware that if column A and/or row 1 are blank, then this will not yield the same result as the other examples above. For more, read up on the UsedRange property.

answered Aug 1, 2011 at 11:42

Jean-François Corbett's user avatar

2

Jean-François Corbett’s answer is perfect. To be exhaustive I would just like to add that with some restrictons you could also use UsedRange.Columns.Count or UsedRange.Rows.Count.
The problem is that UsedRange is not always updated when deleting rows/columns (at least until you reopen the workbook).

answered Aug 1, 2011 at 11:51

iDevlop's user avatar

iDevlopiDevlop

24.6k11 gold badges89 silver badges147 bronze badges

1

It’s possible you forgot a sheet1 each time somewhere before the columns.count, or it will count the activesheet columns and not the sheet1‘s.

Also, shouldn’t it be xltoleft instead of xltoright? (Ok it is very late here, but I think I know my right from left) I checked it, you must write xltoleft.

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

seaotternerd's user avatar

seaotternerd

6,2782 gold badges45 silver badges58 bronze badges

answered Dec 20, 2013 at 1:58

Patrick Lepelletier's user avatar

Result is shown in the following code as column number (8,9 etc.):

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

Result is shown in the following code as letter (H,I etc.):

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

Martijn Pieters's user avatar

answered Oct 10, 2016 at 20:27

kadrleyn's user avatar

kadrleynkadrleyn

3341 silver badge5 bronze badges

Содержание

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

Источник

Как определить количество строк и колонок диапазона?

Сообщений: 5
• Страница 1 из 1

wap
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 13.08.2007 (Пн) 14:14

Как определить количество строк и колонок диапазона?

Сообщение wap » 17.08.2007 (Пт) 15:40

Как в VBA определить число строк и число колонок в выделенном диапазоне ячеек?

Заодно, подскажите пожалуйста, как в массив данные из этих ячеек загнать, а то вдруг еще проблемы появятся, придется топик заводить :)


Genyaa
Обычный пользователь
Обычный пользователь
 
Сообщения: 59
Зарегистрирован: 17.10.2006 (Вт) 13:46
  • Сайт

Сообщение Genyaa » 17.08.2007 (Пт) 16:37

Всякое решение плодит новые проблемы.


dormouse
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя

 
Сообщения: 140
Зарегистрирован: 10.01.2007 (Ср) 21:58
Откуда: Волжский
  • ICQ

Сообщение dormouse » 17.08.2007 (Пт) 17:19

Dim x As Byte, y As Byte

Dim i As Byte, j As Byte, a As Byte, b As Byte

Dim ar() As Integer

y = Selection.Rows.Count

x = Selection.Columns.Count

ReDim ar(x — 1, y — 1) As Integer

For i = Selection.Row To Selection.Row + y — 1

For j = Selection.Column To Selection.Column + x — 1

ar(a, b) = ActiveSheet.Cells(i, j).Value

a = a + 1

Next j

a = 0

b = b + 1

Next i

Stop

VBA, MSA97


KL
Microsoft MVP
 
Сообщения: 483
Зарегистрирован: 30.10.2005 (Вс) 0:31
Откуда: Madrid

Сообщение KL » 17.08.2007 (Пт) 17:40

dormouse писал(а):

Код: Выделить всё
Dim x As Byte, y As Byte
Dim i As Byte, j As Byte, a As Byte, b As Byte
Dim ar() As Integer
y = Selection.Rows.Count
x = Selection.Columns.Count
ReDim ar(x - 1, y - 1) As Integer
For i = Selection.Row To Selection.Row + y - 1
    For j = Selection.Column To Selection.Column + x - 1
        ar(a, b) = ActiveSheet.Cells(i, j).Value
        a = a + 1
    Next j
    a = 0
    b = b + 1
Next i
Stop

Ага, или так:

Код: Выделить всё
Dim ar As Variant

ar=Selection.Value

;-)

Привет,

KL


dormouse
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя

 
Сообщения: 140
Зарегистрирован: 10.01.2007 (Ср) 21:58
Откуда: Волжский
  • ICQ

Сообщение dormouse » 17.08.2007 (Пт) 18:44

:P

VBA, MSA97



Сообщений: 5
• Страница 1 из 1

Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 1

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.

Jean-François Corbett
01 авг. 2011, в 11:57

Поделиться

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

Patrick Honorez
01 авг. 2011, в 11:55

Поделиться

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

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

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

Patrick Lepelletier
20 дек. 2013, в 02:12

Поделиться

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

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

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

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

kadrleyn
10 окт. 2016, в 20:47

Поделиться

Ещё вопросы

  • 1Отслеживайте каждую минуту в таймере обратного отсчета
  • 1тупик задачи при вызове в рабочих потоках
  • 0Каковы взаимосвязи между понятиями: бинарный, интерпретация, исполнение, компиляция?
  • 0Как сделать функцию скрытия / отображения гладкой в следующем сценарии?
  • 1Я обучил свою модель на Google DataLab, но я не могу запустить его на моей локальной машине
  • 0Cakephp 3.5 InnerJoin
  • 0Где источник гетенв (…)?
  • 0php reg exp для проверки номера телефона
  • 0Массив классов структур не инициализируется должным образом
  • 0Странный неразрешенный внешний символ в C ++ / CLI
  • 0Ошибка / неожиданное поведение при использовании канала между двумя потоками в C ++ в Linux
  • 1Как добавить элементы в наблюдаемый поток с помощью Observable.Timer на основе значений потока?
  • 0Настраиваемая URL-адресная схема Windows Azure Active Directory
  • 0переменная сессии php, назначенная перед назначением
  • 1Сохранение данных Parcelable
  • 1Как сделать, чтобы на входе был номер или нет в разгаре?
  • 0Скопируйте конструктор для двусвязного списка, проблема с инициализацией головы
  • 1Как обрабатывать числа больше Double.MAX_VALUE
  • 1Получите общие значения в нескольких группах в pandas Dataframe
  • 1Переключатель доступа Bokeh Plot активен при обратном вызове слайдера
  • 0array_push & array_udiff с объектами пользовательских классов
  • 1получить значения из dict, ключевые значения которых соответствуют другому dict
  • 0val () из textarea не выбирает условия поиска
  • 0Есть ли способ связать статический сайт с приложением Pyramid, не будучи частью Pyramid?
  • 1Android Studio не компилируется
  • 1Как проверить, с какого действия я пришел в asp.net mvc [duplicate]
  • 0преобразовать номер месяца в дату
  • 1Отправка уникальных смс и получение смс в андроид
  • 0разрыв строки в текстовой области без отображения тегов HTML
  • 0Как изменить размер / удлинить / обрезать файл и оставить больше места в начале?
  • 1Как правильно расположить очень длинный макет таблицы внутри горизонтального вида прокрутки?
  • 0Как мне изменить, куда указывает указатель, передавая его по ссылке?
  • 0Реализация swapcontext с точки зрения getcontext и setcontext
  • 1Я реализовал маршрутизацию карты для режима полета, но не смог нарисовать на ней маркеры?
  • 1Android — проверка нажатия кнопки гарнитуры
  • 0Не найдено ни одного маршрута [GET] «/ sign_in»
  • 0Обновить таблицу из CSV-файла выбрать первое поле?
  • 0Загрузка файла в TYPO3 6.2
  • 0загружать разный контент в одну и ту же библиотеку?
  • 0Как создать метод литерала объекта, чтобы использовать http get-запрос для получения данных json?
  • 0Как использовать gon.watch с angularjs
  • 0Есть ли в Gcc команды для получения описания ключевых слов (или функций и т. Д.)?
  • 0Почему этот Javascript не включает это текстовое поле (aspx)?
  • 0Sequelize findAll, где значение столбца такое же, как по крайней мере один другой элемент в таблице
  • 1AOS 4.x ошибка с анимацией
  • 0Очистить класс CSS на нумерации строк таблицы
  • 1Есть ли способ упростить запрос Linq с отношением много к одному?
  • 1Найти тип изображения из потока памяти
  • 1Tkinter: список флажков не отвечает
  • 1Ошибка Java JNI DPAPI java.lang.UnsatisfiedLinkError:

Как узнать количество используемых столбцов на листе 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

Like this post? Please share to your friends:
  • Узнать код символов в word
  • Узнать код символа vba word
  • Узнать код символ word
  • Узнать когда создан файл word
  • Узнать имя книги excel vba