Usedrange rows count vba excel

Хитрости »

1 Май 2011              403748 просмотров


Очень часто при внесении данных на лист Excel возникает вопрос определения последней заполненной или первой пустой ячейки. Чтобы впоследствии с этой первой пустой ячейки начать заносить данные. В этой теме я опишу несколько способов определения последней заполненной ячейки.

В качестве переменной, которой мы будем присваивать номер последней заполненной строки, у нас во всех примерах будет lLastRow. Объявлять мы её будем как Long. Для экономии памяти можно было бы использовать и тип Integer, но т.к. строк на листе может быть больше 32767(это максимальное допустимое значение переменных типа Integer) нам понадобиться именно Long, во избежание ошибки. Подробнее про типы переменных можно прочитать в статье Что такое переменная и как правильно её объявить

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

    Dim lLastRow As Long
    'а для lLastCol можно было бы применить и тип Integer,
    'т.к. столбцов в Excel пока меньше 32767, но для однообразности назначим тоже Long
    Dim lLastCol As Long
  • Определение последней ячейки через свойство End
  • Определение последней ячейки через SpecialCells
  • Определение последней ячейки через UsedRange
  • Определение последней ячейки через метод Find
  • Несколько практических кодов

  • Способ 1:

    Определение

    последней заполненной строки

    через свойство End

        lLastRow = Cells(Rows.Count,1).End(xlUp).Row
        'или
        lLastRow = Cells(Rows.Count, "A").End(xlUp).Row

    1 или «A» — это номер или имя столбца, последнюю заполненную ячейку в котором мы определяем. По сути обе приведенные строки дадут абсолютно одинаковый результат. Просто иногда удобнее указать номер столбца, а иногда его имя. Поэтому использовать можно любой из приведенных вариантов, в зависимости от ситуации.
    Определение последнего столбца через свойство End

    lLastCol = Cells(1, Columns.Count).End(xlToLeft).Column

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

    Данный метод определения последней строки/столбца самый распространенный. Используя его мы можем определить последнюю ячейку только в одном конкретном столбце(или строке). В большинстве случаев этого более чем достаточно.

    Метод основан именно на принципе работы свойства End. На примере поиска последней строки опишу принцип так, как бы мы это делали руками через выделение ячеек на листе:

    • выделили самую последнюю ячейку столбца А на листе(для Excel 2007 и выше это А1048576, а для Excel 2003 — А65536)
    • и выполнили переход вверх комбинацией клавиш Ctrl+стрелка вверх. Данная комбинация заставляет Excel двигаться вверх(если точнее, то в направлении стрелки, нажатой вместе с Ctrl) до тех пор, пока не встретиться первая ячейка с формулой или значением. А в случае, если сочетание было вызвано из уже заполненных ячеек — то до первой пустой. И как только Excel доходит до этой ячейки — он её выделяет
    • А через свойство .Row мы просто получаем номер строки этой выделенной ячейки

    Нюансы:

    • даже если в ячейке нет видимого значения, но есть формула — End посчитает ячейку не пустой. С одной стороны вполне справедливо. Но иногда нам надо определить именно «визуально» заполненные ячейки. Поиск ячеек при подобных условиях будет описан ниже(Способ 4: Определение последней ячейки через метод Find)
    • если на листе заполнены все строки в просматриваемом столбце(или будут заполнены несколько последних ячеек столбца или даже только одна последняя) — то результат может быть неверный(ну или не совсем такой, какой ожидали)
    • Данный способ игнорирует строки, скрытые фильтром, группировкой или командой Скрыть (Hide). Т.е. если последняя строка таблицы будет скрыта, то данный метод вернет номер последней видимой заполненной строки, а не последней реально заполненной.

    Ну а если надо получить первую пустую ячейку на листе(а не первую заполненную) — придется вспомнить математику. Т.к. последнюю заполненную мы определили, то первая пустая — следующая за ней. Т.е. к результату необходимо прибавить 1. Это хоть и очевидно, но на всякий случай все же лучше об этом напомнить.


    Способ 2:

    Определение

    последней заполненной строки

    через SpecialCells

        lLastRow = Cells.SpecialCells(xlLastCell).Row

    Определение последнего столбца через SpecialCells

        lLastCol = Cells.SpecialCells(xlLastCell).Column

    Данный метод не требует указания номера столбца и возвращает последнюю ячейку(Row — строку, Column — столбец).
    Если хотите получить номер первой пустой строки или столбца на листе — к результату необходимо прибавить 1.
    Нюансы:

    • Используя данный способ следует помнить, что не всегда можно получить реальную последнюю заполненную ячейку, т.е. именно ячейку со значением. Метод SpecialCells определяет самую «дальнюю» ячейку на листе, используя при этом механизм «запоминания» тех ячеек, в которых мы работали в данном листе. Т.е. если мы занесем в ячейку AZ90345 значение и сразу удалим его — lLastRow, полученная через SpecialCells будет равна значению именно этой ячейки, из которой вы только что удалили значения(т.е. 90345). Другими словами требует обязательного обновления данных, а этого можно добиться только сохранив файла, а временами даже только закрыв файл и открыв его снова. Так же, если какая-либо ячейка содержит форматирование(например, заливку), но не содержит никаких значений, то метод SpecialCells посчитает её используемой и будет учитывать как заполненную.
      Этот недостаток можно попробовать обойти, вызвав перед определением последней ячейки вот такую строку кода:

      With ActiveSheet.UsedRange: End With

      Это должно переопределить границы рабочего диапазона и тогда определение последней строки/столбца сработает как ожидается, даже если до этого в ячейке содержались данные, которые впоследствии были удалены.
      Выглядеть в единой процедуре это будет так:

      Sub GetLastCell()
          Dim lLastRow As Long
          'переопределяем рабочий диапазон листа
          With ActiveSheet.UsedRange: End With
          'ищем последнюю заполненную ячейку на листе
          lLastRow = Cells.SpecialCells(xlLastCell).Row
      End Sub
    • даже если в ячейке нет видимого значения, но есть формула — SpecialCells посчитает ячейку не пустой
    • Данный метод определения последней ячейки не будет работать на защищенном листе(Рецензирование(Review)Защитить лист(Protect Sheet)).
    • Данный метод не будет работать при использовании внутри UDF. Точнее будет работать не так, как ожидается. Подробнее про некоторые «баги» работы встроенных методов внутри UDF(функций пользователя) я описывал в этой статье: Глюк работы в UDF методов SpecialCells и FindNext

    Сам же я этот метод обычно использую для определения последней ячейки в только что созданном файле, в котором только добавляю строки кодом и в котором не может быть описанных выше нюансов.


    Способ 3:
    Определение последней строки через UsedRange

        lLastRow = ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count - 1

    Определение последнего столбца через UsedRange

        lLastCol = ActiveSheet.UsedRange.Column + ActiveSheet.UsedRange.Columns.Count - 1

    НЕМНОГО ПОЯСНЕНИЙ:

    • ActiveSheet.UsedRange.Row — этой строкой мы определяем первую ячейку, с которой начинаются данные на листе. Важно понимать для чего это — если у вас первые строк 5 не заполнены ничем(т.е. самые первые данные заносились начиная с 6-ой строки листа), то ActiveSheet.UsedRange.Row вернет именно 6(т.е. номер первой строки с данными). Если же все строки заполнены — то вернет 1.
    • ActiveSheet.UsedRange.Rows.Count — определяем кол-во строк, входящих в весь диапазон данных на листе. При этом неважно, есть ли данные в ячейках или нет — достаточно было поработать в этих ячейках и удалить значения или просто изменить цвет заливки.
      В итоге получается: первая строка данных + кол-во строк с данными — 1. Зачем вычитать единицу? Попробуем посчитать вместе: первая строка: 6. Всего строк: 3. 6 + 3 = 9. Вроде все верно. А теперь выделим на листе три ячейки, начиная с 6-ой. Выделение завершилось на 8-ой строке. Потому что в 6-ой строке уже есть данные. Поэтому и надо вычесть 1, чтобы учесть этот момент. Думаю, не надо пояснять, что если надо получить первую пустую ячейку — можно 1 не вычитать :)
    • То же самое и с ActiveSheet.UsedRange.Column, только уже не для строк, а для столбцов.

    Нюансы:

    • Обладает некоторыми недостатками предыдущего метода. Определяет самую «дальнюю» ячейку на листе, используя при этом механизм «запоминания» тех ячеек, в которых мы работали в данном листе. Следовательно попробовать обойти этот момент можно точно так же: перед определением последней строки/столбца записать строку: With ActiveSheet.UsedRange: End With
      Это должно переопределить границы рабочего диапазона и тогда определение последней строки/столбца сработает как ожидается, даже если до этого в ячейке содержались данные, которые впоследствии были удалены.
    • даже если в ячейке нет видимого значения, но есть формула — UsedRange посчитает ячейку не пустой

    Однако метод через UsedRange.Row работает прекрасно и при установленной на лист защите и внутри UDF, что делает его более предпочтительным, чем метод через SpecialCells при равных условиях.


    Способ 4:
    Определение последней строки и столбца, а так же адрес ячейки методом Find

    Sub GetLastCell_Find()
        Dim rF As Range
        Dim lLastRow As Long, lLastCol As Long
        'ищем последнюю ячейку на листе, в которой хранится хоть какое-то значение
        Set rF = ActiveSheet.UsedRange.Find(What:="*", LookIn:=xlValues, LookAt:=xlWhole, SearchDirection:=xlPrevious, MatchCase:=False, MatchByte:=False)
        If Not rF Is Nothing Then
            lLastRow = rF.Row    'последняя заполненная строка
            lLastCol = rF.Column 'последний заполненный столбец
            MsgBox rF.Address 'показываем сообщение с адресом последней ячейки
        Else
            'если ничего не нашлось - значит лист пустой
            'и можно назначить в качестве последних первую строку и столбец
            lLastRow = 1
            lLastCol = 1
            MsgBox "A1" 'показываем сообщение с адресом ячейки А1
        End If
    End Sub

    Этот метод, пожалуй, самый оптимальный в случае, если надо определить последнюю строку/столбец на листе без учета форматов и формул — только по отображаемому значению в ячейке. Например, если на листе большая таблица и последние строки заполнены формулами, возвращающими при определенных условиях пустую ячейку(=ЕСЛИ(A1>0;1;»»)), предыдущие варианты вернут строку/столбец ячейки с последней ячейкой, в которой формула. В то время как данный метод вернет адрес ячейки только в случае, если в ячейке реально отображается какое-то значение. Такой подход часто используется для того, чтобы определить границы данных для последующего анализа заполненных данных, чтобы не захватывать пустые ячейки с формулами и не тратить время на их проверку.
    Здесь следует обратить внимание на параметры метода Find. В данном случае мы специально указываем искать по значениям, а не по формулам:
    Set rF = ActiveSheet.UsedRange.Find(What:=»*», LookIn:=xlValues, LookAt:=xlWhole, SearchDirection:=xlPrevious, MatchCase:=False, MatchByte:=False)
    Нюансы:

    • Метод Find, вызванный с листа или другим кодом, имеет свойство запоминать все параметры последнего поиска, а если поиск еще не вызывался — то применяются параметры по умолчанию. А по умолчанию поиск идет всегда по формулам. Поэтому я настоятельно рекомендую указывать принудительно все необходимые параметры, как в примере.
    • Метод Find не будет учитывать в просмотре скрытые строки и столбцы. Это следует учитывать при его применении.

    Пара небольших практических кодов

    Коды ниже могут помочь понять, как использовать приведенные выше строки кода по поиску последней ячейки/строки:

    Sub GetLastCell()
        Dim lLastRow As Long
        Dim lLastCol As Long
        'определили последнюю заполненную ячейку с учетом формул в столбце А
        lLastRow = Cells(Rows.Count, 1).End(xlUp).Row
        MsgBox "Заполненные ячейки в столбце А: " & Range("A1:A" & lLastRow).Address
        'определили последний заполненный столбец на листе(с учетом формул и форматирования)
        lLastCol = Cells.SpecialCells(xlLastCell).Column
        MsgBox "Заполненные ячейки в первой строке: " & Range(Cells(1, 1), Cells(1, lLastCol)).Address
        'выводим сообщение с адресом последней ячейки на листе(с учетом формул и форматирования)
        MsgBox "Адрес последней ячейки диапазона на листе: " & Cells.SpecialCells(xlLastCell).Address
    End Sub

    Выделяем диапазон ячеек в столбцах с А по С, определяя последнюю ячейку по столбцу A этого же листа:

    Sub SelectToLastCell()
        Range("A1:C" & Cells(Rows.Count, 1).End(xlUp).Row).Select
    End Sub

    Копируем ячейку B1 в первую пустую ячейку столбца A этого же листа:

    Sub CopyToFstEmptyCell()
        Dim lLastRow As Long
        lLastRow = Cells(Rows.Count, 1).End(xlUp).Row 'определили последнюю заполненную ячейку
        Range("B1").Copy Cells(lLastRow+1, 1)         'скопировали В1 и вставили в следующую после определенной ячейки
    End Sub

    А код ниже делает тоже самое, но одной строкой — применяется Offset и используется тот факт, что изначально методом End мы получаем именно ячейку, а не номер строки(номер строки мы получаем позже через свойство .Row):

    Sub CopyToFstEmptyCell()
        Range("B1").Copy Destination:=Cells(Rows.Count, 1).End(xlUp).Offset(1)
    End Sub

    Range(«B1»).Copy — копирует ячейку В1. Если для аргумента Destination указать другую ячейку, то в неё будет вставлена скопированная ячейка. Мы передаем в этот аргумент определенную методом End ячейку
    Cells(Rows.Count, 1).End(xlUp) — возвращает последнюю заполненную ячейку в столбце А (не строку, а именно ячейку)
    Offset(1) — смещает полученную ячейку на строку вниз
    Используем инструмент автозаполнение(протягивание) столбца В, начиная с ячейки B2 и определяя последнюю ячейку для заполнения на основании столбца А

    Sub AutoFill_B()
        Dim lLastRow As Long
        lLastRow = Cells(Rows.Count, 1).End(xlUp).Row
        Range("B2").AutoFill Destination:=Range("B2:B" & lLastRow)
    End Sub

    На самом деле практических кодов может быть куда больше, т.к. определение последней заполненной или первой пустой ячейки является чуть ли не самой распространенной задачей при написании кодов в Excel.

    Так же см.:
    Как получить последнюю заполненную ячейку формулой?
    Как определить первую заполненную ячейку на листе?
    Что такое переменная и как правильно её объявить?


    Статья помогла? Поделись ссылкой с друзьями!

      Плейлист   Видеоуроки


    Поиск по меткам

    

    Access
    apple watch
    Multex
    Power Query и Power BI
    VBA управление кодами
    Бесплатные надстройки
    Дата и время
    Записки
    ИП
    Надстройки
    Печать
    Политика Конфиденциальности
    Почта
    Программы
    Работа с приложениями
    Разработка приложений
    Росстат
    Тренинги и вебинары
    Финансовые
    Форматирование
    Функции Excel
    акции MulTEx
    ссылки
    статистика

    Home / VBA / How to use UsedRange Property in VBA in Excel

    In VBA, the UsedRange property represents the range in a worksheet that has data in it. The usedrange starts from the first cell in the worksheet where you have value to the last cell where you have value. Just like the following example where you have used range from A1 to C11.

    Note: UsedRange property is a read-only property.

    Write a Code with UsedRange

    Use the following code.

    1. First, you need to specify the worksheet.
    2. Then enter a dot (.) and enter “UsedRange”.
    3. After that, use the property or method that you want to use.
    4. In the end, run the code.
    Sub vba_used_range()
        ActiveSheet.UsedRange.Clear
    End Sub

    The above code clears everything from the used range from the active sheet.

    Copy UsedRange

    Use the following code to copy the entire UsedRange.

    Sub vba_used_range()
    
        ActiveSheet.UsedRange.Copy
    
    End Sub

    Count Rows and Columns in the UsedRange

    There’s a count property that you can use to count rows and columns from the used range.

    MsgBox ActiveSheet.UsedRange.Rows.Count
    MsgBox ActiveSheet.UsedRange.Columns.Count

    The above two lines of code shows a message box with the count of rows and columns that you have in the used range.

    Activate the Last Cell from the UsedRange

    You can also activate the last cell from the used range (that would be the last used cell in the worksheet). Consider the following code.

    Sub vba_used_range()
    
    Dim iCol As Long
    Dim iRow As Long
    
    iRow = ActiveSheet.UsedRange.Rows.Count
    iCol = ActiveSheet.UsedRange.Columns.Count
    
    ActiveSheet.UsedRange.Select
    Selection.Cells(iRow, iCol).Select
    
    End Sub

    This code takes the rows and columns count using the UsedRange property and then use those counts to select the last cell from the used range.

    Refer to UsedRange in a Different Worksheet

    If you are trying to refer to the used range in a worksheet other than the active sheet then VBA will show an error like the following.

    So, the worksheet where you are referring must be activated (only then you can use the UsedRange property).

    Sub vba_used_range()
    
        Worksheets("Sheet4").Activate
        Worksheets("Sheet4").UsedRange.Select
    
    End Sub

    That means you can’t refer to the used range in a workbook that is closed. But you can use open a workbook first and then, activate the worksheet to use the UsedRange property.

    Get the Address of the UsedRange

    Use the following line of code to get the address of the used range.

    Sub vba_used_range()
    
     MsgBox ActiveSheet.UsedRange.Address
    
    End Sub

    Count Empty Cells from the Used Range

    The following code uses the FOR LOOPS (For Each) and loops through all the cells in the used range and counts cells that are empty.

    Sub vba_used_range()
    
    Dim iCell As Range
    Dim iRange As Range
    Dim c As Long
    Dim i As Long
    
    Set iRange = ActiveSheet.UsedRange
    
    For Each iCell In ActiveSheet.UsedRange
    
        c = c + 1
    
        If IsEmpty(iCell) = True Then
            i = i + 1
        End If
    
    Next iCell
    
    MsgBox "There are total " & c & _
    " cell(s) in the range, and out of those " & _
    i & " cell(s) are empty."
    
    End Sub

    When you run this code, it shows a message box with the total count of cells and how many cells are empty out of that.

    More Tutorials

      • Count Rows using VBA in Excel
      • Excel VBA Font (Color, Size, Type, and Bold)
      • Excel VBA Hide and Unhide a Column or a Row
      • Excel VBA Range – Working with Range and Cells in VBA
      • Apply Borders on a Cell using VBA in Excel
      • Find Last Row, Column, and Cell using VBA in Excel
      • Insert a Row using VBA in Excel
      • Merge Cells in Excel using a VBA Code
      • Select a Range/Cell using VBA in Excel
      • SELECT ALL the Cells in a Worksheet using a VBA Code
      • ActiveCell in VBA in Excel
      • Special Cells Method in VBA in Excel
      • VBA AutoFit (Rows, Column, or the Entire Worksheet)
      • VBA ClearContents (from a Cell, Range, or Entire Worksheet)
      • VBA Copy Range to Another Sheet + Workbook
      • VBA Enter Value in a Cell (Set, Get and Change)
      • VBA Insert Column (Single and Multiple)
      • VBA Named Range | (Static + from Selection + Dynamic)
      • VBA Range Offset
      • VBA Sort Range | (Descending, Multiple Columns, Sort Orientation
      • VBA Wrap Text (Cell, Range, and Entire Worksheet)
      • VBA Check IF a Cell is Empty + Multiple Cells

      ⇠ Back to What is VBA in Excel

      Helpful Links – Developer Tab – Visual Basic Editor – Run a Macro – Personal Macro Workbook – Excel Macro Recorder – VBA Interview Questions – VBA Codes

      Return to VBA Code Examples

      UsedRange – Find Last Used Cell, Column or Row

      The following code will return a message box indicating the total number of rows used in a worksheet. Empty rows are considered used if data follows the empty row.

      MsgBox ActiveSheet.UsedRange.Rows.Count

      Do you have to run a loop down a sheet but don’t know where the data stops? ActiveSheet.UsedRange.Rows.Count might help.

      Put this in a module:

      Sub LastRow()
      
      Dim LastRow As Integer
      
      LastRow = ActiveSheet.UsedRange.Rows.Count
      
      MsgBox LastRow
      
      End Sub
      Sub LastCol()
      
      Dim LastCol As Integer
      
      LastCol = ActiveSheet.UsedRange.Col.Count
      
      MsgBox LastCol
      
      End Sub

      Find First Empty Cell

      Using VBA you may need to write to the first empty cell, or after the last row used in a column. There is no need to loop to find this, the following code does it for you.

      In this example the code will write “FirstEmpty” in the first empty cell in column “d”

      Public Sub AfterLast()
      
      ActiveSheet.Range("d" & ActiveSheet.Rows.Count).End(xlUp).Offset(1, 0).Value = "FirstEmpty"
      End Sub

      Count Used Columns In Worksheet

      The following code will return in a message box the total number of columns used in a worksheet. Empty columns are considered used if data follows the empty column.

      MsgBox ActiveSheet.UsedRange.Columns.Count

      Last Used Cell – Problems

      When I need to For..Next..Loop through an entire column I usually use ActiveSheet.UsedRange.Rows.Count to find where to stop. I’ve always had good luck with this approach.

      I am also aware that occasionally Excel thinks the last row exists somewhere, but the row is actually empty. I’ve seen this a few times after importing data. From BeyondTechnology:

      The Worksheet object’s UsedRange does not always work because the used range (or “dirty area”) of a spreadsheet may be larger than the area actually populated with your records.

      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!
      vba save as

      Learn More!

      Поиск номера последней заполненной строки с помощью кода VBA Excel для таблиц, расположенных как в верхнем левом углу, так и в любом месте рабочего листа.

      Номер последней заполненной строки в таблице Excel обычно используется в коде VBA для определения следующей за ней первой пустой строки для добавления новой записи. А также для задания интервала для поиска и обработки информации с помощью цикла For… Next (указание границ обрабатываемого диапазона).

      Переменную, которой присваивается номер последней строки, следует объявлять как Long или Variant, например: Dim PosStr As Long. В современных версиях Excel количество строк на рабочем листе превышает максимальное значение типа данных Integer.

      Таблица в верхнем левом углу

      В первую очередь рассмотрим все доступные варианты поиска номера последней заполненной строки для таблиц, расположенных в верхнем левом углу рабочего листа. Такие таблицы обычно представляют собой простые базы данных в Excel, или, как их еще называют, наборы записей.

      Пример таблицы с набором данных в Excel

      Пример таблицы с набором данных в Excel

      Вариант 1
      Основная формула для поиска последней строки в такой таблице, не требующая соблюдения каких-либо условий:
      PosStr = Cells(1, 1).CurrentRegion.Rows.Count

      Вариант 2
      Ниже таблицы не должно быть никаких записей, в том числе ранее удаленных:
      PosStr = ActiveSheet.UsedRange.Rows.Count

      Вариант 3
      В первом столбце таблицы не должно быть пропусков, а также в таблице должно быть не менее двух заполненных строк, включая строку заголовков:
      PosStr = Cells(1, 1).End(xlDown).Row

      Вариант 4
      В первой колонке рабочего листа внутри таблицы не должно быть пропусков, а ниже таблицы в первой колонке не должно быть других заполненных ячеек:
      PosStr = WorksheetFunction.CountA(Range("A:A"))

      Вариант 5
      Ниже таблицы не должно быть никаких записей:
      PosStr = Cells.SpecialCells(xlLastCell).Row

      Последняя строка любой таблицы

      Последнюю заполненную строку для любой таблицы будем искать, отталкиваясь от ее верхней левой ячейки: Cells(a, b).

      Вариант 1
      Основная формула для поиска последней строки в любой таблице, не требующая соблюдения каких-либо условий:
      PosStr = Cells(a, b).CurrentRegion.Cells(Cells(a, b).CurrentRegion.Cells.Count).Row

      Вариант 2
      Дополнительная формула с условием, что в первом столбце таблицы нет пустых ячеек:
      PosStr = Cells(a, b).End(xlDown).Row

      Если у вас на рабочем листе Excel есть записи вне таблиц, следите за тем, чтобы таблицы были окружены пустыми ячейками или пустыми ячейками и границами листа. Тогда не будет случайно внесенных заметок, примыкающих к таблицам, которые могут отрицательно повлиять на точность вычисления номера последней строки из кода VBA.

      I am developing a dashboard in excel. And I am looking for calculating row count. (How many records are present) ..

      Since there are some blank cells I thought to go from bottom to up. I use the following

         Range("A1048576").Select
      Selection.End(xlUp).Select
      

      After this execution the active cell is at A113 which means the row count is 113.

      My question is how to get this number 113 from the active cell?

      Community's user avatar

      asked Feb 4, 2014 at 13:37

      Alwyn Miranda's user avatar

      You can use this:

      Dim lastrow as Long
      lastrow = Cells(Rows.Count,"A").End(xlUp).Row
      

      lastrow will contain number of last empty row in column A, in your case 113

      answered Feb 4, 2014 at 13:38

      Dmitry Pavliv's user avatar

      Dmitry PavlivDmitry Pavliv

      35.2k13 gold badges79 silver badges80 bronze badges

      1

      Here is what I usually use for that:

      lastrow = WorksheetFunction.CountA(Columns("A:A"))
      

      This will return the number of non-empty cells in Column «A» which is what I think you’re after. Hope this helps.

      answered Feb 4, 2014 at 13:49

      Jim Simson's user avatar

      Jim SimsonJim Simson

      2,7663 gold badges21 silver badges30 bronze badges

      2

      The best way to get the count of rows/records (in most cases) is to use .UsedRange.Rows.Count. You can assign the return value to a variable like this:

      lastRow = Sheets(1).UsedRange.Rows.Count
      

      If you use a function that includes a column (such as column A) as shown in other examples, that will only get you the count of rows in that column, which may or may not be what you’re going for. One caveat: if you have formatted rows below your last row with a value then it will return that row number.

      answered Mar 3, 2021 at 0:28

      SendETHToThisAddress's user avatar

      If there is a slight chance that the last row of the worksheet is not empty, you should add an IsEmpty() check to @simoco ‘s solution. Therefore; following is a function that returns the last used row and check if the last row of the worksheet is empty:

      Function lastRow(WS As Worksheet, iColumn As String) As Long
      
          If Not IsEmpty(WS.Range(iColumn & WS.Rows.Count)) Then
              lastRow = WS.Rows.Count
          Else
              lastRow = WS.Range(iColumn & WS.Rows.Count).End(xlUp).Row
          End If
      
      End Function
      

      answered Feb 4, 2014 at 14:22

      simpLE MAn's user avatar

      simpLE MAnsimpLE MAn

      1,56213 silver badges22 bronze badges

      Like this post? Please share to your friends:
    • Used still in a sentence for each word
    • Use your topical vocabulary to paraphrase the underlined words and word combinations it is difficult
    • Used in any event in a sentence for each word
    • Use your english use the word given in capitals
    • Used group in a sentence for each word