2016-06-01 4 views
2

нужна функция, которая возвращает первую полностью пустую строку (без значений, без формул, без пробелов) с листа с незаполненными ячейками. Для заполнения не требуется ни одна колонка.найти первую полностью пустую строку на листе

Я попробовал это, но я могу даже получить его скомпилировать:

Public Donations As Worksheet 
Set Donations = Sheets("Sheet2") 

Function getEmptyRow() As Long 
    Dim lastCol As Long, lastRow As Long, maxRow As Long 
    Dim col As Long 
    Dim r As Variant 

    lastCol = Donations.Cells(1, Columns.Count).End(xlToLeft).Column 
    For col = 1 To lastCol Step 1 
     lastRow = Donations.Cells(Rows.Count, col).End(xlUp).row 
     maxRow = Application.WorksheetFunction.max(maxRow, lastRow) 
    Next col 
    getEmptyRow = maxRow + 1 
End Function 

ответ

3

Использование EntireRow (который так полезен, позвольте мне сказать вам) и подсчет по строкам, начиная с А1 является один очень простым способом делая это.

Это скажет вам в ближайшем окне:

Sub findemptyrow()      '''Psuedo Code 
Application.ScreenUpdating = False  'turns off annoying blinky 
Range("a1").Activate      'start at beginning 
While a <> 1        'keep going 
    If Application.CountA(ActiveCell.EntireRow) = 0 Then 'is it blank? 
    Debug.Print "Row " & (ActiveCell.Row) & " is blank." 'it is 
    a = 1         'stop going 
    End If 
    ActiveCell.Offset(1).Activate   'next cell 
Wend          'do it all over again 
Application.ScreenUpdating = True   'back to normal settings 
End Sub 

Создание ScreenUpdating Ложные сделает это быстрее, даже с 10k-х строк.

0

Range.Find method, скорее всего, самый целесообразный способ. Найдите подстановочный знак (What:=Chr(42)), начинайте с A1 (After:=.Cells(1, 1), ищите назад (SearchDirection:=xlPrevious), найдите строку за строкой (SearchOrder:=xlByRows).Row), посмотрите на формулы (LookIn:=xlFormulas), так как это найдет первое значение или формулу, глядя на xlValues не может быть правильным, если формула возвращает пустую строку ("").

Option Explicit 
Public Donations As Worksheet 

Sub test() 
    Set Donations = Worksheets("Sheet2") 
    Debug.Print getNextEmptyRow(Donations) 
End Sub 

Function getNextEmptyRow(ws As Worksheet) 
    With ws.Cells 
     getNextEmptyRow = .Find(What:=Chr(42), After:=.Cells(1, 1), LookIn:=xlFormulas, _ 
           SearchDirection:=xlPrevious, SearchOrder:=xlByRows).Row + 1 
    End With 
End Function 

Вы не можете установить Donations в области деклараций модуля кода листа. Объявить открытую переменную в области деклараций (вверху) , но задайте переменную в подфункции или функции.

Не забывайте dd 1 в строку, возвращаемую, если вы хотите, чтобы 'следующая пустая строка'.

+0

Что мне не хватает? Каким параметром функции find является символ '*' - chr (42), когда мы ищем пустую ячейку. –

+0

Если вы начинаете снизу и работаете вверх по строкам для первой заполненной ячейки, вы добавляете 1 к номеру строки, чтобы получить первую пустую строку. Это не обязательно то же самое, что работать сверху, чтобы найти первую пустую строку, поскольку под ней может быть совершенно пустая строка с заполненными ячейками. Название подразумевает последнее, но код OP ищет первый. – Jeeped

0

Просто другой альтернативы, используя SpecialCells метод в `Диапазон:

Option Explicit 

Sub Test() 
    Debug.Print "Last row on Sheet1 is: " & FirstCompletelyEmptyRow(Sheet1) 
End Sub 

Function FirstCompletelyEmptyRow(ByRef wsTarget As Worksheet) As Long 
    FirstCompletelyEmptyRow = wsTarget.Range("A1").SpecialCells(xlCellTypeLastCell).Row + 1 
End Function 
Смежные вопросы