列中第一个带有IF公式的空单元格

3
我有一个宏,可以将一个工作表的数据精确地复制到另一个工作表中。
Sub QuickViewRegMgmt()

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

End Sub

我希望这个宏也能够到达C列中最后一个非空单元格(或第一个空单元格,我真的不在意)。我尝试了简单的end/offset代码,例如:

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 公式结果为空白的第一个单元格?

.PasteSpecial xlPasteValues?还是xlPasteValuesAndNumberFormats.. - A.S.H
你可以使用 Range.Find 方法在指定范围内(例如 Columns(1))查找第一个空单元格。 - Dirk Reichel
@DirkReichel - 怎么做?我一直在尝试,但它跳过了 ="" 行并转到第一个真正的空单元格。 - BruceWayne
1
@BruceWayne 你是在查找 xlValues 还是 xlFormulas?(例如,Columns(3).Find(What:="", LookIn:=xlValues, LookAt:=xlWhole) 应该可以工作 - 对我来说确实如此。) - YowE3K
@YowE3K - ...好吧,我没有指定,所以我想它是“xlValues”。让我重新审视一下我尝试的内容并回报。我想让我的答案更好,而不仅仅是循环单元格。在我看来,这最多可以成为两行代码。 - BruceWayne
1个回答

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

编辑2:这里有一个使用.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

enter image description here

它将返回行数为10

编辑:务必Range()Cells()之前添加工作表引用,以获取最后一行。否则,它将查看您的活动工作表以获取信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接