IF公式栏中的第一个空白(“”)单元格

我有一个macros,完全复制一个表的数据到另一个。

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

我想要这个macros也去到列C中的最后一个非空白单元格(或第一个空白,我真的不在乎任何方式)。 我尝试了简单的结束/偏移码,例如

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

然而,我的问题是,直接复制macros也复制基础公式,对于列C是IF公式。 因此,列中没有任何单元格实际上是空的,而是它们都具有导致真/假值(分别为“或”VLOOKUP)的IF公式。

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

这意味着结束/偏移代码去公式(C1000)的列中的最后一个单元格,而不是去到具有值“”(当前是C260)的第一个单元格。

我可以添加什么代码到这个macros来select包含一个IF公式的第一个单元格,从而产生一个值为“”—-这个表单是空白的?

在尝试使用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() 。 当然,我认为我们可以减less这一点,我更喜欢它:

 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()之前添加工作表引用以获取最后一行。 否则,它会查看您的活动工作表以获取信息。