2020-06
4

Excel动态数组

By xrspook @ 9:55:22 归类于: 烂日记

动态数组是一个非常酷的功能。这个东西据说只有在Microsoft 365里面才能使用,但有些人说,在Office 2019已经具备了这个功能。不同人有不同的版本,而之所以有这样的结果,大概是时间点没有取得一致。动态数组这个东西从搜索的结果看来,大概是从2019年夏天开始。那估计是灰度测试,又或者那称不上是灰度测试,只能说是内部的测试。不知道当时作为新功能试用的用户是否能有那些功能,但起码那个时候我就没听说过,我也没有在其他Excel相关的教程里听说有这种事。动态数组我是近几个月才听说的,第一次看到相关教程的时候,我简直震惊了。看到教程以后,我赶紧去我的Office 365里面测试,发现是没有的。当时微软已经不支持Win7系统了,而我是在Win7上面的Office 365里找那个功能的。当我手动更新了Office 365以后那些动态数组的功能有了!这让我非常喜出望外,因为在微软不支持Win7之前,Office 365里几乎每天都会提示。微软不支持Win7,因为这样,所以Office 365只会更新安全方面的东西。但实际上,他们把功能也更新了,虽然是不声不响的。我不知道他们是怎么想的,有些功能可能是Win7和Win10之间的差异造成的,但有一些纯粹是他们为了让你连系统也花钱换掉。Office 365我是花钱买回来的服务。为什么我花了钱,却不给我服务呢?如果说这是Windows系统的问题,那么为什么连苹果系统你们都支持,却不持支持你们自家的系统呢?

动态数组这个东西挺高端,但实际上在久远的年代,实际上已经可以实现了。很久很久以前,高级搜索就能做到这个功能,但那个时候你顶多只能说那个是数组而不是动态。因为高级搜索只能用一次,下一次再用的话,你得重新复杂的步骤。如果不用高级搜索,你也可以用ctrl+shift+enter的数组结束方式来表达某些公式。长长的一段公式的确能实现动态数组的功能,但是对一般用户来说,门槛太高了,更重要的是,如果以三键数组公式结束,而某个筛选的表又很大的话。Excel的计算速度会大打折扣。如果数据非常多的话,简直会进入一个让人无法忍受的地步。我是一个很懒的人,所以我经常不选择数据的具体行数而直接选择整列,但是在某些公式里,这样的做法是不行的。比如SUMPRODUCT。某段时间我非常喜欢用这个大杀四方的公式,但后来我倾向于选择一些。可以整列选择的组合拳方公式。Microsoft 365引入动态数组公式以后,等于是简化了从前需要很长才能表达的出来的组合拳。实际上我只是稍微的体验过那个东西,这样的动态数组会不会在面对大数据的时候也瘫痪呢?昨天我明白到,原来Microsoft 365在处理方式公式的时候,实际上已经默认把它们当作是数组公式,这个大概就是为了铺开他们的组合拳做准备。

据数Win10将是最后一个Windows系统,以后的升级,再不会在名字上发生改变了,但会一直升级下去。

我觉得以后某天,我们的电脑将变得不再是一个具体的机器,那只是一个面板,真正的数据计算将会在远程的服务器里完成。要做到这个的前提是我们的云端必须非常完备,我们的网速可以支持我们无缝对接,就像虽然那个服务器在千里之外,但实际上我们的感受应该是那东西就在身边。

2020-06
3

默认理解为数组公式

By xrspook @ 10:22:24 归类于: 烂日记

昨天我才发现,我把Excel文件升级完以后,我的搭档没有用过。因为连续好长一段时间,单位的作业时间都超长,每天都在正常办公室下班时间之前,还没结束。通常会折腾到晚上11点多,运气好的话,可能晚上七八点就结束了,反正总的来说,在我升级完我自己的文件以后,一直都只是我一个人使用。我在三台电脑上用过那个文件。我用的是同一个软件打开,用的是Microsoft 365。其中两台电脑是台式机,搭配的是64位的Win7系统,而另外一个是笔记本电脑,搭配的是64位Win10。二者是有区别的,因为某些功能只有在Win10系统才有更新,但到底具体是些什么,至今我还没搞清楚。自从用了Microsoft 365以后,我也说不准那个软件会什么时候给我更新,比如说晚上回到宿舍,单位的作业很晚才结束,我赶着要把数据搞完然后睡觉,但偏偏在那个时候,打开电脑,打开Microsoft 365,却告诉我他正在升级。这种状况很让人抓狂,因为晚上10-11点的时候,单位宿舍的网速可能非常慢。如果Office在那个时候进行升级,而那个安装包又非常大,这将是毁灭性的。所以下次大概我要给软件设置提醒我升级,但不能为我自动升级,应该由我去选择升级时间,这比开电脑就被吓一跳好多了。理论上说Win7系统上的Microsoft 365对应的是2016的功能,Win上的365对应的是2019的功能,但无论是Win7还是Win10,我的365还是会比传统的Office 2016高级那么一点点,至于高级在哪里,我不知道。

Microsoft是个神奇的存在。office软件不知道从什么版本开始都有32跟64位的版本,365貌似给我的安装包都是32位的版本,但是365在不同的Windows系统下面又有其他分支。

大体上我觉得,Win7下的Microsoft 365,应该跟Office 2016差不多吧。但昨天的实际遭遇告诉我,不是那回事。昨天我才发现,在我三台电脑上都开得好好的公式,在我的搭档的电脑上几乎所有地方都显示错误。这不可能吧!一开始,我怀疑是SUMIFS不能在2016上使用,但搜索过后发现那个函数已经在Office 2016上通行了,那到底是什么呢?结果发现原来是我搭档Excel的选项设置里面勾选了引用空单元格时显示错误,为什么居然有这种脑残设定呢?我用了这么多年的office,从来没遇到过这种事,昨天之前我甚至不知道原来还有个这样的设置。把那个勾去掉以后,还有不少公式的地方显示错误,点击那些公式后发现,在我的电脑上没有表示数组公式的地方,在她的电脑上居然默认成了数组公式,那些东西根本不是数组变成了数组,当然会出状况。所以解决办法也很简单,重新把那个公式确定变回普通公式,所有数据都回来了。为什么在不同的电脑上普通公式会自动变成数组公式呢?这个问题之前我也曾经遇到过,但没有让我的公式全部失效,所以我也就没有理会了,但我发现在某些函数前会多了个@的标志,至于那个东西是干什么的,我不知道。

带着这个问题,我立马去搜索。先是去百度,接着是去必应,最后我还是在Google找到了答案12。原来在Microsoft 365里,默认把所有公式都认为是数组公式,虽然没有很明确地标注出来。不是所有函数都会被误解,但一些包含相对变量的函数就会出现这种毛病,比如说公式里大量使用的indirect。这些公式在数组与非数组里理解是不一样的。当我的搭档在她电脑上把数组公式转为普通公式以后,在我的电脑上,发现数组公式前面多了个@,而这个东西。就是为了让老office兼容,在365里面有没有@,效果完全一致,但在老office里面,多了个@,就说明这个不是数组公式。

我不知道为什么office的进化经常会在一些相对引用与绝对引用里纠缠不清,之前有数据透视表的数据源变成绝对引用,搞死所有人。现在又有偷偷地把公式默认为数组公式。让老版本的软件看到一大片数据错误。他们在这个默默改变的的时候,其实完全可以推荐用户另存为别的Excel格式,通过转换格式把公式修正为老版本可以理解。

这个默认数组公式的问题我没见过中文解释,是不是因为谁用Microsoft 365中文版的人还不够多呢?

2020-05
27

数据汇总小感

By xrspook @ 9:05:03 归类于: 烂日记

理清思路,比埋头苦干重要很多。如果一开始就掌握了方法,就不需要在路上兜那么多的弯。处理数据有这么一句行话,汇总时掉的汗,是录入时脑子进的水。如果一开始就把数据结构设定好,往后的汇总那是行云流水般自然而然的事。我是那种习惯于白手起家的人,通常我不会借用什么特殊的工具,比如说某个系统,我只用最普通常用的办公软件解决问题。

当然了,办公软件我是挑的,比如我只喜欢微软,我不喜欢WPS。而之所以不喜欢WPS,是因为我觉得很多东西他们仍旧留抄袭的层面,在一些非常核心的数据控制方面,他们远没有Office这么强大。有一些经常用到的小技巧,他们的确做了很好的封装要优化。但是会看的看门道,不会看的看热闹,就如一开始所说的,如果数据结构做好了,那些小窍门是不需要用到的。那些小窍门通过Office的高级公式是可以完成的。有人觉得那些小窍门非常有用,但是我觉得如果全盘数据由我控制,我的脑子不会那般进水,自然就不会挖坑让自己踩,那些所谓窍门也就不需要用上了。

跟数据透视表交了朋友以后,我明白到明细数据和汇总数据是彻底不一样的两种东西。你把他们混合起来用,结果将非常恐怖。通常,大家都喜欢这么干,而且觉得这么干是理所当然的事,而之所以有这样的看法,是因为当没有办公软件,没有Excel没有电脑之前,他们在纸质上就是这么干的。在纸质上这么干,可以让他们对整体数据有一个全面的认识了解。但实质上,他们所做的那些事正是数据透视表最擅长的。在纸上完成,只能做某一个分类的,如果要换个统计口径,那一大片数据等于白费。很多人在用Excel的时候,实际上只是把他们在纸上做的那些搬到电脑上。Excel不是一个画图软件,不是艺术家的画板,也不是一个用键盘操控的笔记本。这个强大的软件是有很强汇总计算功能的,我们必须用好这个,用不好别人的优点就是在增加自己的麻烦。软件的天马行空建立在我们说了一些他们能理解听懂的话。软件也是有脾气的,你得按他们的语法去表达你的东西,他才能用他的高超技术化腐朽为神奇。所以,我们首先要知道自己有什么,自己想得到什么,还有软件习惯用什么格式去处理问题。把我们的需求用机器语言翻译出来,然后我们就能得到我们想要的结果。把明细数据和汇总搞在一起其实并不是我们最初获取的数据心态,我们做的其实已经发展过了,要软件替我们做汇总分类,我们就要退回最原始的状态。为什么明细数据和汇总数据必须在一个页面反映出来呢?看数据的时候,我们到底是看每一条数据有没有问题,还是我们只是把那个明细数据当做是一个凑数的工具,而我们的眼睛直接瞄到了最后呢?如果我们关注的只是最后的汇总数据,明细数据摆在那里,难道就只是用来让我们多滑几下鼠标到最后吗?对基层人员来说,他们必须保证每一条原始数据的真实性、准确性和完整性,而对领导来说,明细是什么不重要,他们需要的是各种维度的汇总结果,每个领导的口味不一样,他们想要的汇总口径五花八门。成千上万的明细数据再用一开始纸质那种画大图的方法来汇总,根本赶不上这个时代的节奏。不仅仅是累处理数据的这个人,看结果的人也很烦。

程序语言也是一种语言,射手座有语言天赋,我觉得这可能是真的。

2020-05
10

Excel里写长公式

By xrspook @ 9:42:47 归类于: 烂日记

不知不觉好像我已经快一个星期都没有碰python了,原因是在家的时候我懒惰,在单位的时候,一心在整理各种各样的数据,也正是因为我正在整理数据,所以其实在我的骨子里是念念不忘想使用python这个大招的。在数据处理方面。我觉得,我正在用Excel人肉操作的那些,如果以一个正确的方式丢给python,那绝对是几秒钟就能完事。明明我知道可以这么干,但现在我还没到达那个境界。

昨天我整了一个巨长的公式。在最开始的阶段,我在普通的Windows记事本里折腾,但是当公式嵌套得越来越多以后,显然普通的记事本把我直接看晕了。我把那个东西放回Excel,但实际上Excel这个怪物根本不给我显示到底那些一对又一对的括号谁跟谁匹配。我也试过把那条长长的公式放到VS Code里,我随便打了个py文件往里面放Excel公式。虽然某些地方高亮了,但是括号匹配还是很不行。如果那不是一个Excel公式,而是一个python文件,我早就给它写很多注释、搞很多回车了。不就是个嵌套了三层的if嘛。但实际上,如果这是在python,完全可以不嵌套,用三组平行的if就解决问题了。最终,我把那条很长的公式贴到了Notepad++里。经过一番折腾,我觉得Notepad++才是最适合编辑Excel长公式的工具。虽然Notepad++不能自动生成成对的括号,但是在判断括号对应性方面,我感觉已经足够了。他们会把成对的括号用加粗的红色显示。当你选择这一边的括号的时候,那边的括号就红色加粗了,这样我就能搞清楚自己编辑到了哪一层括号。习惯了用python之后,什么括号,什么使用范围之类的东西全部用冒号、用缩进就解决了,回到Excel里要用一句话表达,本来用三句短话就能表达清楚的东西的确挺烦人。为什么Excel编辑公式就不能用回车,不能用缩进解决问题呢?如果有几个回车的话,显然那条公式到底在表达什么就很明白了。在Excel的某个单元格里回车,那就是要执行公示的节奏。如果是数组公式,你还得用组合键结束。有时我实在不明白他们为什么非得一定要用组合键呢?为什么不能在公式外面加一个什么函数包裹,让软件明白就在执行数组公式呢?

习惯了python的简洁与人性化后,回到Excel让我各种不习惯。在python里,单引号和双引号都可以用来表达那是字符串,但Excel要表达字符串,要表达某些固定格式,必须用双引号。另外一个人让我不习惯,因为我已经彻底忘记的就是在Excel里面不等于用的是<>,而在其他编程语言里面,不等于的表达方式是!=。所以当我在Excel里使用!=的时候,Excel懵逼了。于是我不得不去搜索,进而发现是我自己搞迷糊了。还记得小学的时候,家长们总担心孩子如果一边学汉语拼音一边学英语会不会张冠李戴,用汉语拼音来读英语或者用英语来读汉语拼音。这是两种彻底不一样的东西,虽然他们的最终结果就只是个发音而已。我是小学一年级开始学汉语拼音的,三年级的时候开始学英语口语。在我开始在学校正规接触英语之前,我的汉语拼音已经很熟练了,而在我接触编程语言之前,我接触过Excel,但只是接触过而已。对二者的深入了解几乎可以说是平行发展的,所以混淆二者的某些基础用法我觉得可以理解。

最终,我把那个我想做到的效果用一条很长的公式表达了出来。那条公式针对的不是具体的某些单元格里面的东西,所指代的位置全部都是相对的。所以根本不存在拖拉以后会出现状况。有了这条公式我就彻底做到了对某个仓开始入库、结束入库以及期间库存精准定筛选定位。

那条长公式在成功整出来之前,我先在纸上列出了几个条件。代码这种东西是非常讲究思路的啊啊啊。

2020-05
9

终于用上了切片器

By xrspook @ 10:20:06 归类于: 烂日记

昨天研究了一个晚上的Excel。其实也没折腾出什么高端的东西出来,都是一些大路的功能。用我以前的方式,也能实现,不过昨天晚上我把它更进一步,让使用者更直观简单。之所以要改进自己,很重要的一个因素是我发现单位的仓号命名会导致筛选一些比较小的仓号的时候如果用输入的方式会误杀。比如说我选1仓的时候,当我输入1,那些什么11,13,16全部都会中招。要避免出现这种低级错误,最简单的方法我觉得是全部用两位数字,甚至直接用上三位。001,002这种东西不会在999之内重叠。但其实,以我们单位的占地,应该达不到三位数字。一个10万吨的立筒仓群里面有18个立筒仓,10个星仓。如果有5个以上的立筒仓群,两位数的命名就会出状况,但显然我们单位没有那么多的地方建这么多组立筒仓。至于浅圆仓,至少是1万吨一个,现在新建的那些甚至达到了2万吨。再怎么牛逼位,我们单位也规划不下100个浅圆仓。因为这就意味着起码有150万吨以上的仓容。加上立筒仓,要达到200万吨几乎不可能。以我们单位的占地,以及所建厂房的仓容,即便到达200万吨也用不上三位数字的编码。

以普通人的思路去考虑,从1-99编码是再正常不过的事,但是从一个不重叠数字的角度考虑,如果用的是CTRL+F的搜索,尚且可以选择单元格匹配,但是如果那是一个列表里面的筛选项,效果就会很尴尬。当然,也有一个不会中招的方式,就是用手动单选。如果你手头上有100个仓,你要单选其中一个。无论如何,这都比不上你直接输入数字快。点到某个单元格的下拉菜单里面去挑选某个东西是一个非常没有效率的做法。昨晚我突然领会到在这种时候,我需要使用切片器。其实切片器跟传统的筛选没什么区别,但是切片器可以直接放在工作表外面,你可以把它拉得很长。在普通的下拉菜单里面,某个视图你可能只有5-10个选项,但是只要你的电脑屏幕足够大,你的切片器就可以很大,极限情况下,一列估计能排下20个。5个选项和20个选项的区别在于下拉的滚动条被大大缩小了。Office 2003没有切片器,我不知道2010有没有,因为我几乎没有用过2010,但我知道2013年以后的Office具备这种功能,除了切片器以外,还有日程表。日程表这个东西我试用了一下,感觉能实现我的某些功能,但是为什么那个东西只能用滑动条而不能手动输入数据控制呢?如果要做到自由的控制,难道我要为那个日程表写个宏?

洗澡的时候我一直在考虑。计算堆存费这个东西最根本的是判断起始时间。决定了开始与结束,中间的那些东西就只是重复得做同样的事情而已。可悲的是,我脑子里只有python,没有Excel VBA。几乎不假思索地,我就已经设定好了有了开始结束以后,中间的循环在python应该怎么写。虽然我完全不知道要怎么让python读取我的Excel文件。python能实现的功能,Excel VBA应该也能实现,顶多是语句比较麻烦而已。做好了前期准备以后,计算那些东西就只是一个秒杀的过程。

当别人在想用什么程序可以解放自己,策划这要为之付多少钱的时候,我想的却是怎么自己写一个程序,解放生产力。

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