2024-08
7

xlookup+超级表实现动态引用

By xrspook @ 11:38:23 归类于: 烂日记

谈Excel,索引肯定是离不开的话题。从经典的lookup到用得很多的vlookup,到index+match,再到vlookup的升级版xlookup,所有的这些都是为了让搜索更方便。xlookup相对vlookup来说的确已经进步了不少,但无论是这些搜索的函数也好,其它按条件汇总的函数也好,总是有一些支持选择列,有一些不支持。之所以有支持和不支持之分,其中一个很重要的原因是支持选择列对写公式的那个人来说很方便,但关键是选择列可能严重影响搜索的性能。感觉上明明很简单的东西却要加载很长一段时间才能出结果,那个加载时间,甚至让你觉得是不可接受的慢,所以在使用这些索引函数的时候,绝大多数的教程都会提醒你数据源得用绝对引用。引用一个确切的范围,即便你把那个范围搞得很宽也行,但是引用一些空白行,又会导致一些意想不到的事情发生,尤其是对某些经典函数来说就会出错。当然,出现这种问题可能是因为我道行不够,如果是高手操作,什么问题都不是问题。

为什么搜索出来的结果可以动态显示,可以显示多行,但是被搜索的内容必须得用绝对引用呢?为什么教程里除了整列选择就没有一些动态确定索引范围的方式呢?隐隐之中我觉得新出现的公式应该可以做到,因为新出的那些高级函数出来的结果都是很动态的。虽然实际上近几年我已经很少关注学习那些新出的东西了,但是我还是有那么一点印象的。

在超级表里面使用公式,引用的单元格不再是经典的单元格名字,而是超级表的列名,前提是你用的那种公式不涉及跨行,如果跨行了,我好像没发现超级表能有什么超级功能,但是如果用超级表的偏移定位函数,的确能实现到达上下行。

xlookup是个比较新的函数,所以它能不能把索引的范围定为超级表的某一列呢?我发现的确是可以这么干的。如果有两个超级表,我要用超级表A作为索引,超级表B的某些数据作为查询条件。那么我在写xlookup公式的时候,我就可以完全用超级表的快捷引用方式。暂时我只尝试过一些比较简单的数据,出来的效果非常好,比我整列引用速度快很多。虽然xlookup是支持整列引用的,但那样的话很慢,而之所以很慢,我估计一个很重要的因素是xlookup只在高级的Excel里面使用,而高级的Excel文件又比低级的Excel文件行数多很多。其实我一直搞不懂为什么同样是Excel的公式,有些函数可以整列引用,有些却不行。有些虽然可以整列引用,但实际上效率不高。用同样的公式,一个引用的是超级表,一个引用的是整列,同样是xlookup,出来的结果就很有差别。如果你在超级表B更新了数据要索引超级表A的内容。引用整列的那个在你把数据粘贴到超级表B的时候,就已经会把你卡得痛不欲生。也正是因为有这种痛不欲生,所以以前当我要引用很多数据的时候,我选择的是用Power Query做一个后台匹配。因为如果用前台做这种整列的索引,整个文件哪怕不是互相影响的那些表,也会变得奇慢无比。在这里我巧妙的地方是利用了超级表的动态性。以前,如果要动态应用可能会增减数据表格内容的时候,好像需要套用offset。

当我要指定某片数据区域的时候,Excel其实是能感知其连片区域范围的,但只是在用公式索引的时候没有给用户一个直截了当的方案而已。

2023-12
21

确定使用365家庭版

By xrspook @ 9:16:24 归类于: 烂日记

38岁生日的这一天做成了一件事,就是终于找到了一个方案更换同事的office软件。因为我发现在win11系统之下,用office 2016的确会出问题,但这种问题你又说不准到底是因为什么,有时候会出现文件报错。公式自动发生了变化,比如某些不是数组公式的会变成了数组公式,让人觉得非常无语的是数据透视表的部分完全没了,只剩下纯粹数据本身。除了这些核心问题以外,表格的格式也发生了变化,比如行列距离,但最根本的问题我觉得是当我在用365的Excel的VBA访问某些被office 2016修改过的文件的时候,会出现一些莫名其妙的错误。之所以这么觉得,是因为这些错误发生的时间跟2016修改文件的时间比较吻合。在没有找到VBA出现问题的根本原因之前,我首先得排除这是2016造成的。2016 proplus的版本里也可以使用Power Query,但实际上数据刷新的时候,非常容易卡住。在365里可以刷出来的数据,2016会卡在那里,可能多刷几次也能行,但是那种体验会让人觉得挺崩溃。因为我是一个用了365好几年的人,但因为同事的电脑是2016,所以虽然365已经引进了一些动态公式,但是我却一直不敢学习使用,因为只能我能看得到,别人看不到,这样就没办法工作了。现在如果大家都用了365,我就可以怎么高端怎么方便怎么来。

近期我发现很普通的vlookup公式在365最新版本之下,会自动会变成一个动态公式,根本不需要把公式往下拉,它自动会显示一个蓝色的窗口,里面就是你需要下拉的那些东西。那种动态的感觉直接让我联想到了超级表格。365的其它查询公式也有这么牛逼的功能,我在看其它公式介绍的时候就发现了,但直到某一天,我自己用vlookup的时候才发现原来传统的公式也升级了这项功能。

本来我的设想是买office 2021的密钥,跟同事经过一番讨论以后还是觉得单位购买Microsoft 365家庭版比较划算。首先因为家庭版可以绑定的电脑比较多,其次是因为如果电脑经过一批又一批的更新换代,新的电脑自带了office,365可能就不需要购买了,但如果只是一次性买2021的话,经过几年的迭代,那个东西虽然买回来很贵,但实际上还是会有老化的时候。

我足足花了一个上午的时间才总算最终确定了这个Microsoft 365家庭版的方案。,但把365装在同事的电脑上,并确定可以使用,又不得不拖到了下午。首先找做表的人,然后是找要签名的人。接着找建立账号的人,最后找付款的人。付款的人说因为申请表还没有列出来,所以还不能那么快就付款,因为付款就会自动生成电子发票,电子发票的时间不能早于申请表的时间。所以最终的决定是先把office 2016卸载了,然后安装Microsoft 365,接着是用同事的某个家庭账号里面的共享子账号暂时支撑一段时间,等单位的家庭账号买回来了以后再把同事的365账号更新上去。

生日这天让我没料到的是明明是星期三,消消乐却有了更新,当我好不容易干完了20级以后发现原来星期四还有一个更新。1220的算是节日加更,我搞不懂这到底算是什么节日,圣诞吗?元旦吗?还是说澳门回归?平平淡淡就好,每周20级就可以了,一周折腾两次很心累。

2020-09
18

强大的查询

By xrspook @ 8:45:44 归类于: 烂日记

昨天我实现了前天还不能实现的功能,用起来果然很爽。Power Query拯救了用vlookup公式导致源数据界面输入卡顿的问题。关于vlookup的卡机,据说用Power Query或者Power Pivot都能实现,而且据说PP的效率比PQ还要高。PQ现在我知道应该在哪里写代码了,但PP的DAX到底在哪里写,至今我还没找到。相对来说,我觉得PQ界面的按钮多一些。PP的按钮感觉跟数据透视表很类似。这就意味着,厉害的功能就隐藏在普通的东西之中。PP跟PQ比起来,函数的数量少了很多。用过的人都说,PP要比PQ简单,PQ就像一个谜一样。

前几天当我搜索,PQ教程的时候,发现了里面居然有递归。在谈递归的时候,把迭代也放进去了。迭代跟递归有什么区别现在我还不知道,但我知道递归和循环有什么区别。当某个函数的控制可以把判断和循环都用上的话。再加上700多个已经事先设定好的系统函数。PQ要实现一些神一般的功能显然是理所当然的。只有你想不到,没有它做不到,但前提是,要做到某些功能,光靠可视化版面,根本不可能。要在高级编辑器里自行折腾,或者在自定义的地方选择性折腾。光靠鼠标点击按钮是没办法把PQ的函数层层套用的,没办法一次性套用多个函数,某些功能就比较难实现了。对小白来说,要掌握所有可视化的按钮,尚且没那么容易,但是真正的高手,是必须自己写码的。

PQ用的是M语言,貌似我在VSCode的插件里面没找到相关的东西。里面有DAX的插件,可以自动补全和语法高亮。M语言更需要这种插件,因为光是函数的大小写就会把人搞疯掉。英语输入默认全部都是半角,但是如果我们的脚本里面还有中文,那就意味着中文跟英文得不断切换。光是逗号这种东西就会搞死人。而且我们的脚本里面,还不可能不出现中文。的确,函数可以起英文名字,但是,要处理的数据的列名,必然有中文,因为表格的内容有中文。我不知道那些写码的人是如何克服这种中文英文切换标点符号的问题,反正我是觉得,双引号,逗号,小括号这种东西经常让我很烦恼。不过幸好,据说,Office 2016以后的PQ,在写码的时候有自动补全功能,的确现在我的Microsoft 365可以这样,不仅仅是函数可以自动补全,连变量也可以自动补全。我不知道其他人写码的时候是怎样的,反正自从我习惯了python以后,我实在不能接受没有规范缩进的脚本。也正是因为有了python的习惯,所以我也默认把缩进从tab换成了4个空格。习惯了在VSCode里4个空格是4个圆点,现在PQ里没有这种东西。总让我觉得很不智能。

所有office文件都可以修改后缀,变成一个压缩文件。里面你看得懂或者看不懂的东西实际上就是数据以及你执行的步骤,所以PQ虽然有可视化界面,但实际上,它的高级编辑器让我觉得,那东西还原出了office软件数据处理的本身。

今年我的计划是学R语言,但实际上,我迷上了python,接着现在,我又迷上了M语言。

2020-09
17

融汇

By xrspook @ 9:02:26 归类于: 烂日记

在开始这篇东西之前,我突然意识到,原来一直以来,在网上我都通常不是在论坛之类的地方求助的那个。绝大多数情况之下,我的是去帮忙的那一个,又或者是发布某些信息的那个。我的确是有发过求助的帖子,但是,相对于其它来说,那非常的少,而且通常我是那种还没等到别人回复,我自己就已经找到答案的人。某些东西,靠我一个人的力量没办法找出答案,那个时候,我会求助于身边的网友。但网友不一定直接就能给出我答案,但是他们会给我个方向,让我明白我纠结的那个东西到底有没有找到答案的可能性。在一些根本就错误的命题上,也就不需要继续费神了。但是,在我纠结得死去活来之前,我不会找别人。当然,这也会有例外情况,比如电脑坏了,直接开不了机,或者能开机,但无论如何进入不了系统界面,又或者是电脑用得好好的突然就蓝屏。这些东西相比于软件上的纠结,又或者是习题上的误解会让我很慌。在电脑都开不了的时候,我也就无法找解决问题的方法了,因为绝大多数情况下,我的自学是搭配搜索引擎的。搜索引擎的答案是网友们的集思广益,众人是我最好的老师。暂时,我只是个低级的用户,所以答案可能难找一点,但通常都会有现成的答案,虽然可能不是一步就能上岸,要通过多种答案组合才能得出我想要的结果。

我不知道其他人自学的时候是怎样的,反正当我在学习某样新东西的时候,自然而然我就会联想我曾经做过的事。如果运用了这个新知识,会不会有一些更好的效果。比如昨天我下载了一本Power Query的教程。那是一本pdf,2017年出版的书,京东卖50多。我没想过买,也没想过不买,但是这么老的书,肯定已经有了pdf版本,所以我就下载了一本回来看看。结果发现,那本书里面说的Power Query是基于Office,2013的,所以,已经没有购买的必要了。因为Office 2013版本的Power Query和Office 2016的有差别。倒不是功能上有一些翻天覆地的变化,但是在找按钮上会让人有点棘手。于是我就直接开始看这本书。之前我觉得自己很讨厌看pdf。这次的这本pdf是扫描版,我也不明白我为什么看得下去,因为书本其实挺模糊的。里面说到用合并查询的方式来实现vlookup的功能。vlookup这个东西,只有几行的时候,效果还行,但数据一多,那就是死机的节奏。之前我们打算一整个表都用vlookup出结果,后来发现那会死机,所以最终使用vlookup的地方我就只留下几行而已,但即便只有几行,当我在那个源表增加数据的时候,还是会有卡机的感觉。在8GB内存的台式机上,感觉还好,在8GB内存的笔记本电脑上,有时会看到右下角说有多少个线程正在计算,显然这就是卡机的征兆。我不知道为什么会这么慢,如果用Power Query可以快一些。那本书谈到这个问题的时候,说少量的可以用vlookup,但大量的索引,Power Query才是最佳选项。从前我打算千行数据都用vlookup,后来发现那会死机,所以后来我就把那减少为只有几行,所以在我的那套操作里,无论用不用Power Query查询都无所谓,但是,我要掌握这项技能,但暂时,我还没有摸索出个所以然。

在没有得出为什么不行的时候就要停下来做其他事,总会让我觉得耿耿于怀意犹未尽,但我又不得不这样。以后我还得更严格要求自己,到点了就必须按下暂停键。

2018-03
30

不聪明不严谨

By xrspook @ 7:11:31 归类于: 烂日记

前几天统计培训的时候发生了这么一件事。我们一共有四门课程,分别安排在两个上下午。其中一门课程是Excel的应用,是门上机课。直到上机的时候,我才知道那门课是要让我们对着电脑的,但是让我非常意外的是老师居然不知道如何把他的素材放到每个学生的电脑里。因为时间紧,一个上午只有大概两个小时的时间。所以老师在上面讲,我们在下面做这种实操基本上是不可能实现的。即便是很熟练的人也做不到一边看上面,一边在下面模仿。其实这门课最好的方式就是直接去一个普通的课室,老师演示,我们不需要抬头低头。如果课室安排在一个机房,老师可以控制我们的电脑。那么我们就不需要抬头看老师那里,而只需要盯着眼前的电脑。理论课和上机课应该是分开的。理论课和上机课的时间应该对半,但我们居然用一个早上安排了这样的课程,显然对老师来说这很难,对学生来说这也不容易。为什么这么说呢?虽然我非常熟悉了解老师讲的那些应用该如何具体操作,但是按照老师一步一步做下去,我觉得时间不够。要不就是在自己电脑里没找到那个功能(我用的Excel 2003,机房电脑的是Excel 2010),要不就是抬头发现老师的操作已经到了下一步。于是,这就让我想起了大学学习C语言的时候,老师叫我们不要做笔记,只是看着她,听着她讲就可以了。因为电脑操作这种事,一个眨眼分神,几秒钟你就可能错过了一个甚至多个操作。刚上了一半,老师突然问下面的人觉不觉得他说得太快。他要不要慢一点?结果下面的人果然觉得他说得太快了,于是老师懵了,问他们那么是不是要重来,还是往后的部分说慢一点。无论是哪个操作,他要把课程讲完都是不可能的。这么短的时间之内,到底可以教会多少东西呢?我真心不知道!

向来我都对计算机的老师有很高的要求。他们应该本身自己就很聪明,而且反应很快,因为他们要解决的不只是常规的问题,还有学生莫名其妙搞出来的其它事情。显然给我们上这门课的老师在备课方面不那么仔细。另一方面,在应对他预料以外的事情的时候,也显得不够敏捷。他在给我们说loopkup使用之前,给我们说了绝对引用和相对引用,但是在公式里,他自己懵了,把绝对引用和相对引用搞错。在他写好公式即将往下拉的时候我就知道出来的结果一定跟他料想的不一样。所以当他拉完以后,发呆的那一刻,我马上可以给他指出你到底是哪里错了。对我来说,这只是很自然的反射,因为这些函数和公式我一直都在使用。绝对引用和相对引用之前我不怎么熟悉的,但是在经历过职称的计算机考试以后,我已经彻底掌握了那个东西,虽然反应还会有点慢。让我意想不到的是老师的反应居然更慢。在另外一个countif公式使用的时候,他要计算某个字符串到底出现了多少次,但搜索出来的结果居然是零。在他给学生演示之前,我已经在自己电脑上按照他的思路做了一遍,发现结果不对。老师还在郁闷,到底是怎么回事,他觉得那件事不可能在几秒钟之内解决,所以打算把那跳过的时候,我突然发现限定搜索的单元格里面的某个字符串并不是他所拼写的那样。因为单元格里面的东西除了他敲键盘进去的字母以外,还有几个空格。因为单元格里的字符串和他限定的字符串不一致,当然计算不出到底有多少个单元格是中彩。我的做法是直接把单元格里面的东西复制粘贴到计算的公式里。他的方式是把空格放到替换里面,把整个工作表的空格都替换掉。显然,这个工作表示他不知道从什么地方复制过来的,所以看上去你不知道有些地方居然有空格,但是备课的时候,老师要讲这门课,他是不是应该在上课之前过一下他准备的素材呢?如果他事先有准备,他不可能不把那些空格去掉,又或者讲课的时候,他会先让学生碰一下壁,然后告诉学生,其实某个单词后面还有空格,所以遇到这种情况就需要先灵活处理。在这门课里,他碰了两次壁,两次都被我秒杀解决掉了。对我来说,这是再普通不过的事情,但在其他人眼中,一定程度上我成为了一个神人。因为我自己是在基层单位做统计的,所以我知道什么才最适合我们。老师在课上说的那些东西都是Excel皮毛之中的皮毛,但尽管如此还是会有人得到启发。但我个人觉得,在适用性和易用性方面,讲其它东西可能效果会更好。又或者审视我们现在正在处理的表格,有什么改进的地方,更能提高我们的工作效率。只是把大学生用来考试测验的东西用在我们身上,显然不完全合适。

我从来都不觉得自己有多么的了不起,我只是在某些事情上曾经花过比他们更多的时间而已。

© 2004 - 2024 我的天 | Theme by xrspook | Power by WordPress