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 に答える