创建Excel用户定义函数以匹配列表

时间:2017-08-10 22:24:53

标签: excel vba excel-vba match user-defined-functions

在我的工作中,我们有几个我们管理的出租物业。这些属性中的每一个都可以使用不同的名称。例如,一个属性可能被称为Amber Gateway,Platinum Gateway,The Gateway等。我们可能有500-600个Excel工作簿,其中包含不同类型的信息。我可能会被要求从各种信息中提取信息。

缺乏一致的命名方法使我无法使用标准的索引/匹配功能来查找数据。我不确定这是否是最佳解决方案,但这是我解决问题的方法。

我创建了一个工作表,其中包含A列中所有属性名称的列表。任何关联的名称都列在B列,C列的同一行的右侧,依此类推。为简单起见,假设只有5个属性,我的所有数据都在A1:E5中。然后说我感兴趣的财产是在F1和我想要的财产清单"匹配"它与G1:G5相反。所以我的数据看起来像这样:

River          Stream         Creek         Brook          Rivulet
Apple          Fruit          
Rock           Boulder        Stone         Slab
Candy          Dessert        Sweets
Forest         Trees    

考虑到“巨石”这个词。和以下列表:

Candy
Fruit
Creek
Slab
Forest

我的目标是返回同义词' slab'的列表位置。 - 在这种情况下,4。 我想我可以使用下面的数组公式代替Match函数。要做到这一点:

{=SUMPRODUCT(--(INDEX(A1:E5,SUMPRODUCT(--(A1:E5=F1)*ROW(A1:E5)),)
=G1:G5)*IF(G1:G5<>"",MATCH(G1:G5,G1:G5,0)))}

现在这个公式有点笨拙,我希望将它翻译成UDF,以便更容易使用。我不熟悉VBA,经过一些搜索,我意识到VBA逻辑的工作方式与Excel公式逻辑完全不同。具体来说,我不认为我可以使用=来强制我的查找网格在VBA中变为TRUE / FALSE值,就像在SUMPRODUCT函数中一样。我是否必须学习VBA才能将其作为UDF实现,还是有其他解决方案?实际上,我的查找网格(A1:E5)将位于外部工作簿中。

如果我的尝试完全不合适,我会对其他解决方案持开放态度。我知道匹配公式函数支持通配符,但是在名称截然不同的情况下它不起作用,所以我希望能有更全面的东西。

这是我第一次在这里问一个问题,所以请告诉我这是否属于不同的领域,或者我有什么礼节可以忽略。

0 个答案:

没有答案