Excel中的公式计算字符串中子字符串的出现次数

时间:2012-10-18 06:23:46

标签: excel excel-formula

我正在尝试计算子字符串在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,如何在语句的条件部分中获取单元格引用(或使用函数替换CO​​UNTIF语句的条件部分中引用的单元格中的字符串)?

我知道我可以解析数据,但我想知道如何在Excel中执行此操作。

3 个答案:

答案 0 :(得分:38)

你快到了,使用

=COUNTIF(A:A, "*"&B1&"*")

(在Excel 2010中测试)

答案 1 :(得分:2)

一个非常简单的Excel解决方案,用于将x-string(“ABC”)出现在y-string中(“ABC 123 ABC 23dfABC”):

  1. 识别y字符串的长度。 Ly = len(y)
  2. 用x1-string替换x-string(仅将任何支持字符的1个字符串附加到x-string。例如“ABC”=>“ABC_”)并计算新字符串y1-string的长度。 Ly1 = len(替代(y,x,x1))。
  3. 在y-string = Ly1-Ly
  4. 中出现x-string)

    出现次数: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)))

微软帮助TEXTJOIN function