我正在使用Excel和VBA。我有一个搜索查询列表和搜索查询中出现的单词列表。我正在尝试找到一种方法来获取特定单词出现的查询计数,以及将特定单词出现的查询的成本和收入相加。我使用带有嵌套连接的countif和sumif式。我试图弄清楚如何在搜索查询中包含单词,开头,中间或结尾的所有实例 - 但也想要排除单词出现的实例作为一个更长的词。这是一个例子:
我们说这个词是“沙子”,这些是搜索查询:
“沙”
“出售沙子”
“在哪里买沙子待售”
“购买散装沙”
“火腿三明治”
每个搜索查询都有相关的费用和收入。我可以使用连接函数通过包含以下各项来捕获包含“sand”的查询:(如果单词“sand”在单元格A1中)
“沙子待售”连接(A1,“”,“*”)
“在哪里购买沙子待售”连接(“*”,“”,A1,“”,“*”)
“购买批量沙子”连接(“*”,“”,A1)
如果我做一个指向A1的countif或sumif没有空格和*之前或之后,它将包含“ham sandwich”搜索查询的值。那么如何包含仅由单词组成的搜索查询,而不是在之前或之后的空格?
答案 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"