2017-08-09 48 views
3

我有一個宏恰好複製一個片的數據到另一個。第一空白(「」)在柱細胞與IF式

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)) 

這意味着端/偏移碼進入與而不是去到具有「」的值(這是目前C260)第一單元式(C1000)中的列的最後一個單元。

我可以添加到該宏來選擇包含一個IF式造成的「值」 ----其具有作爲空白的出現所述第一小區是什麼代碼?

+0

'.PasteSpecial xlPasteValues'?也許'xlPasteValuesAndNumberFormats' .. –

+0

你可以使用'Range.Find'與獲得第一個單元格'「」'在設定範圍內,比如'列(1)' –

+0

@DirkReichel - 如何?我一直在嘗試,但是它跳過了'=「」'行並進入第一個字面上空的單元格。 – BruceWayne

回答

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 

enter image description here

它返回10作爲行。

編輯:確保Range()Cells()之前添加圖紙參考以獲取最後一行。否則,它會查看活動工作表以獲取信息。