VBA分享专栏精进ExcelVBA码码

Excel VBA之函数篇-3.8上万条数据按照季度统计?季度是

2021-01-23  本文已影响0人  Excel和VBA

前景提要

今天周末,心里一百个不愿意,但是还是要起床上班,在这里羡慕下周末双休的童鞋,然后周末并不会太忙,也没什么事情,一般情况下,周末领导也不会出现的,所以我忙完工作之后,就开始看视频了,可能是太投入,居然领导进来也没有感觉到,被领导抓个正着,当时那叫一个尴尬,领导可能觉得我太闲,分配给我一个任务,让我把公司去年每季度的销售和今年第一季度的销售最下对比,然后把数据分给他,我当场答应了(不是,我好像没得选啊)

转过头来,我忽然发现,季度这个东西我好像只在电视上看新闻报道的时候看到过这个东西,对于一个非财务方面的小白,你让我去做季度分析,我连季度怎么划分都快忘记了,我怎么分析啊,不过忽然想起来,再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分钟就出来结果了。成功的转化成为了我们想要的季度的形式,后面就可以操作数据分析,透视表,图标各种操作了。

image.png

代码解析

因为牵扯到大数据,我们今天这里使用了数组,数组大家可能是第一次接触,他在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

这句代码的作用,就是将我们得到的新的数组一次性填入第二列的操作,大家也可以先做了解,需要的时候也可以直接套用,这里改成我们需要的列就好。

想学习更多关于Excel VBA的知识,可关注我的公众号:Excel和VBA
上一篇下一篇

猜你喜欢

热点阅读