ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 1986|回复: 7

[求助] 请求帮忙优化VBA代码!!!!

[复制链接]

TA的精华主题

TA的得分主题

发表于 2010-4-15 09:51 | 显示全部楼层 |阅读模式
主要功能是根据分组值(单元格A1中)计算DATA表中数据(A列)的起始值、结束值、和值、平均值、极差、标准差;
如果单元格A1中的值为1的话结束值、和值、平均值、极差为空,标准差变成移动极差值
自己编写的VBA代码:使用了一维数组、调用了excel功能函数实现
运行是感觉不是太理想1394个数据在分组值为1是用了4秒多的时间,那如果处理1万个数据不是要我等到老吗 ?;

求助斑竹、高手、网友帮助优化一下看看是否还有新的方法(如用字典会否好点)
多的不说了见附件
优化计算求助.rar (47.96 KB, 下载次数: 20)

[ 本帖最后由 xuwenning 于 2010-4-16 09:15 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-4-15 09:54 | 显示全部楼层
附上代码
Sub Test()
Dim Rowcount%, Rowcount1%, H%, I%, J%, K%, L%
Dim T
Dim Arr As Variant '
Dim Arr1 As Variant
Dim Tmp
Dim TmpA   '和值
Dim TmpB   '平均值
Dim TmpC   '极差
Dim TmpD   '标准差
Dim TmpE   '起始值
Dim TmpF    '结束值
Dim TmpC1   '最大值
Dim TmpC2   '最小值

Dim rng As Range
Dim Dic As Object

    T = Timer
    Rowcount = Sheets("Data").Range("A65536").End(xlUp).Row '返回Data表中A列的数据最大行
   
    Rowcount1 = Sheets("结果").Range("B65536").End(xlUp).Row '返回结果表中A列的数据最大行
   
    ReDim Arr(Rowcount)
    Erase Arr '初始化
   
    Arr = Sheets("data").Range("A1:A" & Rowcount)
   
    'Sheets("结果").Range("A2:G" & Rowcount).Clear '全部清除
    Sheets("结果").Range("A2:G" & Rowcount1 + 1).ClearContents '清除内容
   
    Tmp = Sheets("结果").Range("A1")
   
    If Rowcount < 2 Or Tmp > Rowcount Then Exit Sub
   
    If Tmp = 0 Or IsNull(Tmp) Or Tmp = "" Then
        MsgBox "A1值不能为空或零"
        Exit Sub
    End If
   
    K = Fix(Rowcount / Tmp)
   
    Debug.Print "K:" & K
    Debug.Print "Rowcout:" & Rowcount
   
    For J = 1 To K
   
        ReDim Arr1(Tmp)
        Erase Arr1 '初始化
        
        L = (J - 1) * Tmp + 1
        If Tmp = 1 Then
            H = J
        Else
            H = J * Tmp
        End If
        Debug.Print "L:" & L
        Debug.Print "H:" & H
   
        
        If Tmp = 1 Then
            
            TmpA = ""
            TmpB = ""
            TmpC = ""
            TmpE = Arr(L, 1)
            
            TmpF = ""
            If J = 1 Then
                TmpD = ""
            Else
                TmpD = Arr(J, 1) - Arr(J - 1, 1)
            End If
            
            Sheets("结果").Range("G" & J + 1) = TmpD  '标准差实际为移动极差
        Else
            Arr1 = Sheets("data").Range("A" & L & ":A" & H)
            TmpA = Application.WorksheetFunction.Sum(Arr1)          '调用EXCEL功能函数求和
            TmpB = Application.WorksheetFunction.Average(Arr1)      '调用EXCEL功能函数求均值
            TmpC1 = Application.WorksheetFunction.Max(Arr1)         '调用EXCEL功能函数求最大值
            TmpC2 = Application.WorksheetFunction.Min(Arr1)         '调用EXCEL功能函数求最小值
            TmpC = TmpC1 - TmpC2                                    '调用EXCEL功能函数求极差
            TmpD = Application.WorksheetFunction.StDev(Arr1)        '调用EXCEL功能函数求标准差
            TmpE = Arr(L, 1)
            TmpF = Arr(H, 1)
            
            Sheets("结果").Range("G" & J + 1) = TmpD  '标准差
        
        End If
        
        Sheets("结果").Range("B" & J + 1) = TmpE  '起始值
        Sheets("结果").Range("C" & J + 1) = TmpF  '结束值
        Sheets("结果").Range("D" & J + 1) = TmpA  '和值
        Sheets("结果").Range("E" & J + 1) = TmpB  '平均值
        Sheets("结果").Range("F" & J + 1) = TmpC  '极差
     Next J
    MsgBox "OK!用时[" & (Timer - T) & "秒]"
     
End Sub

TA的精华主题

TA的得分主题

发表于 2010-4-15 10:13 | 显示全部楼层
Application.ScreenUpdating=False
…………
Application.ScreenUpdating=True
加上这两句,运行时间立马减半。

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-4-15 10:17 | 显示全部楼层
原帖由 ningyuanchao 于 2010-4-15 10:13 发表
Application.ScreenUpdating=False
…………
Application.ScreenUpdating=True
加上这两句,运行时间立马减半。

谢谢减小了0.5秒


[ 本帖最后由 xuwenning 于 2010-4-15 10:45 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-4-20 09:16 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
再次请求斑竹帮忙

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-6-2 11:28 | 显示全部楼层
原帖由 xuwenning 于 2010-4-15 09:51 发表
主要功能是根据分组值(单元格A1中)计算DATA表中数据(A列)的起始值、结束值、和值、平均值、极差、标准差;
如果单元格A1中的值为1的话结束值、和值、平均值、极差为空,标准差变成移动极差值
自己编写的VBA代码 ...

是否描述不足
至今没人帮助??????????

TA的精华主题

TA的得分主题

发表于 2019-6-22 13:49 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 YZC51 于 2019-6-22 14:10 编辑

请参考
Sub Test_1()
Dim Rowcount%, Rowcount1%, H%, I%, J%, K%, L%, T
Dim Arr, Arr1, Brr
Dim rng As Range
Application.ScreenUpdating = False
    T = Timer
    Rowcount = Sheets("Data").Range("A65536").End(xlUp).Row    '返回Data表中A列的数据最大行
    Rowcount1 = Sheets("结果").Range("B65536").End(xlUp).Row   '返回结果表中A列的数据最大行
    Arr = Sheets("Data").Range("A1:A" & Rowcount)
    Sheets("结果").Range("A2:G" & Rowcount1 + 1).ClearContents '清除内容
    Tmp = Sheets("结果").Range("A1")
    If Rowcount < 2 Or Tmp > Rowcount Then Exit Sub
    If Tmp = 0 Or IsNull(Tmp) Or Tmp = "" Then
        MsgBox "A1值不能为空或零"
        Exit Sub
    End If
    K = -Int(-Rowcount / Tmp)
    Debug.Print K
    ReDim Brr(1 To K, 1 To 7)
    n = 0
    For J = 1 To UBound(Arr, 1) Step Tmp
        n = n + 1
        Brr(n, 1) = n
        If n > K Then Exit For
        ReDim Arr1(1 To Tmp, 1 To 1)
        If Tmp = 1 Then
            Brr(n, 2) = Arr(J, 1)
            If J > 1 Then Brr(n, 7) = Arr(J, 1) - Arr(J - 1, 1)
        Else
            For I = 1 To Tmp
                Brr(n, 2) = Arr(J, 1)
                If I + J > UBound(Arr, 1) + 1 Then Exit For
                Arr1(I, 1) = Arr(J + I - 1, 1)
            Next I
            If J + Tmp > UBound(Arr, 1) + 1 Then Exit For
            Brr(n, 3) = Arr(J + Tmp - 1, 1)
            Brr(n, 4) = Application.Sum(Arr1)
            Brr(n, 5) = Application.Average(Arr1)
            Brr(n, 6) = Application.Max(Arr1) - Application.Min(Arr1)
            Brr(n, 7) = Application.StDev(Arr1)
        End If
        Erase Arr1 '初始化
    Next J
    [A2].Resize(Rowcount \ Tmp, UBound(Brr, 2)) = Brr
    [H1] = Sheets("结果").Range("B65536").End(xlUp).Row - 1
    Application.ScreenUpdating = True
    MsgBox "OK!用时[" & (Timer - T) & "秒]"
End Sub


评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-6-22 22:50 | 显示全部楼层
附件仅供参考
优化计算求助-y.rar (124.02 KB, 下载次数: 4)

评分

2

查看全部评分

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

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-18 14:42 , Processed in 0.047063 second(s), 17 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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