夜雨聆风学习资料网

ARTICLE · 1108108

Excel函数公式不会写?手把手教你用AI编写函数公式的底层逻辑!

Excel函数公式不会写?手把手教你用AI编写函数公式的底层逻辑!
十一到了,在此呢祝大家十一快乐!想着大家节假日有大把的时间,可以在百忙的玩耍中抽出一点点时间来看看我的文章,学会那么一两个点,所以我就把很早就想写的这篇内容,现在把它呈现出来。恰逢一位新关注的粉丝,看到我的文章后,发信息给我说合并单元格查找匹配不到解决方案,想学习用AI来提高编辑函数公式的能力,借此机会,便有了这篇文章。
那这一篇文章,用的例子是李华同学提出的问题,正好可以很好的说一说怎么用AI来写函数公式,怎么正确的向AI描述问题。下面先来回顾一下问题吧:
这儿的问题就是,我用李华同学的原话:“请教一下,这个合并状态下要怎么匹配出来。”
接着李华同学又说:“这回我可是问出了世纪难题了,大佬来了也匹配不出来。”
我回复李华同学:“错!思路我已经有了。”
简而言之一句话,既然B列是合并单元格,那就用函数公式创建虚拟列,让合并的单元格变成普通的、每一行都有数据的单元格,更通俗易懂的看图:
看了上图懂了吗,就是用公式创建C列这样的虚拟列,它不呈现在具体的表格里,只是在公式里参与运算。
所以我根据这个思路,在通义千问中描述了下面这一段话:
“帮我写一个公式,当A列为书名,B列为A列书名的作者,当是同一作者的时候,作者名就会合并单元格,这会儿,我在C列输入书名,在D列要查找C列书名的作者,数据源就是A列和B列,但是合并单元格的只能找到上面那一个,怎么写这个公式,把合并单元格的数据比如C2:C10是合并单元格,把C2的数据填充到C3:C10,包括后面还有的合并单元格。”
我们先不去看通义千问给的结果,我们先来分析上面这段话。这段话就是我问AI能问出答案,而你们问不出答案的关键。
1.“帮我写一个公式……”:你首先要告诉AI,要它帮你干嘛,是要写个函数公式,还是写个VBA代码,或者是写一篇诗,亦或是写一首词。不管你要AI帮你干嘛,你要一开始就给它说,这就叫明确的方向指引,或者叫做定调子。
2.“当A列为书名,B列为A列书名的作者,当是同一作者的时候,作者名就会合并单元格”:告诉AI我的基础数据源的样子,具体到单元格、具体到区域,当然,你也可以截图发给AI,但是不管如何,我还是建议你学会描述数据源,因为在你描述数据源的时候,比如“A列”、“B列”、“合并单元格”这些名词要用上,这个时候你就不要描述成“这一列”、“那一列”、“1列”、“2列”等等模糊的,语义不清晰的词语。所以“单元格”和“区域”一定要认得到、写的出,还能在表格上框选的出来。
3.“这会儿,我在C列输入书名,在D列要查找C列书名的作者,数据源就是A列和B列”:提出想要的效果,这句话里特别的一个词“查找”,这个词很关键,函数公式分为几大类:查找、统计、求和、判断、日期、时间、引用、文本,主要用的是这些,那么当你在描述你想要的效果的时候,就要加上这些词语,不一定完全就叫查找,你也可以说相近的词,但是是用查找这个准确的词。其它类别的也是这个道理。末了,你还要提一下在哪里,具体到列名或者行名,具体到准确的数据区域名。
4.“但是合并单元格的只能找到上面那一个,怎么写这个公式,把合并单元格的数据比如C2:C10是合并单元格,把C2的数据填充到C3:C10,包括后面还有的合并单元格”:最后,就是描述遇到的问题,包括这个问题怎么解决,描述出自己想要得到的结果,说白了就是把你遇到的问题,包括你想要这个问题怎么向着自己希望的那样解决,把这些一股脑的都描述给AI,具体的问题根据实际情况描述就行,我这里只是举一个例子。
下面就是AI给的解决方案,当然,我只截取了实际操作部分:
但是,当看到这个方案的时候,我直接否了。原因嘛,当然是居然让我做辅助列,这完全不符合我的风格,我从一开始的要的就是虚拟辅助列。所以,我继续给通义千问发了一段话:
写一个不用辅助列的数组公式
继续解读这段话:
1.“不用辅助列”:重新给AI一个具体的方向,上面给的方案是使用辅助列,那不用辅助列,AI就会朝着创建虚拟辅助列这个方向编写函数公式。
2.“数组公式”:为什么这里特别注明了是数组公式呢,因为要创建虚拟列,这个虚拟列就是一个数组,所以要加上数组公式。
这样给了AI新的指令以后,看看给的新的方案:
公式如下,当然我把区域都锁定了一下,你们直接粘贴就能用,当然区域要根据实际情况更改:

=LET(书名列表,$A$2:$A$100,作者合并列,$B$2:$B$100,补全作者,SCAN("",作者合并列,LAMBDA(累积,当前,IF(当前<>"",当前,累积))),XLOOKUP(D2,书名列表,补全作者,"未找到",0))

简单解释一下上面这个函数公式:

通过这个函数编辑器可以看出:

书名列表 = $A$2:$A$100

作者合并列 = $B$2:$B$100

补全作者 = SCAN("",作者合并列,LAMBDA(累积,当前,IF(当前<>"",当前,累积)))

左边是定义的名称,你可以叫书名列表,也可以叫阿猫阿狗,意思就是你给$A$2:$A$100区域一个名称,名称可以根据你的字段名来写,也可以随意写成阿猫阿狗,你要记得你把这个区域定义成了什么名称。

所以,同理,$B$2:$B$100区域给它定义的名称就叫作者合并列。

所以,同理,SCAN("",作者合并列,LAMBDA(累积,当前,IF(当前<>"",当前,累积)))区域给它定义的名称就叫补全作者,这一段函数公式就是做的作者的虚拟列。下面详细解释一下这段函数公式:

首先这段函数公式的功能是:当遇到非空值时使用当前值,遇到空值时则沿用之前的非空值(即向前填充相同的作者信息)

SCAN ("", 作者合并列,LAMBDA (累积,当前,IF (当前 <>"", 当前,累积)))
1. "" 是初始值
2."作者合并列" 是要处理的数据范围,即$B$2:$B$100区域
3.LAMBDA 函数,定义了计算规则:
a.如果当前单元格不为空(当前 <>""),则使用当前值
b.如果当前单元格为空,则使用上一次的累积值(即前一个非空值)
这个函数公式更详细的就不在这一篇展开解释了,现在来看看最后一段函数公式:

XLOOKUP(D2,书名列表,补全作者,"未找到",0)

这儿借助函数编辑器来分析,通过D列的书名查找作者,查找数组就是书名列表 = $A$2:$A$100,返回数组就是补全作者 = SCAN("",作者合并列,LAMBDA(累积,当前,IF(当前<>"",当前,累积))),就是创建的作者的虚拟列,不再从合并的作者列去找,这样就不会再匹配到空值。

看着很复杂的函数公式,其实逻辑是很简单的,就是做一个虚拟辅助列,补全缺失的作者名,然后使用XLOOKUP进行查找即可。

当然,我写文章讲的这么详细,是技术类文章的需要,你们在运用AI解决实际问题的时候,只要AI给的公式能帮助你解决了问题,至于函数每一步是什么意思,则不用去深究,特别是对于函数公式新手小白来说,是很难理解诸如上面这样的函数公式的,比如SCAN 函数虚拟列向下填充公式。

所以大家要学习的就是我用AI编辑函数公式的逻辑,这个大家用可以AI实操一下,先复刻,然后用你理解的意思再问AI ,可以文字跟我的不一样,只要结果是对的,那么你就成功了。

相关学习资料