2024-05
18

完成修正方案

By xrspook @ 9:50:33 归类于: 烂日记

周四下午,在接近下班之前打了个电话,知道了某个表格要怎么填写以后,我就开始修正自己的VBA方案。与其说是修正VBA方案,不如说是把VBA的方案更进一步,在那个方案上面增加内容。其实最需要增加的就只是一个仓号的拼接。要获取那个数据我有非常成熟的方案,因为去年夏天已经研究得足够透彻。虽然这样,但实际上实施起来的时候还是花了一点时间,尤其是要在VBA里把SQL的数据输出到数组,然后经过几番折腾以后,再输出到单元格。如果要我用Power Query实现这个功能,根本不用费脑子,马上就能实现,但是既然我那个 Excel用的是VBA,我也就懒得混合使用了。原来的内容没有改变,增加了两个数据项目,一个是仓号合并,另外的一个是单仓变化的的二维展示。二维展示实际上也是有一套成熟方案的,也是去年夏天,我已经把最困难的部分全部都研究透了,所以现在只是把那套方案里面的东西有选择性地挑选使用。

VBA方案实现了以后,我又在另外一个Power Query方案增加输出我需要的数据,然后我就没有继续干下去了,因为我不知道如果我要更进一步大范围改动之前的PQ方案的时候,我得花多少时间。当我觉得我必须得暂停结束的时候,已经是晚上接近9点。需要大改动的PQ方案,我需要实现一个累加计算。那个东西我是用来计算库存的。首先我会获得一个期初库存,然后得到一些每日的变化数,然后按照日期排序的方式,把它们累加起来。这是最关键的步骤。在VBA里面,如果要通过SQL的方式实现这个比较麻烦,但实际上在经典的SQL里有比较直接的解决方案,但是VBA的SQL没办法做到。PQ肯定有自己的方法实现这种累加,但是也没有非常直接的方案,也是通过多层套叠的方式试实现。就逻辑来说,实际上操作的步骤跟在VBA里的实现没差多少。回到宿舍以后,当我运动完毕,在洗澡之前,我稍微在微信上搜索了一下PQ的累加计算解决方案,结果发现是有的。看了一下代码以后,我觉得那是完全可行的,所以基本上我就确定这肯定没问题。打通了最后一个累加计算的问题,我确定只要我把需要的数据都准备到位,我就能得到我最终想要的表达效果。对一般人来说,在每天都有多个变化数的前前提下,每天都计算采购成本,简直是无尽的噩梦,但是其实只要理清思路,搞清楚到底是怎么个来龙去脉以后把这些步骤固化下来。只要把每天的数据都整理清楚,自然而然就能自动得到每天的采购成本。数据是出来了,花了九牛二虎之力,但我依然要问,为什么要逼着我们提供这些数据呢?因为实际上对绝大多数人而言,没办法纠结到这个程度,但即便我纠结到了这个程度,得出来的数据还是会有那么一点误差,虽然那些误差可能你根本看不到。

花了不到一天的时间,就重新整理出VBA跟PQ,我感觉成就感满满。

2024-05
10

进一步加权平均

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

之前说到了Power Query方案不完美,第2天我又更进了一步,真的老老实实做了两层加权平均。效果挺稳定,比之前那个还稳定,因为之前那个方案查询数据是跨表的方式获取,PQ可以跨表查询数据,但在数据转换的时候,可能会遇到一些问题,导致刷新通过不了,于是你得重新刷新,如果你的表格很多,会让你非常的烦恼。我这一次,我采用的方案是用VBA跨表抓取数据,相对于PQ的跨表来说,VBA的跨表更稳定。在不进行文本拼接的前提下,我对VBA里的SQL操作感觉是要比PQ熟练一些。 VBA抓取的数据很快,不会有卡顿的烦恼,除非VBA直接卡死了。VBA卡死的解决方案就是重新拿出之前备份好的那个重新刷。又或者是卡死了之后再弹出Excel,然后你选择把那个东西恢复,这两种通常都能解决问题。如果依然卡死,那么估计你就得重启电脑了,如果重启电脑还是不行,那就换一台电脑吧。前几个月基本上我每天又或者是每隔几天就会遇到VBA卡死,但近段时间又好像没有再遇到,我严重怀疑这跟win10的系统更新有关,尤其是框架的更新。

用VBA抓取数据,然后把那复制到要进行PQ处理的工作簿里,把需要手工填写的东西补上去,然后PQ就可以很快乐地在工作簿内弯曲折叠生成我想要的样式。如果说有什么事让我觉得我非得在PQ里而不想用VBA解决的,大概就只有文本拼接。在PQ、Python又或者真正的SQL里进行文本拼接都是很大路的货色,但是在Excel的SQL里,你就是没有一个很方便的方式实现,你只能把它输出到数组,然后再折腾半天。老领导要求的表格里,总少不了文本拼接。有可能是拼仓号的,有可能是拼品种的,有可能是拼客户的,也有可能是拼各种组合的。如果要拼这么多的东西,我首先想到的就是在PQ里做一个分组。PQ也是一个很神奇的存在,分组的时候就没有办法给我选择文本聚合,其实文本的聚合的方式就是文本拼接。所以每次你都是得随便选一个求和,然后在高级编辑器里面把求和改成文本拼接。

PQ经常让我绕来绕去绕不出去的还有if的使用。在其它编程语言下,括号逗号解决问题,但是M语言里if这些东西都没有。所以当我用常规的思路去进行我的条件设定的时候怎么都不对,最后我不得不使用自动生成的方式,接着才发现原来自己语法错误。

在PQ里使用加权平均,思路来说很简单,就是数量乘以单价求和后再除以数量之和。如果要分步操作,在分组之前要算出一个总价,分组以后在高级编辑器里面修改公式,用总价除以总数量,但实际上也有不需要分两步的方式,但是需要用到list.zip。其实我对PQ并不算太熟悉,在没有查找加权平均的方案之前,我试过用公式套叠,结果发现不行,在list.sum里面选择两个列,然后相乘实际上是不可以的。list.zip那种方式,让我想起了Python里面的元组操作。要完全搞懂PQ,学习成本非常高,他们的各种玩法套叠简直是到了那种让人眼花缭乱的程度,当然,其实Power Pivot,也就是DAX语言要玩得高深,同样很烧脑。对我这种初级玩家,主要是用来拼接文本的人来说,基本功能能顺利实现也就可以了。最终生成的数据,有一些地方肯定用了加权平均,我手动校核了一下,发现很OK,没有问题,但是我还没有测试过一种先单仓做平均,然后再多仓做平均的数据。这种数据肯定会有,但是今年的前几个月未必一定发生过。

手上的工具多了,用的时候得想想用那个最合适,又或者,联合使用也是个妙招。

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-01
14

家里的VBA也出状况了

By xrspook @ 10:01:56 归类于: 烂日记

说晚上回家跟往常一样工作,却发现某个VBA排序的功能不知道为什么选不到了,那个VBA里面我设定了好几个宏。使用的时候我打开一个新的文件,然后调用某个VBA文件里的某个宏实现某种功能,现在的情况是某个VBA文件里面的某个宏我选不到了,之前从来没有发生过这么屌丝的事情。不仅仅是alt+F8的时候选不到了,当我当alt+F11进入VBA脚本编辑界面的时候,某些宏居然也点不进去了,模块也无法选定。那个时候我真的是非常无语,为什么居然会发生这种事呢?为什么有一些宏就可以,另外一些就不可以?幸好排序的那个功能即便无法用宏去实现,我依然可以轻易手动完成,但是这么诡异的事情实在让我不知道该怎么办。

我完成了那天的工作以后,我首先把office升级了,升级到了最高的版本,同时也把win10的系统进行了更新。所有东西升级完还没有重启之前,我测试那个之前诡异的VBA文件。好像情况又不像我工作的时候遇到的那么糟糕,但是情况时好时坏,有时能选择得到,有时选择不到。当我彻底更新的重启再次进入系统以后,发现那个VBA好了,彻底的好了,但是有时也会出现一点点鼠标转圈的卡顿。我的VBA都还没有进行任何的操作,为什么就卡顿了呢?

周六晚上我又进行一些很常规的操作的时候发现VBA的某些宏又出现了我办公室那台电脑上曾经困扰我的事情。会直接跳出来说,某些copy的功能不可用,你可以进行调试或者结束。这种东西是完全没有道理的,因为之前我都一直还在用着那个文件,没有进行任何的修改。如果说宏的某些问题跟跨表调用数据有关,但在这个出了copy问题的宏里根本就没有进行这种高端的操作。弹窗的报错是因为文件某个另存为的功能无法实现。为什么会有如此低端的问题呢?我隐约记得办公室的那台电脑出现这个问题的时候,我把电脑重启,然后就好了,什么都没有修改。

所以这到底是什么问题导致出这种错误呢?我严重怀疑周五晚上我遇到的那种事情,是因为win10正在后台悄悄地进行升级。首先是下载文件,会占用我大量的CPU和内存,因为家里这台电脑是2012年组装的,已经非常年迈了,i3二系的CPU进行日常的操作,上个网之类完全没有问题,但如果win10要进行大量的资料下载,同时也要进行那些东西的安装,我说不准会不会就会产生问题。理论上要不要升级,什么时候升级都应该由我来决定,但实际上win10在升级这个问题上,总是悄悄地在后台自动进行,当它提醒我的时候,通常下载和安装都已经完成,最后就只是让我决定什么时候重启。

单位办公室那台电脑出现那个问题的时候,我也觉得应该跟windows或者office的某些更新有关,但是我遇到问题的那个时间跟升级的那个时间相差挺远,没有找到接近的,所以我就没有继续在那里纠结。单位办公室那台电脑,VBA出不出状况,很难说情况,时好时坏,可能一天下来都没事,但也有可能一天会撞上好几回。有些时候把同样的文件复制过去,再次使用就没有问题了,有些时候得重启一下就好了。除了这两款以外,我实在找不出还有什么解决方案,但幸好这两款还暂时还能应付的过去。家里这台电脑之前我一直没有遇到过VBA相关的问题,周五晚上是我遇到的第一次,周六马上遇到了第二次。

Windows用了那么多年,VBA也用了那么多年,但微软居然会在这些如此普通的事件上面犯错误,所以如果我只是需要求稳定,我还可以相信谁呢?

2023-12
20

坎坷的37岁

By xrspook @ 8:40:53 归类于: 烂日记

38岁生日的这一天,我写一下37岁的回顾。

37岁好像从头到尾都很难熬,因为生日没几天我就新冠了。接下来就是等过年,然后是抓紧时间去中山一院,运气好,有床位,赶紧进去住院,把巧囊切了。拿着第1次在中山一院做的阴超报告,上面写着“巧克力囊肿?”的时候,我赶紧搜索那个东西,原来那个玩意是会复发的。麻涌医院的医生说,得赶紧到医院切掉,因为那个东西已经很大了,一旦发生扭转,后果不堪设想。当我去中山一院再做了一个B超,确诊了那个东西以后,我立马就觉得这是要切掉的,但是住院了,教授第1次查房的时候,他问了一句之前有没有试过中医,我才意识到可能虽然我这个东西不小,但依然有可能通过中药调理把那慢慢缩小。既然我已经住院了,既然我已经达到了手术指征,所以手术继续。让我没有意识到的是,术后的那些东西远远比手术本身恐怖。比如手术之后到我终于感觉自己是个正常人,花了接近一个月的时间。虽然一周之后去拆线的时候,我已经能比较正常地活动,但是因为一直的腹胀,让我痛苦不堪,益生菌救了我一命。住院的花费我以为很多,尤其是一次又一次地叫我交钱的时候,但实际上最后把绝大多数的钱都退还给我。但是后续六针的诺雷得和莉芙敏,以及在之后长达两年的唯散宁和散结镇痛胶囊,直接让我无语了。打在肚皮的缓释针诺雷得,一针的价格就等于住院一个星期自付的金额。所以诺雷得没打几次,东莞的异地就医门诊统筹就用光了,但是到了2023年的最后一个季度,又出了一个新的政策。某些药虽然在门诊使用,但是却排除在门诊的统筹封顶线之外,诺雷得是其中之一。

每个月都得去找医生,2023年我去中山一院看医生的频率比我过去10年累加起来还要多。

这个与巧囊相关的东西,除了打针吃药以外,还顺带给了我一些之前从未有过的体验。比如不断地做梦,比如潮热,比如非常易醒,比如躺在床上,脑子里全都是些负面的东西。大概睡眠不好的人没办法让自己拒绝掉那些有与抑郁有关的念头。对我来说,这都可以说得过去,因为诺雷得的影响,因为那个东西直接让雌激素不分泌了,所以我就进入了一个假绝经期,后来,莉芙敏拯救了我,但莉芙敏是一个每个月500多块钱全自费的进口药。当时医生没有问我能不能接受这个价格。后来我觉得莉芙敏这个东西除了贵没什么不好。因为起码在吃莉芙敏的时候,我没有经历过吃唯散宁时期的那种莫名其妙非常轻易便秘。

除了巧囊相关,我也有继续自己平时的运动,比如动感单车,比如投篮,但是跑步这种事直到最后一个季度才开始。因为打诺雷得的时候,我不知道是我心理作用还是真的那样。我甚至做不了卷腹,下腹部是那种无法发力的状态。不是因为肌肉太弱,而是因为强行那样做会痛。

在没有被巧囊折磨的死去活来的时候,我自学了一些东西,写了一些VBA的脚本,这也是我2023年让我觉得最有成就感的部分,但是2023年的最后一个月,某一天VBA脚本出现了毛病。那是一些根本说不准为什么会出现的毛病。反正只要弹出来的窗口,每一次都一个花样。经过纠结和讨论,我觉得那不是我的问题,那有可能是Excel的问题,是不同版本office的问题,也有可能是不同版本windows的问题,但既然这个东西出现了,我就不能逃避,但是问题的出现又毫无章法,根本没办法用普通debug的过程解决。

希望38岁以后的我,再也没有生理上的烦恼,也不会遇到太多根本说不准什么原因的微软系统问题。

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