Первая пустая ("") ячейка в столбце с формулой 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()
чтобы получить последний ряд. В противном случае, он будет смотреть на ваш активный лист, чтобы получить информацию.