前文已经介绍了EXCEL的常规函数(基础函数)和数组函数的学习思路,可能有人觉得还是有点简单,尤其是在说数组函数这一块,没有细说学习思路,主要原因有两个:一是数组函数的应用范围比较窄,一般数组函数能实现的计算结果,用几个常规函数分几步也能解决;二是数组函数的处理效率相对会慢一点,一旦要处理的数据超过1万行以上,数组函数的劣势就比较明显了,公式的计算时间比较长。
数组公式
自主函数我把它分为两个类别:自定义函数和宏表函数,先来看看自定义函数,它到底能干什么?
在实际工作中,经常会遇到这样的需求:去汉字或者是提取汉字。这个功能用数组函数是能实现的,只是函数的逻辑写起来有些复杂,另外,写好了的公式通用性不强,往往只能实现一种功能,通用性稍差。这也是基础函数的一个较大的劣势。虽然有些函数高手也能编译出通过大量复杂计算来提升通用性的函数公式,但那样的公式,学习成本很高,没有个几年的功力,你压根看不懂,就别说去写出来了。像这个公式:
IF(AND(R6=S6,R7="",R5=""),S6,IF(OR(S6="",AND(R5<>"",R6<>"")),"",INDEX(S:S,SMALL(IF((R$6:R$40=S$6:S$40)*(S$6:S$40<>""),ROW(R$6:R$38)),COUNTIF(S$6:S6,"<>")))&"-"&INDEX(S:S,SMALL(IF((R$6:R$40=S$6:S$40)*(S$6:S$40<>""),ROW(R$6:R$40)),COUNTIF(S$6:S6,"<>")+1))))&"",
头都炸了看完是不是有一种要炸了感觉?它肯定不是最好的解决方式。当然,在EXCEL函数界流行这样一句话:能解决问题的公式,就是好公式。
如果用自定义函数来解决去汉字和提取汉字,可以这样解决。见下图:
到底是怎么实现的呢,其实也很简单,只要写一小段VBA代码就可以了。
自定义函数代码
看到这里有些人就可能在打退堂鼓了,要写代码,那不是编程了吗?千万不要有这样的恐惧,编程不是高大上的东西,在我看来,恰恰相反,编程是个再普通不过的玩意了。不是我狂傲,且听我说完。
当你理解了编程的思维以后,你会发现,万物皆可编程,万物也处于编程之中。再举个很简单的例子:我们马上路的车道:有左转弯、直行、右转弯,或者是它们之间相互组合而成的道,为什么会这么设置呢?其实就是交警及道路部门给大家编的“程序”,让大家既可以规范行驶,又能确保该种设置下的通行效率和安全。
介绍完自定义函数之后,简单地说一下宏表函数,有些人把它们称作隐藏函数,其实这个叫法不准确。
真正的隐藏函数只有像DATEDIF()这类函数才是。具体的函数用法我就不展示了。只是说一下它的用法、操作界面和学习思路。

宏表函数,是在自定义名称的时候使用的,无法直接在表中输入。如果你能很好地规划它,那么在学会VBA之前,你也可以把EXCEL表格玩出花来。最常用的三个宏表函数:
EVALUATE、GET.CELL、GET.WORKBOOK。操作的界面就是用CTRL+F3打开自定义名称的界面,然后输入公式即可。
学习思路重点说一下,这类函数规律性比较强,参数少,但是随着参数的变化,得到的结果比较多。所以需要把它所有参数数值及对应的结果显示出来,然后熟悉他们的对应关系,找出其可利用的价值点,形成自己的思维体系,这样在后续的公式或者功能呈现中就能自然流出了。
都说python厉害,处理起表格数据来都是秒出。其实在python之前,用VBA早就已经实现了秒出的境界,你可以吹它爬数据厉害,但是不要来电子表格领域吹,术业有专攻。