如何使用countif / sumif连接查询的各个位置中出现的单词?

时间:2016-12-27 23:00:52

标签: excel vba

我正在使用Excel和VBA。我有一个搜索查询列表和搜索查询中出现的单词列表。我正在尝试找到一种方法来获取特定单词出现的查询计数,以及将特定单词出现的查询的成本和收入相加。我使用带有嵌套连接的countif和sumif式。我试图弄清楚如何在搜索查询中包含单词,开头,中间或结尾的所有实例 - 但也想要排除单词出现的实例作为一个更长的词。这是一个例子:

我们说这个词是“沙子”,这些是搜索查询:

“沙”

“出售沙子”

“在哪里买沙子待售”

“购买散装沙”

“火腿三明治”

每个搜索查询都有相关的费用和收入。我可以使用连接函数通过包含以下各项来捕获包含“sand”的查询:(如果单词“sand”在单元格A1中)

沙子待售”连接(A1,“”,“*”)

“在哪里购买沙子待售”连接(“*”,“”,A1,“”,“*”)

“购买批量沙子”连接(“*”,“”,A1)

如果我做一个指向A1的countif或sumif没有空格和*之前或之后,它将包含“ham sandwich”搜索查询的值。那么如何包含仅由单词组成的搜索查询,而不是在之前或之后的空格?

3 个答案:

答案 0 :(得分:1)

您可以使用带有字边界标记的正则表达式。单词边界标记检测单词字符和非单词字符(或字符串或行的开头或结尾)之间的边界。在VBA正则表达式中,单词字符在类[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

答案 1 :(得分:0)

至于一个简单的解决方案,这样的东西起作用并且不会计算火腿三明治。

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

其中A1是在这种情况下计算的字符串" sand"。

答案 2 :(得分:0)

... + COUNTIF(range,"sand")

请注意,如果你已经尝试过这个并且它没有工作,那么你可能已经" sand"在哪里,你认为你有" sand"