25

我正在尝试计算子字符串出现在 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”。

这是一个我认为可以做到的公式:

=SUMPRODUCT((LEN(A:A)-(LEN(SUBSTITUTE(A:A,"username",""))))/LEN("username"))

不幸的是,我在 B 列中有 16,000 个条目,在 A 列中有数万个条目,因此即使在高功率 PC 上也无法计算字符(此外,该函数返回的结果值得怀疑)。

我考虑过使用:

=COUNTIF(A:A, "*username*")

但是 COUNTIF 需要一个带有星号运算符的字符串;由于数据量大,我需要使用单元格引用。

我的问题:有谁知道我如何使用这个公式?如果使用 COUNTIF,如何在语句的条件部分中获取单元格引用(或使用函数替换 COUNTIF 语句的条件部分中引用的单元格中的字符串)?

我知道我可以解析数据,但我想知道如何在 Excel 中进行解析。

4

3 回答 3

43

你快到了,使用

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

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

于 2012-10-18T06:30:09.843 回答
3

一个非常简单的 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-string: "ABC" x1-string: "ABC_" y-string: "ABC 123 ABC 23dfABC" y1-string: ""ABC_ 123 ABC_ 23dfABC_"

于 2016-07-27T12:28:13.913 回答
0

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

使用TEXTJOIN(自版本 2019 或 MS 365 起可用)允许获取一个或多个列(列或例如偶数列)中任何发生的实际数量。A:AA:B

因此它避免了功能的警告COUNTIF

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

三个有条不紊的步骤

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

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

MS 帮助TEXTJOIN 函数

于 2021-03-10T09:54:19.670 回答