首页 文章

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

提问于
浏览
3

我有一个宏,可以将一张纸的数据完全复制到另一张纸上 .

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公式的第一个单元格,该公式导致值为“”----其外观为空白?

1 回答

  • 0

    在尝试使用 SpecialCells() ,或者使用 Find() 之后,或者我无法使用't get it ...so here'这样做的方式:

    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
    

    enter image description here

    它返回 10 作为行 .

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

相关问题