簡體   English   中英

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

[英]First blank (“”) cell in column with IF formula

我有一個宏,可以將一張紙的數據完全復制到另一張紙上。

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公式的第一個單元格,該公式導致值為“”----其外觀為空白?

在嘗試使用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()之前添加工作表引用以獲取最后一行。 否則,它將查看您的活動工作表以獲取信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM