#值! 当使用macros

我正在使用这个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 

所要做的是find范围中的最后一个非空行,然后使用该值来获取行的标题,但是当我使用它时,它返回#VALUE! rCol是范围(我想要得到最后一个非空值的行列表,例如C12: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)工作,任何想法如何我可以修复这个错误?

谢谢

我认为问题在于你在公式上比较'arrays到数组',并试图在VBA中做同样的事情,这是不可能的,因为你实际上将一个Range与一个Range进行比较。 而实际上比较VBA中的“arrays到arrays”将会更长一些。 所以我想出了一个适合你的替代scheme

 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 

让我知道这是否适合您的需求