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

问题描述 投票:0回答:4

我正在尝试计算子字符串在 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 将返回“2”。返回“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 中执行此操作。

excel excel-formula
4个回答
52
投票

你就快到了,使用

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

注意事项:
这将计算

A:A
中包含字符串一次或多次 次的单元格数量。 它不计算字符串实例的total数量。


6
投票

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

    确定 y 字符串的长度。 Ly = len(y)
  1. 用 x1 字符串替换 x 字符串(仅将任何受支持字符的 1 个字符附加到 x 字符串。例如 "ABC"=> "ABC_" )并计算新字符串 y1 字符串的长度。 Ly1 = len(替换(y,x,x1)).
  2. y 串中 x 串出现的次数 = Ly1-Ly
出现次数:len(substitute(y,x,x1)) - len(y)

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


1
投票

通过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)))
MS 帮助 

TEXTJOIN 函数


0
投票
我知道偷看者不喜欢僵尸答案,但许多人搜索这些问题并找到这些旧帖子。这是我的回答:

=COLUMNS(TEXTSPLIT(C4," 和 ",,TRUE,0,))-1,其中: C4 = 包含要检查的文本的单元格, " 和 " 是要搜索的文本字符串, -1 将创建的列数减少到正在计算的文本字符串的出现次数。

又短又甜...

© www.soinside.com 2019 - 2024. All rights reserved.