0

我正在尝试构建一个 Excel 用户定义的函数VLOOKUP_NAME(value, table, column_name)来实现:

VLOOKUP(value, table, MATCH(column_name, table[#Headers], FALSE), FALSE)

我如何在 VBA 中做到这一点?VBA 似乎不接受结构化引用,例如table[#Headers].

此外,我也有兴趣了解将其作为 UDF 实现的性能后果。

此外,我这样做的原因是用更易读的公式替换大量丑陋的公式。欢迎其他更好的建议来实现这一目标。

4

1 回答 1

2

我不熟悉那种结构化的引用语法,但是您是否尝试过构建公式并使用工作表Evaluate()方法?

这是一个简单的例子:

Function TestEval(s1 As String, s2 As String)
    TestEval = Application.Caller.Parent.Evaluate(s1 & "/" & s2)
End Function

编辑:在检查了整个结构化表格之后,这似乎有效:

Function TableLookup(val, tbl As Range, colName As String)
    Dim indx, rv
    indx = Application.Match(colName, tbl.Rows(1).Offset(-1, 0), 0)

    If Not IsError(indx) Then
        rv = Application.VLookup(val, tbl, indx, False)
        TableLookup = IIf(IsError(rv), "Not found", rv)
    Else
        TableLookup = "Col??"
    End If
End Function
于 2012-07-18T15:57:25.027 回答