乐于分享
好东西不私藏

2026年了,AI写Excel公式的水平到底如何

2026年了,AI写Excel公式的水平到底如何

AI刚兴起时就尝试用来写Excel公式,当时用宛如智障来形容毫不为过。

最近再次尝试了Copilot,结论是:Excel这个赛道可能到头了。AI的公式水平已经可以满足一般人的需求 。直接演示几个案例吧。

案例1

从数据中筛选出带字母的数据(即红色框选的几项),期望结果是用filter实现。

输入要求:筛选出窨井标号中带字母a,b的行项目,放在G1单元格开始的区域。

稍作运行后Excel中直接显示出结果,默认用公式来处理:

=FILTER(B3:E17,(ISNUMBER(SEARCH("(a)",C3:C17))+ISNUMBER(SEARCH("(b)",C3:C17)))>0,"无匹配项目")

公式的思路是用SEARCH搜索关键字来构建FILTER的参数,这里有两个问题。

第一,该公式不够简洁,用正则表达式还可以大幅简化。

第二,输入要求是识别字母ab,而公式的逻辑是识别(a)和(b),虽然结果一样,但是没有严格按照要求执行。

针对这两点加以改进,输入要求:是带a,b的,不是带(),b;用函数REGEXTEST来构建,重新计算一次放到G8单元格,现有结果不要删。

Copilot返回几近完美的公式:

=FILTER(B3:E17,REGEXTEST(C3:C17,"[ab]"),"无匹配项目")

这个案例的解决方案很多,尝试让它多给几个公式,结果返回了3个:

=FILTER(B3:E17,(ISNUMBER(SEARCH("a",C3:C17))+ISNUMBER(SEARCH("b",C3:C17)))>0,"无匹配项目")
=FILTER(B3:E17,BYROW(C3:C17,LAMBDA(x,OR(ISNUMBER(SEARCH("a",x)),ISNUMBER(SEARCH("b",x))))),"无匹配项目")
=FILTER(B3:E17,MMULT(--ISNUMBER(SEARCH({"a","b"},C3:C17)),{1;1})>0,"无匹配项目") 

从这些公式可以看出Copilot还是有一定的局限性,始终围绕SEARCH搜索来开展。其实除此之外还有FIND,REGEXTEXT,REDUCE等。

案例2

经典的二维数据查找,实现方法也很多,Copilot给出的是老版本中2的万金油搭配INDEXT+MATCH

=INDEX($C$4:$E$9,MATCH(G5,$B$4:$B$9,0),MATCH(H5,$C$3:$E$3,0))+0*N("双条件查找")

最后还加的这点运算显得莫名其妙,其背后的逻辑不得而知。

0*N("双条件查找")

再次引导更多方法:

=MAP(G4:G5,H4:H5,LAMBDA(p,s,XLOOKUP(p,$B$4:$B$9,XLOOKUP(s,$C$3:$E$3,$C$4:$E$9))))
=MAP(G4:G5,H4:H5,LAMBDA(p,s,FILTER(FILTER($C$4:$E$9,$B$4:$B$9=p),$C$3:$E$3=s)))
=MAP(G4:G5,H4:H5,LAMBDA(p,s,CHOOSEROWS(XLOOKUP(s,$C$3:$E$3,$C$4:$E$9),XMATCH(p,$B$4:$B$9))))
=MAP(G4:G5,H4:H5,LAMBDA(p,s,INDEX($C$4:$E$9,XMATCH(p,$B$4:$B$9),XMATCH(s,$C$3:$E$3))))

这些方法不是最简洁的,但解决问题已是绰绰有余。

最后,本文中用到的Copilot是薅公司羊毛,个人电脑上还不知道如何使用,但趋势摆在这里,集成是迟早的事。