Excel中有没有一种方法可以计算字符串中特定文本的出现次数,但也包括前一个字符?

Ell*_*lka 4 excel vba excel-formula

我有一个电子表格,其中包含 98 行不同的字符串,这些字符串是仅使用“M”和“F”记录的男性/女性访问序列。我试图找到这些序列中男性访问的频率,这些序列将在字符串中显示为“MM”。然而,使用我在 Excel 中知道的方法,它目前会错过一些出现的情况,因为在找到匹配的字符后,它会忽略这些字符并移至下一个字符,而我需要它始终考虑最后一个字符。例如,MMM 首先是一个雄性,然后是一个雄性,但又是一个雄性,然后是另一个雄性。例如,一个单元格包含“MMMFMMMMM”,使用我所知道的 Excel 中的方法,它仅将其计为 3 次出现,因为一旦找到“MM”,它就会移至字符串的其余部分。但在我的场景中,这实际上会出现 6 次,先是一个男性,然后是一个男性,至于顺序,我总是考虑最后一个访客。有没有办法在 Excel 中使用公式甚至 VBA 或宏等来自动执行此操作?请参阅下面的示例,其中包含我当前拥有的 A 列和 B 列以及我想要添加的 C 列,以了解每个序列中 MM 访问​​的频率:

顺序 毫米数
1 多功能FFFM 0
2 FMMM 2
3 FF 0
4 MMMMMM 4
5 中号 0
6 多频多频多频多频 2

到目前为止我已经尝试过:

对于所有单元格: =SUM(LEN(B2:B7)-LEN(SUBSTITUTE(B2:B7,"MM","")))/LEN("MM") =SUMPRODUCT(--(ISNUMBER(FIND("MM", B2:B7)))) =COUNTIF(B2:B7, "*MM*")

对于每个单元格: =LEN(B2)-LEN(SUBSTITUTE(B2,"MM","")) =MATCH(2,1/(MID(B2,SEQUENCE(LEN(B2)),2)="MM"))

然而,几乎所有这些方法都只计算每个 MM 的出现,然后移动到下一个字符。其中一些还只对包含 MM 的细胞进行计数。Excel 中是否有一种方法可以计算每个单元格字符串中 MM 的出现次数,同时还考虑字符串中的前一个字符?非常感谢您的任何意见!

Jvd*_*vdV 6

好问题。一种选择可能是:

在此输入图像描述

公式为C2

=MAP(B2:B7,LAMBDA(s,SUM(LEN(TEXTSPLIT(s&"FM","F",,1))-1)))
Run Code Online (Sandbox Code Playgroud)

或者,如果您知道字符串不再是 99 个字符,那么LAMBDA()请避免使用以下内容:

=MMULT(N(MID(B2:B7,SEQUENCE(,99),2)="MM"),ROW(1:99)^0)
Run Code Online (Sandbox Code Playgroud)

如果您碰巧被迫使用遗留功能,也许:

=MMULT(N(MID(B2,TRANSPOSE(ROW(1:99)),2)="MM"),ROW(1:99)^0)
Run Code Online (Sandbox Code Playgroud)

并确认通过CtrlShiftEnter