Excel自定义公式与IF语句和INDEX,MATCH返回一个#VALUE错误

我从一个Excel表格提取值到另一个。 我使用下面的公式:

= IF(ISBLANK(IFNA(INDEX(Range1;Row;MATCH(Dates;Range2;0));Error1));Error2;IFNA(INDEX(Range1;Row;MATCH(Dates;Range2;0));Error1)) 

由于我需要对提取的数据进行计算,因此我想创build一个自定义函数,通过不必input每次保持不变的参数来简化提取过程。 所以我build立了以下function:

 Function DataCap(Dates As Variant, Row As Variant) As Variant Dim Range1 As Range 'Define the whole lookup table Set Range1 = Range("Data!A1:P151") Dim Range2 As Range 'Define the date lookup table Set Range2 = Range("Data!A3:P3") Dim Error1 As Range 'Define the error 1; if no value Set Error1 = Range("X16") Dim Error2 As Range 'Define the error 2; if blank Set Error2 = Range("Y16") DataCap.Formula "= IF(ISBLANK(IFNA(INDEX(Range1;Row;MATCH(Dates;Range2;0));Error1));Error2;IFNA(INDEX(Range1;Row;MATCH(Dates;Range2;0));Error1))" End Function 

当我运行它时,我得到了#VALUE错误。 如果我直接在单元格中粘贴公式(具有相同的参数),它按预期工作。 所以,我认为问题在于VBA无法进行计算。 任何build议如何解决这个问题?

感谢您提前的帮助

如果不能对您的数据进行testing,我不能确定这是否可行,但至less可以让您指出正确的方向。

 Public Function DCap(xDates As Variant, xRow As Variant) Dim Range1 As Range, Range2 As Range, Error1 As Range, Error2 As Range Set Range1 = ActiveWorkbook.Sheets("Data").Range("A1:P151") Set Range2 = ActiveWorkbook.Sheets("Data").Range("A3:P3") Set Error1 = ActiveWorkbook.ActiveSheet.Range("X16") Set Error2 = ActiveWorkbook.ActiveSheet.Range("Y16") On Error Resume Next If IsError(WorksheetFunction.Index(Range1, xRow, WorksheetFunction.Match(xDates, Range2, 0))) Then DCap = Error1 ElseIf Len(WorksheetFunction.Index(Range1, xRow, WorksheetFunction.Match(xDates, Range2, 0))) = 0 Then DCap = Error2 Else DCap = WorksheetFunction.Index(Range1, xRow, WorksheetFunction.Match(xDates, Range2, 0)) End If On Error GoTo 0 End Function