excel - удалить - удаление пробелов visual basic




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

Как определить последнюю строку в листе 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. Любая идея, как это сделать?


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

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

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

Лучше:

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

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

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, если важны только данные, а не форматирование. Кроме того, объединенные ячейки (которые следует избегать) могут дать вам неожиданные результаты, поскольку он даст вам номер строки первой ячейки, а не последнюю ячейку в объединенных ячейках.


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

Так что это должно работать

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.Columns("A").Cells.Find("*", SearchOrder:=xlByRows, LookIn:=xlValues, SearchDirection:=xlPrevious).Row

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

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

вот мой код, чтобы найти следующую пустую строку, например, в первой строке «А». Чтобы использовать его для любой другой строки, просто меняйте ячейки (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

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

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


LastRow = ActiveSheet.UsedRange.Rows.Count




vba