我正在尝试计算子字符串在Excel中的字符串数据列中出现的次数。请参阅以下示例。
字符串数据列(推文)如下所示:
A
1 An example string with @username in it
2 RT @AwesomeUser says @username is awesome
带有“substrings”的列(Twitter屏幕名称)如下所示:
B
1 username
2 AwesomeUser
我想使用公式来计算来自B1,B2等的子字符串出现在A列的字符串中的次数。例如:搜索B1的公式将返回“2”并搜索B2将返回“1”。
我不能这样做:
=COUNTIF(A:A, "username")
因为COUNTIF只查找字符串,而不是子字符串。此公式将始终返回“0”。
这是我认为可以做到的formula:
=SUMPRODUCT((LEN(A:A)-(LEN(SUBSTITUTE(A:A,"username",""))))/LEN("username"))
不幸的是,我在B列中有16,000个条目,在A中有数万个,因此即使在高功率PC上计数字符也不会起作用(同样,该函数返回的结果也是可疑的)。
我考虑过使用:
=COUNTIF(A:A, "*username*")
但COUNTIF需要一个带星形运算符的字符串;由于数据量的原因,我需要使用单元格引用。
我的问题:有没有人知道如何使用这个公式?如果使用COUNTIF,如何在语句的条件部分中获取单元格引用(或使用函数替换COUNTIF语句的条件部分中引用的单元格中的字符串)?
我知道我可以解析数据,但我想知道如何在Excel中执行此操作。
答案 0 :(得分:38)
你快到了,使用
=COUNTIF(A:A, "*"&B1&"*")
(在Excel 2010中测试)
答案 1 :(得分:2)
一个非常简单的Excel解决方案,用于将x-string(“ABC”)出现在y-string中(“ABC 123 ABC 23dfABC”):
出现次数:len(替代(y,x,x1)) - len(y)
理解命名法: x-string:“ABC” x1-string:“ABC_” y-string:“ABC 123 ABC 23dfABC” y1-string:“”ABC_ 123 ABC_ 23dfABC _“
答案 2 :(得分:0)
通过 TEXTJOIN
函数查找实际发生的事件
使用 TEXTJOIN
(自 2019 版或 MS 365 起可用)允许获取一列或多列(列 A:A
或例如偶数列)中任何事件的实际数量A:B
).
因此它避免COUNTIF
函数的警告
“只计算包含一次或多次字符串的单元格(在 A:A 中)的数量。它不计算字符串的实例总数。”
三个有条理的步骤
下面显示的公式(假设一个命名的搜索词 MySearch
)只执行三个逻辑步骤来获得实际的结果数:
1
通过 TEXTJOIN
连接给定列中所有填充的单元格,2
将字符串 1
中的搜索词替换为词条长度减 1 和3
从字符串 2
的长度中减去字符串 1
的长度。=LEN(TEXTJOIN("|",TRUE,A:B))-LEN(SUBSTITUTE(TEXTJOIN("|",TRUE,A:B),MySearch,LEFT(MySearch,LEN(MySearch)-1)))