2015-03-02 69 views
0

我一直在传递几个与我的问题非常相似的线程。然而,有不同的解释可能不适用于我的案件。我有这样的“常规” Excel公式:Excel VBA - 用户定义函数 - 转换数组相关公式(在正常公式上CTRL + SHIFT + ENTER)到UDF

={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 =代表了原始公式P列将被旁边放每个单元/行代表SENTENCESTOLOOKAT表示SENTENCESTOLOOKAT =表示A2或者列A上的任何单元格,以便由公式定位。这是一个包含WORDSTOLOOKUP

WORDSTOLOOKUP =的任何1句子表示O列是要搜索检查了每个SENTENCESTOLOOKAT

对不起的话的清单,我不能发布的Excel文件因为显然我的声望/代表点很低。 :(但我很欣赏,如果你能劝告说Excel公式是否可以转换到一个UDF

谢谢

+0

你想UDF行为像一个普通的函数,或像一个数组函数?它应该返回一个值或多个值? – 2015-03-02 06:44:12

+0

您好蒂姆,我希望它可以像一个常规功能(像一个查询功能)。谢谢! – user3771531 2015-03-02 06:58:00

回答

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 
+0

Hi Rory,对于迟到的回复感到抱歉,让我回过头来试试这个。谢谢! – user3771531 2015-03-03 08:16:33

+0

我能够检查它,它的工作原理和我原来的一样,以及原来的等效公式。再一次非常感谢你! – user3771531 2015-03-03 08:21:31