2024-04
12

有理有据地做选择

By xrspook @ 8:17:23 归类于: 烂日记

花了大概一天的时间整理出一个用来算库存价值的东西,这里我没有使用VBA,是因为我需要一个更稳的方式。之所以不用VBA,因为已经不需要跨文件加入数据了,所有东西都将在一个文件里解决,而且相对于我得用VBA来干掉的那些,这里的数据相对来说很少,所以这一次我用的是Power Query。我有考虑过要不要用Power Pivot,但最终可能我的数据要以普通表格或者是数据透视表的方式表现出来,通过查询生成的东西最终可能要粘贴到经典的纸质版二维表里,数据透视表在这个情况下就不怎么适合复制粘贴,尤其是当我的数据透视表选项里有合并居中的设定。

在这个做这个的过程中,我有考虑过用Excel自带的公式,但无论是经典的lookup还是新函数xlookup效率都太低了,我不知道是我的电脑太渣,还是的确就那么回事。如果用PQ,在一个低端的Excel里,的确可能效果是很糟糕的,但如果我已经把刷新好的数据发给别人,别人即便刷新不出来,数据也都能看到,不影响,但如果用的是高级的公式,可能那里就一团糟了。还记得多年以前,单位有异地储备玉米,对方把到达码头和已经装船发货地数据发给我,用了sumifs,那个时候我用的office是2003的,那个公式我根本没办法使用,全部显示的都是一团糟,所以我不得不为了打开那个文件看到里面的数据又在电脑上装了个WPS。那次之后,我才努力的尝试用office 2016,之所以会跳过2013,是因为2013在数据透视表方面有无可救药的bug。如果是office 2010,高级公式依然打不开,所以现在当我要实现某个功能的时候,我要考虑什么东西会高效一点,什么东西兼容性好一点。VBA的兼容性很好,但是不是人人都敢打开宏文件。因为在以前,宏文件通常都意味着有木马之类的东西。同时,我设定了宏万一某些时候有问题,别人就会只会弹出错误,的不到结果,也会让人很紧张。

这一次我做的文件,可能后面见到的人会很多,他们可能会用不同的电脑,可能是win10,也可能是win11,有可能是office 2021、2019,又或者是Microsoft 365,也有可能是WPS,到底的WPS里面能不能正常打开并使用PQ我不知道,我估计是不行的,但是能不能看到数据呢?我觉得应该可以,但是无法通过修改某些条件刷新出新的东西。

微软的AI据说很厉害,但关键是在中国和俄罗斯用不了,所以那些都是扯淡。前段时间说Excel通过安装插件可以使用Python,但是那个Python处理是需要把数据送到远端的服务器再传送回来的,我感觉最终会跟微软AI的命运差不多。现在的Power Query相对于我第一次在office 2016里看到的那个已经成熟了很多。还记得我是第一次在自己的笔记本电脑 office 2016家庭版里见到的PQ,那个时候那就是个四不像,中文英文各有一点,翻译都不全。有些功能也不知道是我用得不对还是怎么样,反正就会卡住。对照一些经典案例,的确能得到某些结果,但是我却一直都没有经常使用,因为真的不是每个office都兼容那个东西,而且不同版本的office看到的结果和刷新到的效率可能相差很远。

要解决同样的问题,到底用什么样的工具?当我手上的工具只有唯一的时候,就只能选那个,但是当我可以做选择的时候,我会考虑数据大小、运行速度,以及不同windows和不同office下的兼容性。

2024-04
9

犯下各种错误

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

感觉近期我经常会犯一些这样那样的错误,有一些错误是系统性的,比如公式设置不当,这种错误修改起来很简单,但是一旦追溯,可能涉及的东西会很多。这种错误一般很难被发现,因为那些固定的公式一直以来都是那么用的,你知道那是公式,所以你不会动,但关键是某些情况发生了变化,那些位置是需要做变动的,如果这个时候没去改,系统错误就会一直延续下去。设定公式的时候,我肯定是经过多方考虑经过各种测试,之所以那个公式会使用,肯定也意味着好长一段时间我也是这般做下来没有问题。有些时候公式可能会让某些情况自动的被剔除在外,这个我是可以预测的。所以在那个时候,我就得手动验证一下公式是否合理。理论上这种事情我需要在情况发生变化的时候验证,但万一在那个时候我没有做验证呢?上个月发现的某个系统公式错误延续了我好几年的数据。虽然那个数据看上去刺眼,但实际上不影响我其它地方的数据使用,所以一直没有被发现。表格最终在报出来之前,我都经过多方验证,但是偏偏那个公式不到位的地方从来都不是我验证的范围。那次错误以后,我修正了某些公式,让那个之前从来不被我关注的地方也纳入验证。

另外一些让我出错的地方是某些数据要体现出来,但是跟前后左右都毫无关联。如果你光看纸质的表格,你会觉得出那样的错误是根本说不过去,因为不符合那里的勾稽关系,但实际上,如果看过电子表格的话会发现原来那里我没有做任何的勾稽关系,为什么那个地方会被排除在外呢?因为在出错之前,那个地方无法用公式实现。因为那个东西跟其它数据完全没有交互。如果按照以前一贯的做法,即便没有交互那个数据也不会出错,因为把月末数直接复制粘贴到期初库存那里就可以,但偏偏出错的那一次就在于那个数不知道为什么被我例外处理了。之所以会出现这个例外,是因为除了那个数以外,我都使用等于的关系来处理那一列的其它数据,理论上那个期初库存也可以用等于的公式直接取数过去,但我的公式没有覆盖到那里。所以为什么我在复制粘贴的时候没有发现这个问题呢?还有就是为什么当我做核对,当我把纸质版打印出来,再三校验的时候也没有发现这个问题呢?发现这些问题都是我自己,不是其他人告诉我出错了。被动地等待别人帮我找出问题,显然这是不可能的。

近期之所以会出现这种瑕疵,一定程度上跟我的某个心态有一点波动有关。理论上,处理数据的时候,我的注意力应该高度集中,但有些时候突然间就会冒出这么松懈的念头,为什么会这样呢?以前我从来不会这样。虽然我也明白,以前不出错,不意味着以后也没有问题。虽然主观上我已经很努力地使用各种方式避免错误的发生,但是客观上还是有一些瑕疵不定时冒出来。人无完人,但我觉得犯下这些低级错误会让我良心过意不去,虽然我也没什么好后悔的。

要彻底避免这个问题,我得挖出自己确切的病根。

2020-09
19

我喜欢Excel

By xrspook @ 20:53:41 归类于: 烂日记

Excel的一般公式,我比较熟练,一些高级公式的叠加,我需要找教程套用,但起码我知道那是可以做到的。一般的数据透视表,是我一直以来用得相对来说最顺溜的东西,至于高级的数据透视表,也就是超级数据透视表我几乎不了解它的高级用法。在数据的筛选查询方面,之前我用的是公式,而近期,我知道了有Power Query这种神器。在这之前,我已经知道可以SQL语言查询。去年我开始系统学习了Excel VBA。这让我大大提升了某些工作的效率。当然这是非常有针对性的。对我来说,要开发一个VBA脚本需要好些时间,并不是一写就能用的那种类型,期间要经过不少修改。所以其实总的来说,对Excel的了解我还是比较全面的。

也正是因为有这样的经历,所以当我遇到某些综合性的问题的时候,当别人把目光主要集中在某个他们很熟悉的版块的时候,我会凭借我的直觉找问题,而不局限于他们觉得出问题的那个地方。比如在把SQL查询跟VBA结合的时候,别人会把精力放在SQL查询有没有写错上面。SQL有没有写错,其实我根本没看,对我来说那些东西太长了,看不懂,而且那个人写的VBA脚本缩进很有问题,看得我很郁闷,所以我就更加没有心情在那里琢磨。那既然能计算出一个正确答案,说明那个查询语句应该没什么问题。也正是因为写脚本的人的那堆东西格式比较混乱,所以我有理由怀疑那是拼凑起来的脚本,因为居然在脚本的开头连变量的定义都没有。为什么VBA里没有进行规范的变量定义,后面也居然可以照样使用呢?这让我有点惊讶,毕竟这是个VBA,不是python。C语言里,如果不先进性变量定义,后面根本用不了。在我记忆之中,VBA的变量在使用之前是需要先定义的。最终我发现是那个人的脚本之所以出错,是因为某些语句的套用搞错了,为什么他会把那个东西放在里?我觉得大概是因为他没有明白他一开始做的那个with是什么意思。但如果你问我为什么他把那堆东西套在里面会出错,而且是某些地方出错,不是全部出错,我回答不出来。理论上这种错误能在恰当的调试中体现出来,但实际上,VBA的调试句子我还用得不算很熟练。或者你会说,这是因为我的VBA学习还不够系统化,但我觉得我已经用了学习VBA最靠谱的那本书了。可以肯定的是,一些很基础的调试方式我还没掌握,如果我学会了那些东西,我可以大大提升我的调试效率,把错误定位得更精准。VBA脚本这种东西,我觉得最根本的是必须得理解。如果纯粹是各种套用,基础功能的确可以快速实现,但是当遇到的问题比较综合的时候,就会出现一些他们完全料想不到的状况。那种状况有可能与脚本本身的内容无关,与脚本的结构有关。

相对来说,Excel里我用得最弱的是高级公式的套用。如何用一个非常复杂的公式解决一些高端的问题是我一直以来都不大上心,或者说记得不够好的部分。非常复杂的公式,尤其是数组公式,虽然能解决一些神一般的问题,但问题是,其实那些公式需要耗费大量资源,所以在处理大数据的时候,非常有可能出状况。我是一个实用主义者,能做到某个功能,但是做起来的效率不高不好,我为什么要选择那种只是看上去很炫酷的方式呢?情况就像用VBA解决同一问题的时候,如果只是在工作表层面处理和先用内存数组处理再在工作表层面表达,效率千差万别。

Excel对我来说,除了要最终结果,过程也得追求高效和方便。

2020-09
3

这是暗暗的报复吗

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

从粉到黑其实完全不需要经过什么大波澜,可能只是无意之间等一件事而已。一直以来,我都是Office的粉丝,非常拒绝WPS,现在我依然不喜欢WPS,尤其当我有点迷恋上VBA以后。之所以VBA,因为数据透视表已经在某些方面无法满足我懒的需求了。但我只是一个新手,所以即便是很简单的东西,我的VBA脚本也要经过很长时间才能琢磨出来。

爱上周我突然发现自己Microsoft 365上面的Power Pivot不能用了。昨天,我又突然发现,原来自己连Power Query也不能用。这两个不能用,意味着所有高端的Office功能全部歇菜。这些东西全部都不能用以后,我付费的Microsoft 365和从前不用钱,而且体积还很小、几乎不出错的Office 2003,仅仅只剩下界面比较好看,公式多了一些而已。从Office 2003到Office 365,我花了很长时间,因为一直以来我都不觉得自己必须改变。因为工作上某些公式打不开,某些功能很厉害,但我做不到。在深思熟虑以后,我才终于换到了Office 365,但是当我的Office 365。用了不到两年之后,Office 365,变成了Microsoft 365,进而发生了Office软件里最强大的功能居然失效这种事。这是我电脑自己的问题吗?但我又不能完全保证这只是某台电脑的问题,为什么单位这台机就不能开,家里那个就没问题呢?两台机都是64位的Win7,理论上应该差不多。之所以会发生这种事,是不是因为家里那台机我没有进行升级呢?虽然微软说2020年1月他们已经停止对Win7的支持,从那里以后,Microsoft 365仅仅能得到安全更新,但实际上不是这样的,因为他们新的函数,我通过更新也能使用了,而且在我完全没有察觉的前提下,插入界面也多了一个叫做加载项的东西,那里的内容一定是新的,之前我没见过,不仅仅是我没见过,我之所以判定那是新的东西,因为那个功能居然还没有翻译成中文,部分东西是英文的。这就意味着这个功能并不完全成熟,就像在Office 2016的家庭及学生版里,Power Query用的是英文界面,到了Office 365,那个东西已经是内置功能,不再是加载项了,那已经融入到了软件本身。既然微软条款上说,只对Win7系统下的Microsoft 365,进行安全更新、没有新功能,但实际上新的函数可以用,界面上也有一些不知道是什么东西的家长进怎么理解?我非常有可能相信,两个强大的Power数据处理是为他们故意屏蔽掉的,但这只是我的猜测,或许真的是我的电脑出了状况才导致那两个不能用呢。我需要回家好好验证一下。功能不能用,我把错误代码拿去搜索,得出的结果很少,而且通常都是Power BI的。数据合并这种东西如果不用Power Query,就自己写个VBA。至于Power Pivot的思路,应该能在其它更强大的数据分析软件里用,因为这可是Office 2010就可以插件使用的功能啊!

微软的作死,只会让他死得更快!

2020-08
21

懒精自动化

By xrspook @ 8:24:58 归类于: 烂日记

对别人来说,做某件事就是从系统上读取某些数字,抄在纸上,然后不断地敲计算器,得出某些数据,然后再按照某些格式整理成别人要的样子。之前我也是这么干的,但是我觉得,这实在是太累人了。我要做的不仅仅是读取系统上的数据,我做的是读取我自己的数据,然后跟系统上的做比对。做的东西必须是最小单位。明细对好了,后面的汇总是水到渠成的事。我觉得,汇总数据这种事,规则我定下来,结果应该是自动生成的,管好我的明细数据,汇总数据就不会出乱子。汇总数据出来了以后,还得按照某些格式整出来,这其实是一个填坑的过程,但是应该怎么填呢?逻辑的思路就是,如果有数据就展示出去,如果没有数据,就为空。这是主要思路,但某些细节问题其实也是需要考虑的,比如说数据与数据之间的标点符号:逗号,分号,句号,冒号等等。没有数据的时候,那个地方是空,但是在连接两个数据之间,有些人默认带入了标点符号,于是就会出现一个神经质的状态。数据与数据之间有一大堆莫名其妙的标点符号,正常情况下,那些东西都不应该存在。按照人的思路,那些东西根本不可能存在,但为什么有那些东西呢?显然是那个做判定的人没有把标点符号写到判定里。什么时候应该逗号,什么时候应该句号,当没办法判定哪个才是最后一个的时候,标点符号怎么办?其实真的不能判定吗?肯定是可以的,当某个元素的序号等于这个数组的最后一位,显然那个东西就是最后一个了。在Excel的世界里。尤其是不考虑VBA,只考虑前台的公式,这个逗号的判定在我现在的能力范围之内,的确有点难,所以遇到这种情况,我干脆每个数据给它一行,每行数据的末尾,不加任何标点符号。

昨天我突然意识到,Excel的公式编写是可以插入空格和回车的,当然,空格和回车要加在恰当的地方。比如加在数据连接的地方,不要加在某个函数里。又或者其实加在某个函数里面也是可以的,但是如果你在表达字符串的地方加入了很多空格,最终的结果肯定会哭。也正是因为回车的加入,让我的公式看上去更整洁了,我不用纠结不断地眼睛急转弯。复制粘贴也变得相当的容易。的确复制粘贴很简单,但是粘贴得多了,每一行的数据框架都是一样,只是修改了里面的部分内容就会让我自然而然想到使用循环。如果Excel的公式里有for或者while这种循环该多爽。换句话说,为什么就不能有循环呢?之所以这样,大概是因为Excel,没想过你要么在某个单元格里面展示一堆合并起来的字符串。这种字符串的合并,理论上更应该出现在Word或者普通的txt里面。

我首先写了个索引,然后写了个数据,接着对数据进行数据透视表,最后写了个很长的公式。根据数据透视表和数据透视表以外的一组数据,生成了两段字符串。字符串里面所有数字的格式全部都严格按照我需要的模样输出。这样做的确实现了我想要的功能,但我感觉还是有点麻烦,如果写个VBA,加入数组,这些东西很容易就能表达出来。从前前台看来,也会干净利落很多,但问题是,加入VBA的话。Excel的保存格式就得改变。对小白来说,VBA是个洪水猛兽。他们不知道该不该允许宏这个东西。如果我是他们,我不了解这个东西。这个东西的确有安全隐患,我肯定不会主动打开,即便我知道这个东西可能很强大。

开源的东西用起来得花一些步骤。组装好的东西用起来的确用很爽,但问题是,万一里面有猫腻呢?归根到底,还是自给自足、自娱自乐比较好。

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