VBA:使用函数返回的范围

时间:2017-08-18 18:12:31

标签: vba excel-vba worksheet-function excel

我正在尝试在VBA中使用WorksheetFunction.Match,但是我在填充lookup_array参数时遇到了问题。对于lookup_array,我使用另一个函数-GetSubRange()的输出作为Range - 返回一个范围。 我已经验证我的WorksheetFunction.Match()语法有效,并且我的GetSubRange()函数也可以工作 - 当编码方式不同时,我可以获取地址,选择它等等。

结果是该函数返回一个#VALUE!错误,我得出的结论是lookup_array参数没有正确引用范围输入。

有什么想法吗?

这是我正在尝试做的事情:

Function GetValue(rng As Range, colName As String, key As String) As String
    Dim rngSubRange As Range
    Set rngSubRange = GetSubRange(rng, colName)
    GetValue = WorksheetFunction.Match(key, rngSubRange, 0)
End Function

Function GetSubRange(rng As Range, colName As String) As Range
    Dim rngHeader As Range
    Dim colNum As Integer

    Set rngHeader = ThisWorkbook.Names(rng.Name.Name &"_Header").RefersToRange
    colNum = Application.Match(colName, rngHeader, 0)

    Set GetSubRange = rng.Columns(colNum)
 End Function

1 个答案:

答案 0 :(得分:0)

错误在算法中:我在错误的子范围内搜索。 rngSubRange获取了值列的范围,但关键是在另一列中。我必须创建子范围:一个用于键列,另一个用于值列。