Как определить последнюю строку в листе 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. Любая идея, как это сделать?
Ты действительно рядом. Попробуйте использовать большой номер строки с помощью 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
Лучший способ получить номер последней используемой строки:
ActiveSheet.UsedRange.Rows.Count
для текущего листа.
Worksheets("Sheet name").UsedRange.Rows.Count
для конкретного листа.
Чтобы получить номер последнего используемого столбца:
ActiveSheet.UsedRange.Columns.Count
для текущего листа.
Worksheets("Sheet name").UsedRange.Columns.Count
для конкретного листа.
Надеюсь, это поможет.
Абдо
Я использую следующее:
lastrow = ActiveSheet.Columns("A").Cells.Find("*", SearchOrder:=xlByRows, LookIn:=xlValues, SearchDirection:=xlPrevious).Row
Он найдет последнюю строку в определенном столбце. Если вы хотите использовать последнюю использованную строку для любого столбца, то:
lastrow = ActiveSheet.Cells.Find("*", SearchOrder:=xlByRows, LookIn:=xlValues, SearchDirection:=xlPrevious).Row
ClearContents
... Работает нормально даже с ClearContents
или удалением дубликатов
ActiveSheet.UsedRange.Rows.Count + ActiveSheet.UsedRange.Rows(1).Row -1
Short. Безопасно. Быстро. Вернет последнюю непустую строку, даже если на верхней части листа есть пустые строки или где-нибудь еще. Работает также для пустого листа (Excel сообщает 1 используемую строку на пустом листе, поэтому выражение будет равно 1). Протестировано и работает в Excel 2002 и Excel 2010.
Будьте осторожны, UsedRange.Rows.Count
возвращает количество строк, используемых когда-либо. Если вы используете
100 строк, а затем clearcontents
UsedRange.Row.Count
все еще возвращает 100.
Проблема - это "как строка" в вашей функции. Замените его "как двойной" или "как долго", чтобы он работал. Таким образом, это даже работает, если последняя строка больше, чем "большое число", предложенное в принятом ответе.
Итак, это должно работать
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
LastRow = ActiveSheet.UsedRange.Rows.Count
Хорошо, кроме всех упомянутых, существует несколько других способов найти последнюю строку или столбец в листе или заданном диапазоне.
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, если важны только данные, а не форматирование. Кроме того, объединенные ячейки (которые следует избегать) могут дать вам неожиданные результаты, поскольку он даст вам номер строки первой ячейки, а не последнюю ячейку в объединенных ячейках.
Если лист содержит неиспользованную область сверху, UsedRange.Rows.Count
не является максимальной строкой.
Это правильный максимальный номер строки.
maxrow = Sheets("..name..").UsedRange.Rows(Sheets("..name..").UsedRange.Rows.Count).Row
ActiveSheet.UsedRange.Rows(ActiveSheet.UsedRange.Rows.count).row
ActiveSheet можно заменить WorkSheets(1)
или WorkSheets("name here")
Лучше:
if cells(i,1)="" then
nextEmpty=i:
exit for
Exit For
будет лучше, чем GoTo 20
- я предполагаю, что вы отвечаете на ответ, данный @OdiljonJakhangirov. Но - код для Ctrl+Up
быстрее, чем метод Find
.
вот мой код, чтобы найти следующую пустую строку, например, в первой строке '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
UsedRange.Rows.Count
возвращает количество строк, использованных когда-либо . Если вы используете 100 строк, а затемclearcontents
UsedRange.Row.Count
прежнему возвращает 100.