我有一个宏,可以将一张表的数据准确地复制到另一张表中。
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公式,从而产生真/假值(分别为""或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公式的第一个单元格,其值为"" ----外观空白?
答案 0 :(得分:0)
尝试使用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()
之前添加工作表引用以获取最后一行。否则,它将查看您的活动工作表以获取信息。