Excel VBA - 用户定义函数 - 将数组相关公式(CTRL + SHIFT + ENTER在普通公式上)转换为UDF

时间:2015-03-02 06:03:29

标签: arrays excel vba excel-vba

我一直在路过几个与我的问题非常相似的线程。但是,有各种解释可能不适用于我的情况。我有这个“常规”excel公式:

={IF(OR(ISNUMBER(SEARCH($O$2:$O$2000,A2))), INDEX($P$2:$P$2000, MATCH(TRUE, ISNUMBER(SEARCH($O$2:$O$2000, A2)),0)), "")}

我想使用以下参数将其转换为Excel VBA函数

FUNCTION ADVLOOKUP(TAG, SENTENCESTOLOOKAT, WORDSTOLOOKUP)

TAG =表示ORIGINAL FORMULA上的P列,它将放在代表SENTENCESTOLOOKAT的每个单元格/行旁边

SENTENCESTOLOOKAT =表示公式中要定位的A2或A列上的任何单元格。这是一个包含任何一个WORDSTOLOOKUP

的句子

WORDSTOLOOKUP =表示列O,它是在每个SENTENCESTOLOOKAT上检查的单词的清单

抱歉,我无法发布Excel文件,因为显然我的声誉/代表点很低。 :(但我很感激,如果你可以建议是否可以将所述Excel公式转换为UDF。

谢谢!

1 个答案:

答案 0 :(得分:0)

要仅返回一个值,您可以使用一个简单的调用来评估:

Function ADVLOOKUP(TAG As Range, SENTENCESTOLOOKAT As Range, WORDSTOLOOKUP As Range)
    ADVLOOKUP = SENTENCESTOLOOKAT.Worksheet.Evaluate("INDEX(INDEX(" & TAG.Address & ",MATCH(TRUE,ISNUMBER(SEARCH(" & _
                    WORDSTOLOOKUP.Address & "," & SENTENCESTOLOOKAT.Address & ")),0)),)")
End Function