Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2529|回复: 9

[已解决]求每月的上、中、下旬的数据平均值,VBA菜鸟跪求大神,感激不尽~!!!

[复制链接]
发表于 2015-5-12 11:25 | 显示全部楼层 |阅读模式
7N}3R36TW1}ZT42{F4032SS.png
如上图所示,以6月为例。1号到10号求平均值,11号到20号求平均值,21号到30号求平均值(因为6月份只有30天,如果是7月的话,下旬就是21号到31号;2月下旬就是21号到28号或29号。),怎么样用VBA编程实现计算啊,跪求大神,感激不尽~!!!
最佳答案
2015-5-12 14:10
这个样子?
发表于 2015-5-12 11:44 | 显示全部楼层
肯定你还有一个结果列表,用公式就可以了。
回复

使用道具 举报

发表于 2015-5-12 12:07 | 显示全部楼层
回复

使用道具 举报

发表于 2015-5-12 14:10 | 显示全部楼层    本楼为最佳答案   
这个样子?

工作簿1.rar

15.89 KB, 下载次数: 13

回复

使用道具 举报

 楼主| 发表于 2015-5-13 15:24 | 显示全部楼层
E-H-P 发表于 2015-5-12 11:44
肯定你还有一个结果列表,用公式就可以了。

没有耶,用公式的话,数据太多了,有2、3万的数据呢
回复

使用道具 举报

 楼主| 发表于 2015-5-13 15:33 | 显示全部楼层
grf1973 发表于 2015-5-12 14:10
这个样子?

恩恩,是的。大神膜拜了,但是我还有一些代码看不懂,求指导。
Sub tt()
    arr = [b2].CurrentRegion
    ReDim brr(1 To UBound(arr) / 10 + 1, 1 To 4)
    Set d = CreateObject("scripting.dictionary")
    For i = 1 To UBound(arr)
        rq = arr(i, 1): sz = arr(i, 3)   '日期,数值
        x = Year(rq) & "年" & Month(rq) & "月"
        dd = Day(rq): y = IIf(dd <= 10, "上旬", IIf(dd <= 20, "中旬", "下旬"))
        x = x & y
        If Not d.exists(x) Then
            n = n + 1
            d(x) = n
            brr(n, 1) = x
        End If
        brr(d(x), 2) = brr(d(x), 2) + 1
        brr(d(x), 3) = brr(d(x), 3) + sz
        brr(d(x), 4) = brr(d(x), 3) / brr(d(x), 2)
    Next
    [h3].Resize(n, 4) = brr
End Sub
*************************************************************************************************
问题:
1、ReDim brr(1 To UBound(arr) / 10 + 1, 1 To 4)  这句话是什么意思啊?括号里面的参数看不大明白,不知道是怎么返回的。
2、Set d = CreateObject("scripting.dictionary")  这句也不知道是什么意思。
3、arr是一个数组,数组的下标默认不是从0开始的么,为什么后面的For i = 1 To UBound(arr)不是0 To UBound(arr)?
大神,求解~~~!!!
回复

使用道具 举报

 楼主| 发表于 2015-5-13 15:36 | 显示全部楼层
roych 发表于 2015-5-12 12:07
我觉得用数据透视表就够了。

我尝试了下,数据太多了,总共2、3万数据呢,这样做工作量还是有点大耶
回复

使用道具 举报

发表于 2015-5-14 11:18 | 显示全部楼层
1、ReDim brr(1 To UBound(arr) / 10 + 1, 1 To 4)  这句话是什么意思啊?——————定义数组Brr,用于存储需显示的结果。因为每一旬就是一条记录,而一旬大约为10天。而数组arr是源数据,每天一条记录,所以brr的记录量大约为ubound(arr)/10。考虑到取整可能有遗漏,所以+1。
2、Set d = CreateObject("scripting.dictionary")  这句也不知道是什么意思。————这句是定义字典。关于字典的用法,建议网上多搜多学。
3、arr是一个数组,数组的下标默认不是从0开始的么,为什么后面的For i = 1 To UBound(arr)不是0 To UBound(arr)?————当数组用区域赋值时,下标从(1,1)开始。
回复

使用道具 举报

 楼主| 发表于 2015-5-14 16:30 | 显示全部楼层
grf1973 发表于 2015-5-14 11:18
1、ReDim brr(1 To UBound(arr) / 10 + 1, 1 To 4)  这句话是什么意思啊?——————定义数组Brr,用于存 ...

嗯嗯,好的。我看明白了,非常感谢啦~{:2812:}{:3512:}
回复

使用道具 举报

 楼主| 发表于 2015-5-18 16:50 | 显示全部楼层
grf1973 发表于 2015-5-14 11:18
1、ReDim brr(1 To UBound(arr) / 10 + 1, 1 To 4)  这句话是什么意思啊?——————定义数组Brr,用于存 ...

大神,我又遇上一个VBA的问题,想请教下您,能否互加一下QQ:970807379.非常感谢啦~!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-19 11:29 , Processed in 0.610792 second(s), 12 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表