Подтвердить что ты не робот

Как определить последний ряд, используемый в VBA, включая пробелы между

Как определить последнюю строку в листе Excel, включая некоторые пустые строки в середине?

С помощью этой функции:

Function ultimaFilaBlanco(col As String) As Long        
        Dim lastRow As Long
        With ActiveSheet
            lastRow = ActiveSheet.Cells(ActiveSheet.Rows.Count, col).End(xlUp).row
        End With            
        ultimaFilaBlanco = lastRow          
End Function

И эти данные:

Row 1 : Value
Row 2 : Value
Row 3 : Value
Row 4 : Value
Row 5 : Value
Row 6 : White
Row 7 : Value
Row 8 : Value
Row 9 : Value
Row 10  : White
Row 11  : White
Row 12  : White
Row 13  : Value
Row 14  : White

Функция возвращает 5, и мне нужно 13. Любая идея, как это сделать?

4b9b3361

Ответ 1

Ты действительно рядом. Попробуйте использовать большой номер строки с помощью End(xlUp)

Function ultimaFilaBlanco(col As String) As Long

        Dim lastRow As Long
        With ActiveSheet
            lastRow = ActiveSheet.Cells(1048576, col).End(xlUp).row
        End With

        ultimaFilaBlanco = lastRow

End Function

Ответ 2

Лучший способ получить номер последней используемой строки:

ActiveSheet.UsedRange.Rows.Count для текущего листа.

Worksheets("Sheet name").UsedRange.Rows.Count для конкретного листа.

Чтобы получить номер последнего используемого столбца:

ActiveSheet.UsedRange.Columns.Count для текущего листа.

Worksheets("Sheet name").UsedRange.Columns.Count для конкретного листа.

Надеюсь, это поможет.

Абдо

Ответ 3

Я использую следующее:

lastrow = ActiveSheet.Columns("A").Cells.Find("*", SearchOrder:=xlByRows, LookIn:=xlValues, SearchDirection:=xlPrevious).Row

Он найдет последнюю строку в определенном столбце. Если вы хотите использовать последнюю использованную строку для любого столбца, то:

lastrow = ActiveSheet.Cells.Find("*", SearchOrder:=xlByRows, LookIn:=xlValues, SearchDirection:=xlPrevious).Row

Ответ 4

ActiveSheet.UsedRange.Rows.Count + ActiveSheet.UsedRange.Rows(1).Row -1

Short. Безопасно. Быстро. Вернет последнюю непустую строку, даже если на верхней части листа есть пустые строки или где-нибудь еще. Работает также для пустого листа (Excel сообщает 1 используемую строку на пустом листе, поэтому выражение будет равно 1). Протестировано и работает в Excel 2002 и Excel 2010.

Ответ 5

Будьте осторожны, UsedRange.Rows.Count возвращает количество строк, используемых когда-либо. Если вы используете 100 строк, а затем clearcontents UsedRange.Row.Count все еще возвращает 100.

Ответ 6

LastRow = ActiveSheet.UsedRange.Rows.Count

Ответ 7

Проблема - это "как строка" в вашей функции. Замените его "как двойной" или "как долго", чтобы он работал. Таким образом, это даже работает, если последняя строка больше, чем "большое число", предложенное в принятом ответе.

Итак, это должно работать

Function ultimaFilaBlanco(col As double) As Long        
    Dim lastRow As Long
    With ActiveSheet
        lastRow = ActiveSheet.Cells(ActiveSheet.Rows.Count, col).End(xlUp).row
    End With            
    ultimaFilaBlanco = lastRow          
End Function

Ответ 8

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

Function FindingLastRow(col As String) As Long

  'PURPOSE: Various ways to find the last row in a column or a range
  'ASSUMPTION: col is passed as column header name in string data type i.e. "B", "AZ" etc.

   Dim wks As Worksheet
   Dim lstRow As Long

   Set wks = ThisWorkbook.Worksheets("Sheet1") 'Please change the sheet name
   'Set wks = ActiveSheet   'or for your problem uncomment this line

   'Method #1: By Finding Last used cell in the worksheet
   lstRow = wks.Range("A1").SpecialCells(xlCellTypeLastCell).Row

   'Method #2: Using Table Range
   lstRow = wks.ListObjects("Table1").Range.Rows.Count

   'Method #3 : Manual way of selecting last Row : Ctrl + Shift + End
   lstRow = wks.Cells(wks.Rows.Count, col).End(xlUp).Row

   'Method #4: By using UsedRange
   wks.UsedRange 'Refresh UsedRange
   lstRow = wks.UsedRange.Rows(wks.UsedRange.Rows.Count).Row

   'Method #5: Using Named Range
   lstRow = wks.Range("MyNamedRange").Rows.Count

   'Method #6: Ctrl + Shift + Down (Range should be the first cell in data set)
   lstRow = wks.Range("A1").CurrentRegion.Rows.Count

   'Method #7: Using Range.Find method
   lstRow = wks.Column(col).Cells.Find("*", SearchOrder:=xlByRows, LookIn:=xlValues, SearchDirection:=xlPrevious).Row

   FindingLastRow = lstRow

End Function

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

Обратите внимание на то, что метод Find не видит форматирование ячейки, а только данные, поэтому ищите xlCellTypeLastCell, если важны только данные, а не форматирование. Кроме того, объединенные ячейки (которые следует избегать) могут дать вам неожиданные результаты, поскольку он даст вам номер строки первой ячейки, а не последнюю ячейку в объединенных ячейках.

Ответ 9

ActiveSheet.UsedRange.Rows(ActiveSheet.UsedRange.Rows.count).row

ActiveSheet можно заменить WorkSheets(1) или WorkSheets("name here")

Ответ 10

Если лист содержит неиспользованную область сверху, UsedRange.Rows.Count не является максимальной строкой.

Это правильный максимальный номер строки.

maxrow = Sheets("..name..").UsedRange.Rows(Sheets("..name..").UsedRange.Rows.Count).Row

Ответ 11

вот мой код, чтобы найти следующую пустую строку, например, в первой строке 'A'. Чтобы использовать его для любой другой строки, просто меняйте ячейки (i, 2 или 3 или 4 так далее)

Sheets("Sheeet1").Select
   for i=1 to 5000
        if cells(i,1)="" then nextEmpty=i goto 20
   next i
20 'continue your code here 

enter code here

Ответ 12

Лучше:

if cells(i,1)="" then 
nextEmpty=i: 
exit for