【问题标题】:Formula in Excel to count occurrences of substrings within stringsExcel中的公式计算字符串中子字符串的出现次数
【发布时间】:2012-10-08 12:55:32
【问题描述】:

我正在尝试计算子字符串出现在 Excel 中的一列字符串数据中的次数。请看下面的例子。

字符串数据(推文)列如下所示:

   A
1  An example string with @username in it
2  RT @AwesomeUser says @username is awesome

带有“子字符串”(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 中进行。

【问题讨论】:

  • 请注意,您引用的 SUMPRODUCT 公式与 Chris 的 COUNTIF 函数略有不同。 COUNTIF 最多只会对每个单元格计数一次,因此每个单元格要么“得分”为 1,要么为零。 SUMPRODUCT 公式将计算 ALL 实例或“用户名”,即使它在任何单个单元格中出现多次 - 如果您想使用该公式,您应该限制范围而不是使用整个列

标签: excel excel-formula


【解决方案1】:

你快到了,使用

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

警告:
这会计算A:A 中包含字符串一 次或多次 次的单元格数。它不计算字符串实例的总数

【讨论】:

  • 克里斯:这似乎是答案。感谢您的协助!我昨晚尝试了连接,但我一定搞砸了语法。
  • 克里斯,这不起作用。尝试以下操作:在 b1 中输入“1”,现在是 a2:"s1df1, a3:"dsad", a4: "sd`1", a5: "sdf1111"
  • @Aртём Царионов 尝试了您的数据,返回计数为 3。您期望什么?
  • 使用 LibreOffice:=COUNTIF(A:B, ".*"&C&".*") :}
  • 您的 excel 中的参数分隔符可能不同。如果遇到错误,可以尝试使用分号。例如=COUNTIF(A:A; "*"&B1&"*")
【解决方案2】:

一个非常简单的 Excel 解决方案,用于将 x 字符串(“ABC”)转换为 y 字符串(“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 字符串中出现 x 字符串的次数 = Ly1-Ly

出现次数:len(substitute(y,x,x1)) - len(y)

理解术语: x-字符串:“ABC” x1-字符串:“ABC_” y 字符串:“ABC 123 ABC 23dfABC” y1-string: ""ABC_123 ABC_23dfABC_"

【讨论】:

  • OP 要求提供整列单元格中的出现次数。这个答案计算了单个单元格(或单个字符串)中的出现次数......这实际上正是我正在寻找的。谢谢!!! :-D。
【解决方案3】:

通过TEXTJOIN 函数查找实际发生的事件

使用 TEXTJOIN(自 2019 版或 MS 365 起可用)允许在一个或多个列(列 A:A 甚至列 A:B)中获取任何发生的实际数量.

因此它避免COUNTIF函数的警告

"只计算一次或多次包含该字符串的单元格(在 A:A 中)的数量。它不计算该字符串的实例总数。"

三个有条不紊的步骤

下面显示的公式(假设一个命名的搜索词MySearch)只执行三个逻辑步骤来获得实际的结果数量:

  • 1 通过TEXTJOIN 加入给定列中所有填充的单元格,
  • 2 将字符串 1 中的搜索词替换为减少负 1 的词长度和
  • 3 从字符串 1 的长度中减去字符串 2 的长度。
=LEN(TEXTJOIN("|",TRUE,A:B))-LEN(SUBSTITUTE(TEXTJOIN("|",TRUE,A:B),MySearch,LEFT(MySearch,LEN(MySearch)-1)))

微软帮助TEXTJOIN function

【讨论】:

    猜你喜欢
    • 2020-02-21
    • 2012-02-12
    • 1970-01-01
    • 2014-04-24
    • 2022-01-09
    • 1970-01-01
    相关资源
    最近更新 更多