2012-01-27 73 views
0

,當我使用這個VB代碼#價值!使用宏

Public Function LastVersionOwned(rCol As Range, versionOwned As Range) As Range 
    Set LastVersionOwned = Application.WorksheetFunction.Lookup(2, 1/(rCol = rCol.Find("*", rCol.Cells(1), , , , xlPrevious)), versionOwned) 
End Function 

什麼是supossed做的是找到最後一個非空行的範圍,然後使用該值來獲得該行的頭,但是當我使用它,它返回#VALUE! RCOL是範圍(在這裏我想要得到的最後一個非空值,例如,12行的列表:F12)和versionOwned是表的表頭(也一個範圍,但靜態C11:F11)

如果我使用像這樣

Public Function LastVersionOwned(rCol As Range) As Range 
    Set LastVersionOwned rCol.Find("*", rCol.Cells(1), , , , xlPrevious) 
End Function 

而在Excel中我=LOOKUP(2,1/(C12:F12=LastVersionOwened(C12:F12)),C$11:F$11) 它的工作,任何想法我怎麼能修復這個bug?

感謝

+0

我很困惑什麼你正在嘗試做的。例如:您可以找到列A中最後一個空單元格,比如說A100。那麼你使用這個值來做什麼? 「獲得該行的標題」是什麼意思? – JimmyPena 2012-01-27 18:14:17

+0

我試圖找到一行中的最後一個非空單元,例如(在A2:F2的範圍內,最後一個非空單元可能是C:2),C2單元有一個頭,假設行A1:F1的頭是asdfgh,所以如果最後一個非空單元是C2,我想得到C1頭將是D – user1112251 2012-01-27 18:18:17

回答

2

我認爲問題是,你比較一個「陣列到陣列」的公式,並嘗試做在VBA同樣的事情,這是不可能的,因爲你確實比較一個RangeRange 。而要真正比較VBA中的'陣列到陣列'將會更長一些。所以我想出了爲你工作的替代...

Public Function LastVersionOwned(rCol As Range, versionOwned As Range) 
    LastVersionOwned = Application.WorksheetFunction _ 
     .Lookup(rCol(1, rCol.Columns.Count).End(xlToLeft).Value, rCol, versionOwned) 
End Function 

讓我知道這是否適合您的需要

+0

非常感謝!我幫了我很多:) – user1112251 2012-01-27 19:16:55