如何在查询的不同位置使用countif / sumif和concatenate来查找单词?

我正在使用Excel和VBA。 我有search查询列表和search查询中出现的单词列表。 我试图find一种方法来获得一个特定的单词出现在查询的计数,以及总结一个特定的单词出现在查询的成本和收入。我使用countif和sumif与嵌套concatenate式。 我试图弄清楚如何在search查询中包含单词可能出现的所有实例 – 无论是单独的,在开始,中间还是结束 – 还希望排除单词作为一个更长的词。 这是一个例子:

让我们说这个词是“沙”,这是search查询:

“砂”

“沙滩出售”

“哪里买沙卖”

“买散沙”

“火腿三明治”

每个search查询都有相关的成本和收入。 我可以使用concatenate函数来捕获包含“sand”的查询,包括以下每一项:(如果单词“sand”在单元格A1中)

沙滩出售”串联(A1,“”,“*”)

“哪里买沙子 ”concatenate(“*”,“”,A1,“”,“*”)

“买散沙”连结(“*”,“”,A1)

如果我在没有空格的情况下执行countif或者sumif指令,那么它会包含“火腿三明治”search查询的值。 那么我怎样才能包含完全由单词组成的search查询,在之前或之后没有空格呢?

您可以使用带有单词边界标记的正则expression式。 单词边界标记检测单词字符和非单词字符(或string或行的开始或结尾)之间的边界。 在VBA正则expression式中,单词字符在类[A-Za-z0-9_]中。

类似下面的内容将返回一个布尔值,指示SearchString中是否存在SearchWord:


Option Explicit Function regexFind(SearchWord As String, SearchString As String) As Boolean Dim RE As Object Set RE = CreateObject("vbscript.regexp") With RE .Global = False .Pattern = "\b" & SearchWord & "\b" .ignorecase = True regexFind = .test(SearchString) End With End Function 

至于一个简单的解决scheme,这样的作品,并不会计算火腿三明治。

 =COUNTIF(A1:A5;A1)+COUNTIF(A1:A5;"* "&A1&" *")+COUNTIF(A1:A5;"* "&A1)+COUNTIF(A1:A5;A1&" *") 

A1是在这种情况下计算的string“沙”。

+ COUNTIF(range,"sand")

请注意,如果您已经尝试过这种方法并且无法正常工作,那么您可能会认为自己有“沙”