2019-09
10

Excel内部套打

By xrspook @ 11:03:09 归类于:烂日记

我花了一个下午的时间,做了一件Excel内部套打,实际上这个功能很早以前我就已经可以用Word和Excel联合实现。出来的效果很完美,问题只是核心数据要贴在Excel,打开Word的时候,必须点一个对新手来说可能不知道该怎么办的窗口。如果那是一大堆的数据的话,这样的操作绝对值得,但如果那只是仅仅一两条数据,这样的操作貌似比较麻烦。所以昨天我就在Excel里面做了个模板,然后用定位的方式在文件内部实现套打。这样的好处是只需要打开一个文件,就能实现打印而且不会弹出一些让新手很困惑的窗口。很多函数都可以实现这个功能,但最终我选择的是一个定位函数,虽然那是一个动态函数。但因为我要实现的东西很简单,提取的东西不会超过10条结果,我需要进行筛选的总表里面也没有成千上万的东西需要纠结,所以我无需考虑运行效率这个问题。之所以选择INDIRECT这个函数,是因为参数比较少,而且在我定义函数的时候我可以轻松地借用到原数据的列标签,不需要思考一下我要怎么把那个转化为数字。

打印数据的控制可以通过手动输入,也可以通过我随手拉出来的一个控件。控件的好处是可以一个一个地向上增加或减少,这样漏掉的几率就会比较低。当然,如果要暴力一点的话,可以直接在单元格里面输入任何你想输入的东西。当然那样的话就得不到应该有的效果。在不用VBA的前提下,我觉得这样应该实现不了批量数据生成。如果我在现在这个东西的基础上再加一些VBA语句,应该可以实现批量打印,而且难度不算太大。这样的话我就可以用它完全取代Word和Excel黄金搭档的邮件合并功能。虽然我现在做出来的这个小表格很直白简单,用起来方便,但入门的门槛不低。纯粹只是套用,其实没什么难度,但要把整套东西设计出来,还是得花一定的时间。相对而言,相比之下,Word和Excel的邮件合并好用得多。之所以那么好用,是因为一些我需要在Excel里DIY控件实现的功能他们有内置的控件。之所以我想到要加一个控件控制单元格步长,就是受到他们的影响,当然我也可以设置直接跳转到第一条数据和最后一条数据。之所以想到这个也是因为我看到他们可以实现。要如何在Excel里实现批量打印,我想出来的方法不是在一个工作表里面生成一大堆表格,而是一个表格生成一个工作表。打印的时候,我可以筛选有特定字符的工作表批量打印。其实在Word里面也是这么控制的。我之所以想到要生成一大堆工作表是因为我不知道如何在一个工作表里面连续生成N个格式一样的表格,这些表格在打印的时候必须刚好1表1页。要控制好这个,Word里在表格的后面插一个分页符就好,但是Excel里面貌似没有这个东西。当然如果我把表格的高度刚好就是一页纸的话,就应该能达到我想要的效果,但这该如何做到呢?暂时我还没想通。

一个下午就只干一件事,貌似工作效率有点低,但起码我做成了这件事。接下来我将继续在这个问题上动动脑筋研究出我想要的效果。

2019-07
16

看书自学,提升技能

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

第一次接触O’REILLY的head first系列的Java书本。已经不记得那本书我是从哪里买的了。当时我想学Java,网上的教程说那本书很不错,于是我就买回来了。不知道是那本书太高端了,还是我太低端,一开始的时候挺爽,但看着看着我就觉得自己跟不上那个进度。虽然我已经觉得自己非常努力,但是那些叫我动脑筋的练习题我几乎回答不出来。如果不看答案,那是想到天荒地老估计都得不出答案。看那本书需要具备相当优秀的逻辑水平,现在回想起来,那不过是用判断和循环不断搭配而已。在冥思苦想用Excel VBA出了一些小程序满足我的日常需要以后,现在倒过来看,觉得head,first那本书的Java题目,的确有难度,但却不至于让我落入到当年那种困苦的程度。当年因为觉得自己实在无药可救,所以我换了一本入门的书。因为第一本高端,换的那本低端一点,所以看第二本的时候我有种豁然开朗的感觉,前面的部分几乎可以一目十行地飞快前进。但到达一定程度,我就没看下去了,因为当时刚好碰上我换了份工作,所以很多时间需要用在重新上手上,我再没有那么多时间去继续自己的兴趣了。因为工作迫切需要我提升Excel技能。于是Java那本低端一点的书我没继续看下去,取而代之我开始Excel三剑客,它们分别是数据透视表,函数,以及VBA。

我首先看完的是数据透视表,函数看了一部分,VBA现在算是看完了。个人感觉数据透视表那本是我看得最酣畅淋漓的,我从中学到了很多,但具体你要我一个部分一个部分介绍,我说不出来,但是你给我份工作,我可以融会贯通。我买回来的那套书基于的是Excel 2013,当时我是用2003边看边实操,很多功能都做不到。现在我用的是Office 365,对应的版本应该是Excel 2019,2019和2013比起来,又多了一些高端的功能,从前那些只是试验性质的东西现在已经成为了2019的标配。在数据透视表方面,的确可以使用一些高端的功能了,但是要完成我的日常工作,通常来说,用2003的层次就可以了。接下来我看的那本是Excel的函数公式,这本书我只看的很少的一部分,因为我觉得与其说那本书是用来看的,不如说那本书是一本手册,是当你有困惑的时候去查阅的。因为里面的内容实在太多。普通人也不可能把所有函数的应用都了如指掌。对我来说,处理数据我最熟手的招数是数据透视表。函数部分有一些我知道它能实现某些功能,但具体要怎么折腾,需要试验一下。我觉得函数和数据透视表虽然有些东西二者都可以实现,但在数据汇总计算方面,数据透视表显然人性化很多。但是数据透视表很难进行数据进行提取,又或者把无序的东西归一。函数高手估计可以实现所有数据透视表的功能。如果把函数比作英语等级考试,估计能做到那个的人已经到达专八以上了,而对一般人来说,四级已经不容易。我觉得自己在函数方面,不过是中等的四级水平而已,而且是还没到可以参加口语考试的那种。之所以我没有非常努力地去学习函数,是因为暂时我还没有需要非常努力的动力。

还有很多东西很好玩,我想接触,我想学习。我觉得在外人眼里,貌似不成章法却能很好解决问题的,是最高的境界。那估计就是《笑傲江湖》里,独孤九剑的精髓——无招胜有招,但实际上那又不是真正的无招,因为招数已经和身体融为一体,到达了随心所欲的层次。

2019-07
9

牛逼的数组

By xrspook @ 10:36:42 归类于:烂日记

我把《别怕,Excel VBA其实很简单》这本书看完以后我才发现自己略略明白到了数组的牛逼之处。在书本的某些章节提到过数组,但没有很详细地展开。毕竟在Excel的VBA里,即便你不懂得数组,你也依然可以得到你想要的效果,只不过用数组跟用其它方式对比,其它方式的效率会差了一大截而已。直到我把这本书看到倒数第几页,他们举例子的时候,我才恍然大悟。看书的时候我并不觉得不用数组有什么问题,毕竟那些思路都是很明白的。暂时来说,我要解决那些问题在高手的眼里不过是小菜一碟而已,只不过对我这个新手来说,必须得费九牛二虎之力才能解决而已。

如果只是用Excel的VBA做一些格式的转换,尤其门面工程的格式转换,根本用不着数组这种高端东西,但是,如果要对批量的数据进行处理,比如说筛选或者转换,数组的效率要比频繁地操作单元格高效很多。当然,如果你的处理量很少,比如说,数据在一页纸之内,用不用数组都无所谓,反正都是秒杀出结果,但是,如果你要处理的是几十个工作表里面的几百行数据。用数组处理就意味着如果你的程序得当,可以秒杀得到结果。我这里指的秒杀,是答案会在0.5秒之内展示出来。通常来说,人的反应时间是0.2-0.3秒,0.1秒的差别几乎看不出来。而之所以我有这个猜测,是因为我做过字幕时间轴的调整。如果字幕的出现和消失完全按照音频音频来,你会觉得那人开始说话了,但是还没有字幕,或者那人的话还没说完字幕就没了,或者字幕消失得很着急,所以,通常来说,在正常语速的情况下,字幕要比音频早起码0.15秒出现,结束时间则要控制在音频结束后0.3秒左右。结束时间到底要延迟多少主要看说话人的语速,如果那是很干脆的一个词,又或者那个人说话非常快,那么这个结束时间得控制到0.15秒以内,但如果那个人说话很慢,又或者他磨磨蹭蹭,每句话之间都要间隔一段时间,但实际上那句话是连续的,那段字幕的结束时间可能要跟下一句话的开始时间连上,0.5秒的延迟很正常。某些情况下,你甚至会觉得0.5秒太少。如果Excel通过数组完成一个转换用时不到0.5秒,对普通人来说,那是稍微顿一下的功夫而已。而昨天,我写的那些运用了数组的汇总程序在处理80多个工作表300多条数据的时候,如果要加上最后的删除空白行,尚且用时不到0.4秒,如果去掉删除空白行的功能,那么总用时将只需要0.2秒不到。0.2秒是什么概念?那就几乎等于鼠标按下去,你觉得结果马上就出来了。这就是我想要的秒杀结果。。

在Excel VBA里使用数组,我上个星期下半段才开始研究。没人强迫我必须得这么做,但是我觉得这非常有趣。对高手来说,这根本不算什么,但对我来说我觉得这是个非常牛逼的效果。其实能用Excel的VBA把那些数据自动汇总出来已经很可以了,一两秒钟的运算时间其实也不算很多,但是,当我发现了数组可以让这个功能进化很多的时候,我兴奋不已。其实,做的时候我完全没料到数组居然可以这么高效,虽然我知道它的用时肯定要比一般的方法快很多,一开始我以为可以达到10倍以上,但实际上还没到那个程度,不过这已经很鼓舞人了。

还是学生,要去考试的时候,我还是没有很好的掌握数组,但现在我对那个东西算是有点感觉了。

2019-07
8

RUN NOTE

By xrspook @ 22:45:12 归类于:RUN NOTE

星期一 2019-07-08 20:55
平均心率111,最高心率131,平均配速548,原地跳。我明明可以早点开始的,但心里牵挂着要把库存汇总的方式以数组的方式表达出来,于是就先去做那个了。我明明知道那个东西不是十几分钟就能折腾出来,但我还是毅然开始,结果呢,投进去了1个多小时。按照正常人的思路,我应该白天有空的时候去折腾,但显然我这个急性子没办法控制住强烈欲望的冲动。#xrspook未行够#

2019-06
25

VBA入门毕业

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

做天我把《别怕,Excel VBA其实很简单》看完了。感觉居然是原来这就结束了,但实际上,我好像有些东西还没掌握,所以我估计要把那本书再看一遍。虽然看这本书的时候我已经是一边看一边写。因为那些公式术语之类的,必须记下来,然后才有后面的运用。但虽然自感我已经写了很多,但是有可能因为看书太断断续续,所以实际上有些东西我还是没有记住。把书看到最后的时候我才发现原来在跟Excel数据库玩游戏的时候利用好数组非常重要。那本书最后那个例子是在1万个单元格里面输入1万个数字。原理很简单,实现方式很直白,但是用数组的方式录入比用常规的单元格录入效率相差一大截。数组录入的速度是常规方式的20倍,当然这只是一个大概估算,但显然,两种方式的效率差别很大。反观我自己写的那些脚本,我完全没有考虑过用数组。因为我没想过可以怎么使用数组。使用数组意味着你必须对界限这种东西非常清楚,但其实在不用数组的时候,我也是需要明确界限。如果我使用了数组,或许可以把之前需要用一两秒才运行出来的脚本进化为电光火石眨眼间之内结束战斗。

的确,昨天看到那个对比以后,我回去审视自己的脚本,但暂时来说,我还没想到可以怎么用数据去写。所以,我要把那本书讲到有关数组的地方再读一读。

写了这么久的VBA,但是每当要我准确地说出单元格位置的时候,我总要思考半天。因为用Range和Cell的时候,二者的坐标轴顺序刚好是相反的。那两个经常把我搞糊涂,所以当数组也插一脚的时候,我就更迷糊了,这三者的关系我必须搞清楚。这是做其它一切的基础。

还记得当年学C语言的时候,数组对我来说就是一个难点,貌似我一直都没有怎么想通透那个东西。在Excel里,有时最简单的一维数组可能就够了,通常来说二维能解决大部分问题,但说不准什么时候需要用到更多的维度。当年之所以把我搞迷糊,是因为那些维度总是让我摸不着边。我觉得三维已经是我的极限,更多的维度该如何表达我小小的脑袋思考不出来。现在我觉得其实我根本不用想象出具体的空间结构是如何的,我明白那种层次的关系也就可以了。

Excel这东西无非是玩好几个,文件夹基本上已经算是最大的范围,接下来是工作簿、工作表、单元格,以及单元格里面的具体东西,Excel就是控制好这些东西。VBA之所以牛逼,是因为它可以把很多重复性的东西批量完成,但是你要把命令写到位,那个软件才会以你设想的方式运行,并得出你想要的结果。玩好这个东西是为了我们以后做具体事情的时候不必那么埋头苦干地重复劳动。但在此之前,我们必须理清我们干那件事所需要的全部逻辑。就像一个高级技术人员,他或许不需要做一些非常实际的工作,但那些最基层的实际工作,他必须全部都吃透明白。

现在我才刚入门而已,从入门到基本上手是一个漫长的过程,就更加不用说往后更高层次的灵活运用了。

Page 1 of 1212345678»...Last »
COPYRIGHT @ 我的天 | Theme by xrspook | Power by WordPress | Valid XHTML 1.1 and CSS 3 Go to top