Как определить последнюю строку в 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. Есть идеи, как это сделать?
11 ответов
вы действительно близки. Попробуйте использовать большой номер строки с 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
ActiveSheet.UsedRange.Rows.Count + ActiveSheet.UsedRange.Rows(1).Row -1
короче. Безопасный. Быстрый. Вернет последнюю непустую строку, даже если есть пустые строки поверх листа или где-либо еще. Работает также для пустого листа (Excel reports 1 использовал строку на пустом листе, поэтому выражение будет 1). Протестировано и работает на Excel 2002 и Excel 2010.
проблема заключается в "As string" в вашей функции. Замените его на "как двойной "или" как долго", чтобы он работал. Таким образом, он даже работает, если последняя строка больше, чем "большое число", предложенное в принятом ответе.
Так что это должно работать
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
помимо всех упомянутых, есть несколько других способов найти последнюю строку или столбец на листе или в указанном диапазоне.
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, если важны только данные, а не форматирование. Кроме того,слился ячейки (которых следует избегать) могут дать вам неожиданные результаты поскольку он даст вам номер строки первой ячейки, а не последней ячейки в Объединенных ячейках.
ActiveSheet.UsedRange.Rows(ActiveSheet.UsedRange.Rows.count).row
ActiveSheet можно заменить на WorkSheets(1)
или WorkSheets("name here")
Если лист содержит неиспользуемую область сверху,UsedRange.Rows.Count
не является максимальной строкой.
это правильный номер строки max.
maxrow = Sheets("..name..").UsedRange.Rows(Sheets("..name..").UsedRange.Rows.Count).Row
вот мой код, чтобы найти следующую пустую строку, например, в первой строке "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