Excel VBA之函数篇-3.8excuse me?按照季度统计?季度是什么东东?前景提要 今天周末,心里一百个不愿意,但是还是要起床上班,在这里羡慕下周末双休的童鞋,然后周末并不会太忙,也没什么事情,一般情况下,周末领导也不会出现的,所以小编忙完工作之后,就开始看视频了,可能是太投入,居然领导进来也没有感觉到,被领导抓个正着,当时那叫一个尴尬,领导可能觉得我太闲,分配给我一个任务,让我把公司去年每季度的销售和今年第一季度的销售最下对比,然后把数据分给他,我当场答应了(不是,我好像没得选啊) 转过头来,我忽然发现,季度这个东西我好像只在电视上看新闻报道的时候看到过这个东西,对于一个非财务方面的小白,你让我去做季度分析,我连季度怎么划分都快忘记了,我怎么分析啊,不过忽然想起来,再VBA中有一个函数好像就是和季度有关的,看来运气不错,有救了。 函数说明 还好自己的机型还算是不错,季度函数还真的是存在的,他就是DatePart(),具体的格式我已经忘记了,毕竟季度这个概念比较少用,我尝试写了下代码,他的格式应该是这样的DatePart("q",date),简单的说,我们只需要提供一个参数,就是第一个参数date,剩下的都是固定搭配,直接套用就可以得到标准的季度分配了,上个代码我们来演示下效果。 上代码 根据小编现在所处的这样的骑虎难下的场景,相信日常工作中,需要用到季度的时候,应该也是在年度总结或者季度总结的时候吧,那个时候面对的肯定不是我们之前举例中的那么几个数字了,肯定是成千上万行数据了,小编现在手上的这个数据。。。我看看60053条数据!这样的数据,如果我们还是继续使用普通的遍历循环的方法的话,效率很大,可能电脑也会卡住的,这里我们使用数组,不要问我为什么,大数据时代,excel首选数组方法,高效! 为了展示测试效果,小编这次虚拟构造的测试数据有1048574行,已经差不多达到了excel 2013的极限了,我们来测试下需要使用多少时间,当然可能也会收到电脑配置的影响,数据多少有一些出入,当不会太大 Sub test() Dim l&, arr, arr1(), i&, k& T1 = Timer l = Cells(Rows.Count, 1).End(xlUp).Row arr = Range(Cells(1, 1), Cells(l, 1)) k = 0 For i = 1 To UBound(arr) k = k + 1 ReDim Preserve arr1(1 To 1, 1 To k) arr1(1, k) = "第" & DatePart("q", arr(i, 1)) & "季度" Next i Range(Cells(1, 2), Cells(l, 2)) = arr1 T = Timer - T1 MsgBox "程序总共耗时 " & T & " 秒" End Sub 结果出来了,一行数据总共用了不到1分钟就出来结果了。成功的转化成为了我们想要的季度的形式,后面就可以操作数据分析,透视表,图标各种操作了。 代码解析 因为牵扯到大数据,我们今天这里使用了数组,数组大家可能是第一次接触,他在excel中经常用来处理大数据的,数组是将内容存储再内存中,以此来提高计算的效率的,所以他的处理速度很快,在大数据时代,大家要开始慢慢的学习去使用数组方法,因为数组牵扯的方法和知识点,比较的多,这里暂时先不涉及,我们后面会细细的铺展开。 T1 = Timer ******* T = Timer - T1 MsgBox "程序总共耗时 " & T & " 秒" 这一段代码主要是用来计算程序执行的时间的,对程序本身并无任何作用,我们可以先忽略,需要的时候也可以直接套用。 l = Cells(Rows.Count, 1).End(xlUp).Row 获取非空单元格的最大下标,这个我们在之前的分享中,已经介绍过了,在实际使用中,我们只需要更改下数字1为对应的行就可以了。 之后就是数组的使用方法了,这里我们先跳过,后面会详细说明,这里我们先记住这种方法,需要的时候直接套用即可,更改下arr所对应的数据源即可。 arr1(1, k) = "第" & DatePart("q", arr(i, 1)) & "季度" 这个就是我们今天的重点了,季度函数的使用,最开始的时候我们已经讲述了使用方法,我们只需要更换第二参数为指定的日期就可以了。 这里我们是将对应的第一行的日期拿过来得到对应的季度的。 Range(Cells(1, 2), Cells(l, 2)) = arr1 这句代码的作用,就是将我们得到的新的数组一次性填入第二列的操作,大家也可以先做了解,需要的时候也可以直接套用,这里改成我们需要的列就好。 总结 ============================================ 今天的分享就先到这里了,个人感觉今天写的有点不太好,可能是因为数组的这个模块,我们还没有分享,暂时无法展开关于数组的说明和讲述,所以中间觉得有点断断续续的,大家看起来可能有些不舒服(怪我),本来是打算介绍下季度函数DatePart()的使用的,正好自己再使用的过程中想到了大数据方面的处理,所以就把数组也带过来了,有点贪多,大家如果本节觉得有点模糊的话,可以选择掌握重点季度函数的用法,其他的先忽略,我后面尽量避免这种问题,抱歉! |
|
来自: Excel和VBA > 《Excel和VBA知识》