从列表中查找字符串到另一个字符串VBA的解决方案

时间:2015-06-19 11:52:57

标签: excel excel-vba ms-access vba

我想做的是,我有一个优秀的地方,我每天都会加载一些足球,网球

[每日清单]:https://www.dropbox.com/s/45ulku7val6q6lj/sample.jpg?dl=0

此外,我还有另一个excel文件/表格,其中包含一些网球运动员名称,足球队名称,足球联赛的格式:

[RedList]:https://www.dropbox.com/s/h9nqx2zpq696o38/redlist.jpg

当然我可以改变这个列表的格式只是一个测试列表。

现在我真正要做的是检查第二个列表(红色列表)是否有任何团队名称出现在主要工作表名称上并突出显示该行,但我面临一些其他参数的问题。

我尝试这样做的一种方法是使用类似的SUMPRODUCT函数:

<div id="someDiv" class="oneClass twoClass colorRed">Content</div>

哪个工作正常,但它不能正常工作,例如,如果我在红色列表中有名称Yankel Zemel,并且在每日列表中名称显示为Yankel Z,或Zemel Yankel,或Zemel Y.,该函数将返回False

另一个问题可能是两个名字之间的逗号或一些特殊字符Anif / Salzburg II,ASKÖGmünd,Blau-WeißLinz等等

所以我试图找出如何解决这个问题。

在VBA中使用Find的一种解决方案,但我不确定这是否可行。 另一个解决方案,但有点棘手的是创建一个访问数据库并尝试存储每个名称的不同版本,例如 Zemel Yankel = Yankel Zemel = Yankel Z = Zemel Y. = yankel,zemel等将它们重命名为一个独特的名称,例如Zemel Yankel。事实上,我不知道这样做是否容易,因为我在访问中没有很多知识,我也不知道这是否也是一个很好的解决方案。

另一个解决方案,但我再也不知道它,是使用regExp

我问得太多了吗?你将如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

就像汤姆提到的那样,这不是一个容易的问题,但只要轻微扭曲,你就可以达到你想要的效果。我最近做了一个与你一样的项目,我采用这种方法,客户对这个安排非常满意。

创建一个名为Alias的新工作表,并在那里维护一个表格。像这样的东西。因此,无论何时遇到别名,只需将其放入表中即可。通过这些足球比赛,你不会遇到超过10个别名(就我迄今为止看到的那样)。但是,如果您遇到更多名称,则只需更新表格即可。

enter image description here

现在使用你的.Find遍历别名来查找匹配项。

在循环遍历别名时,您还可以尝试在VBA代码中评估公式。例如

Dim rngAlias As Range

'~~> Hard coding. This is where you will loop through the range
Set rngAlias = ThisWorkbook.Sheets("Alias").Range("A2")

'sFormula = "=IF(SUMPRODUCT(COUNTIF(" & _
           "A4" & _
           ",""*""&$F$2:$F$6&""*""))=0,""None Found""," & _
           "INDEX($F$2:$F$6,MATCH(TRUE,INDEX(ISNUMBER(SEARCH($F$2:$F$6," & _
           "A4" & _
           ")),),0)))"

sFormula = "=IF(SUMPRODUCT(COUNTIF(" & _
           rngAlias.Address & _
           ",""*""&$F$2:$F$6&""*""))=0,""None Found""," & _
           "INDEX($F$2:$F$6,MATCH(TRUE,INDEX(ISNUMBER(SEARCH($F$2:$F$6," & _
           rngAlias.Address & _
           ")),),0)))"

希望这能让你开始!