Первая пустая ("") ячейка в столбце с формулой IF

У меня есть макрос, который точно копирует данные одного листа в другой.

Sub QuickViewRegMgmt()

    ("Reg Management").Select
    Cells.Select
    Selection.Copy
    Sheets("Quick View Reg Mgmt").Select
    Cells.Select
    ActiveSheet.Paste

End Sub

Я хотел бы, чтобы этот макрос также перемещался в последнюю непустую ячейку в столбце C (или в первую очередь пустую, мне действительно все равно). Я пробовал простой код конца / смещения, например

Range("A1").End(xldown).Offset(1,0).Select 

Моя проблема, однако, заключается в том, что макрос прямого копирования также копирует основные формулы, которые для столбца C являются формулой IF. Следовательно, ни одна ячейка в столбце на самом деле не является пустой, а все они имеют формулу IF, что приводит к значению true/false (соответственно, "" или VLOOKUP).

=IF(VLOOKUP('Reg Management'!$Y260,'Reg Guidance'!$A:$V,3,FALSE)=0,"",VLOOKUP('Reg Management'!$Y260,'Reg Guidance'!$A:$V,3,FALSE))

Это означает, что код конца / смещения идет к последней ячейке в столбце с формулой (C1000) вместо перехода к первой ячейке со значением "" (которая в настоящее время является C260).

Какой код я могу добавить к этому макросу, чтобы выбрать первую ячейку, которая содержит формулу IF, в результате чего значение "" ---- выглядит пустым?

1 ответ

После попытки быть с SpecialCells()или используя Find() или что-то, чего я не мог получить... так вот довольно "грязный" способ сделать это:

Sub test()
Dim lastRow As Long, lastFormulaRow As Long
lastRow = Range("A" & Rows.Count).End(xlUp).Row

Dim i As Long
For i = lastRow To 1 Step -1
    If Cells(i, 1).Formula <> "" And Cells(i, 1).Value = "" Then
        lastFormulaRow = i
        Exit For
    End If
Next i

End Sub

Edit2: вот один, используя .SpecialCells(), Конечно, я думаю, что мы можем уменьшить это больше, мне это нравится больше:

Sub lastRow()
Dim tempLastRow As Long
tempLastRow = Range("C" & Rows.Count).End(xlUp).Row 

Dim lastRow As Range
Set lastRow = Columns(3).SpecialCells(xlCellTypeFormulas).Find(What:="", LookIn:=xlValues, LookAt:=xlWhole, searchdirection:=xlPrevious, after:=Range("C" & tempLastRow))
Debug.Print lastRow.Row
End Sub

введите описание изображения здесь

Возвращается 10 как строка

Изменить: Обязательно добавьте ссылки на листы до Range() а также Cells() чтобы получить последний ряд. В противном случае, он будет смотреть на ваш активный лист, чтобы получить информацию.

Другие вопросы по тегам