如图,想计算每个单元格中“函数”二字出现的次数,以及整个一列中“函数”出现的总次数,如何计算? 相信大家会不约而同的想到Countif函数——条件计数。 但如果你真的试过了,就会发现根本行不通。为什么?因为Countif函数计算的是满足条件的单元格个数,而不是单元格内的条件的个数。 这一点必须要理解透彻,初学者很容易混淆。 比如,我们要计算B列中包含“函数”二字的标题有多少个,这时候相当于计算满足条件的单元格的数量,因此公式可以这么写: =COUNTIF($B$3:$B$24,'*'&'函数'&'*'),结果是13。 而现在,我们要计算的是如“函数”两个字出现的次数,怎么办呢?今天分享两种方法。 01 常规函数计算直接给出公式: =(LEN(B3)-LEN(SUBSTITUTE(B3,'函数','')))/LEN('函数') 看着很长,实际意思很简单,就是——用单元格中文本的总长度,即LEN(B3),减去把关键字“函数”剔除后的长度(用Substitute将关键字替换为空)。相减的结果不就是关键字的总长度吗? 最后用关键字的总长度除以单个关键字的长度(LEN('函数')),就是关键字出现的次数。 如果对LEN、SUBSTITUTE函数的应用不熟悉,可以看我的函数课程,已更新至30节。 ▲ VIP/SVIP免费学 02 自定义函数BGStrCountExcel中虽然提供了大量的函数,但是并不是所有的问题都有对应的函数,能够直接解决问题。 因此,对于很多实际问题,在没有更好的方法之前,我们不得已只能把公式写得又长又晦涩,就像前面那串公式,看半天才能理解。 对于这种情况,如果有一定的VBA知识,可以快速的写一个自定义函数,不用弯弯绕绕,一个函数直接搞定! 第1步:在Excel中按ALT+F11,打开VBE,并新建一个模块; 第2步:在模块中编写或复制以下代码: Function BGStrCount(ByVal Rng As String, Str As String) arr = Split(Rng, Str) BGStrCount = UBound(arr) End Function 代码中,利用了文本的Split方法,用关键字进行分隔,分隔后的数组的上限即为关键字出现的次数。 第3步:写完代码后,回到工作表就可以使用定义的函数了。 公式超简单: =BGStrCount(B3,'函数') 除了计算单个单元格内关键字的次数,还可以计算选区中关键字的次数。例如在D3的合并单元格中计算整个B列中“函数”出现的次数,公式可以这么写: =BGStrCount(CONCAT(B3:B24),'函数') 首先,用CONCAT函数,将B3:B24区域的文本进行连接,连接成一个长文本。然后,用自定义函数BGStrCount计算长文本中“函数”出现的次数。 定义好的自定义函数如果想在所有文档中都可以调用,需要另存为加载项,在函数课的“加餐3:自定义加载项”一节中有介绍。 学好VBA,是开发自定义函数的关键。如果你想快速入门和进阶VBA,推荐你我最新录制的30节VBA课程,可能是少有的能帮你在短时间内掌握VBA的一门课程。
|
|