普通视图

用这三货做数据查询

2025年11月22日 08:02

不知道从什么时候开始,我就迷上了数据查询。

一开始只是想实现某个功能,后来发现原来实现同样东西,我用不同方法都可以做到。哪个方法更直观简便一些?我感觉Excel VBA的SQL,Power Query以及Python相比,就数据处理的方便性来说Python是碾压的,但我没有发现Python的巨大优势。问题可能在我交给Python处理的数据太少了,跟其它两个相比体现不出Python的高效。在控制Excel单元格格式方面,Python天生不如office自家的VBA。为什么我会把PQ跟VBA跟Python相比呢?是因为从Office 2019开始,PQ就算是内置的一个功能。VBA里面的SQL天生有缺陷,因为跟真正的数据库SQL相比,那就是个阉割版,有些你觉得明明可以实现的东西,在Excel VBA里好像就真没有直接的解决方案,为什么居然会这样呢?

到现在为止,我依然没有发现Excel VBA的SQL有直接的文本拼接功能。其它数据库的SQL里,那就是一个很简单的函数。Excel VBA的SQL在合并其他数据方面没问题,但一旦遇到需要进行文本拼接。我感觉除非在查询结束以后再做一个字符串的字典,否则无解。或许你会说其实我也可以直接在Excel的函数层面做这个拼接,因为用textjoin函数实际上是能实现那个功能的,但关键是如果数据比较多,既然我都在VBA里完成前面的所有,为什么最后的功能又要回归到函数呢?二者的运算速度不是一个层次的。每当我遇到文本拼接,我知道SQL是撞墙的,所以我就直接想到PQ。

PQ可以做数据分组,做文本拼接直接在高级编辑器里修改就能实现,但关键是实际上可以不用PQ,我不想用那个玩意,使用可能会有点慢还行,如果要进入到里面编写代码,那个小窗口字体无法放大,简直要逼死我这种老花。更作死的是,很多时候提醒我错误,但错误根本不发生在提醒的那个地方,不断的嵌套括号、逗号、又或者不小心带入的中文标点符号都会导致错误,找茬的过程让人挺绝望。我觉得,我还是喜欢在VBA里用SQL,其实无非就是判断加循环。在PQ里我总觉得有些很容易就能做到的事情,但是它非得用一些看上去很复杂的函数去实现。比如要根据A字段去决定B字段的数值是正数还是负数,在SQL里,一句很简单的iif就能实现,但在PQ里,你还得新建一个条件列,把条件写进去,接着把原来那个数值列删掉,再把条件列的名称改成数值列。当然你也可以直接使用replacevalue函数,但据说那个东西的执行效率反倒不如新增一列再删除一列。PQ里的函数非常多,嵌套用起来的方法更是让你眼花缭乱,也正是因为那些杂七杂八的东西太多了,反而让我觉得不如SQL简单干脆。让我很绝望的是,Access的SQL可以直接文本拼接,但Excel里的就不行,虽然二者是同一个版本的office。

当我在一个问题上钻研得越深,我就越能理解到高中时候,我的数学老师说学习数学的几个境界:不懂不会,会而不对,对而不全,全而不好。

实战

2025年11月20日 08:32

对系统的导出数据进行了两种形式的格式化以后,接下来我要把其中一种格式化的VBA交给同事,告诉她该怎么用。在我印象之中,每天他们报送数据的时候用的电脑装的是office软件。我这里说的报送,意思是要得出某个文字转化版本的那些人。单位是很奇怪的存在。联想电脑附带的软件是office家庭学生版的正版,另外一些系统不知道为什么一开始的时候就被格式化了,被某些人装了windows系统之后装过各种奇奇怪怪的软件,最终可能定下来的是一个不知道什么版本的wps。也不知道从哪一年开始单位就有批量买的wps,但因为我是office软件的超级粉丝,wps根本无法满足我的要求。因为wps没办法做Power三剑客。Power Pivot还好一点,我用得比较少,但是如果要对一些数据进行文本合并,SQL没那么容易,需要用字典搭配字符拼接才能实现。在那种情况下,我首选通过Power Query合并。当然用Python也能做到,但是如果某个人的电脑里面装的是office,又在2019以后,PQ内置功能,但如果要别人运行Python,还需要安装,还需要配置环境。

我没想到的是那个同事居然先拿回办公室试一下,她办公室电脑用的是wps。wps我猜她安装的版本是32位,因为我的VBA查询用了ADO+SQL,这两个东西意味着不是所有的wps都可以直接执行。即便单位买的那个wps的版本能运行宏,但是宏里面又用了SQL,这个估计就很悬,最终能不能用,可能也可以但估计得折腾一番。幸好她没有挣扎,直接拿着那个VBA文件就直冲工作地点。她第一次在办公室截图回来告诉说wps无法运行宏的时候我就下去找人,结果没找到,原来她已经直接去工作地点了。过了一阵她又跟我说运行不了,反馈出来的那个信息就是VBA脚本没有找到恰当的源文件。

我第一个反应是她导出的文件会不会文件名有一些空格没有留意到,于是我马上赶往那个地方,结果发现她的确导出了文件,但是她发现导出文件的名字跟我之前跟她说的不一样,所以她重命名了。重命名没有任何的意义,因为导出的文件名不一样,基本可以确定她导出的位置不对。当我问她是在哪里导出的时候,她自己估计也马上发现了问题所在,果然就是因为她导出的文件导出错了。

工作地点的那台电脑一次就通过VBA考验。旁边的那台电脑是一台新的联想,预装office2021家庭学生版,但是那台电脑打开VBA之后就会有一条红色的提示。正常情况下,理论上那应该是一个黄色的提醒,按确定或者允许之类就可以了,但红色的提示好像根本没办法按掉。只要按那条红色的东西,就会弹出一个网页,告诉你一些细节。一开始我没有留意,我不管那条红色直接去选项那里设置允许宏,但即便这样,这个文件也依然运行不了。我就不得不去仔细看红色那条提示对应的那个网页。发现是因为因为出于某些安全原因,系统锁定了这个带宏的文件,需要在文件那里按右键点击属性,然后再点击某个解除按钮,之后才能运行那个文件的宏,打开文件才会出现黄色的提示。所以到底是什么安全设置让那个电脑带宏的文件出现那条红色的提示呢?起码在之前我接触过的所有office里未曾遇到过。

对用宏文件的人来说,宏可能有风险,但是对我来说,宏是我自己写的,我不可能不放心。

❌