ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[讨论] 得到6W+的结果,运行了7065S.这样太耗时了吧。

[复制链接]

TA的精华主题

TA的得分主题

发表于 2015-7-31 23:40 | 显示全部楼层 |阅读模式
For j = 6 To Rz                  'Rz数据表的最后一行行号
        y1_b = True
        gz = zzs.Cells(j, kz).Value     '目标参数现网值
        gz_arr = Split(gz, ";")         '有时候是分号作分隔符的多个数字,因此转为数组
Re_lastr = Res.UsedRange.SpecialCells(xlCellTypeLastCell).Row   '目标参数所在的列
        Re_str = g_y1 & "~" & g_y2      '当不达标时候,输出的合理设置值范围
        
            For p = 0 To UBound(gz_arr)
            'MsgBox gz_arr(p)
            If Val(gz_arr(p)) < g_y1 Or Val(gz_arr(p)) > g_y2 Then               ’当现网值在合理值范围内,不用输出;否则输出
             y1_b = False
             Exit For
             End If
            Next p
            ‘以下可以忽略,只是在不达标时候,复制内容到结果表
  If y1_b = False Then
            Set myRange1 = zzs.Range(zzs.Cells(j, "B"), zzs.Cells(j, "D")) '因为现网设置值不符合,则选取MOI,SubNetWork,MEID区域
            Set myRange2 = Res.Range(Res.Cells(Re_lastr + 1, "C"), Res.Cells(Re_lastr + 1, "E")) '在结果表Res的cells(i,"c")开始粘贴
            myRange1.Copy Destination:=myRange2
            Res.Cells(Re_lastr + 1, "G").Value = gz     '复制粘贴现网设置
            Res.Cells(Re_lastr + 1, "H") = Re_str       '赋值合理设置值
            yys.Range(yys.Cells(i, "D"), yys.Cells(i, "E")).Copy Destination:=Res.Range(Res.Cells(Re_lastr + 1, "A"), Res.Cells(Re_lastr + 1, "B"))     '赋值粘贴英文名字,中文名字
            yys.Cells(i, "H").Copy Destination:=Res.Cells(Re_lastr + 1, "I")    '复制粘贴重要性
            Set myRange1 = Nothing
            Set myRange2 = Nothing
            End If
            Set gz_arr = Nothing
        Next j
遍历200行的规范表数据,比较一个90M+的数据表,将不达标的结果输出到结果表,得到6W+行数据的结果表,耗费7065S(timer函数)。我认为太耗费时间。

请问各位大神,我应该如何优化啊?要知道,实际操作的数据表有260M的啊。{:soso_e118:}

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-7-31 23:41 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

代码,谢谢大家

本帖最后由 穿梭机丶Edward 于 2015-8-1 10:46 编辑

数据表只是很少量的一部分,只供大家粗略感受一下数据的格式。
规范表原来只有Rlue一份sheet,我个人为了测试,在N列添加分类,种类1,2,3,4,并且分为4个sheet。
help就是代码了。里面很多冗余,希望大家不厌其烦的看看。


需求 :
各个种类都是根据表名(C或者I列)在数据表找到指定的sheet,然后根据英文名(y_ename)(D或者J列)找到指定的参数列,遍历现网值,并与规范值(F~G列或者K~L列)
不同种类不同条件,输出到结果表。
种类1:现网值gz在F~G列范围,否则输出该行数据。
种类2:现网值gz只能出现F~G列的数,多一个少一个,(要全匹配)都要输出该行数据。(种类2的规范表有时候是浮点数)
种类3:gz达到F~G列的范围,而gz2(根据I列和J列得到的另一个现网值)达不到K~L列的范围,输出该行数据。
种类4:gz达不到F~G列,而gz2达到K~L列。就输出该行数据


要输出的数据包涵,该参数的英文名,中文名,MOI,SubNetWork,MEID,现网值,规范值,重要性




如果一次性将要输出的内容输进内存数组,可以加快运行速度,应该如何输进??

thanks.rar

1.33 MB, 下载次数: 38

TA的精华主题

TA的得分主题

发表于 2015-7-31 23:48 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-8-1 00:11 | 显示全部楼层
yjh_27 发表于 2015-7-31 23:48
不要反复操作单元格

谢谢你的回复。但是,有什么方法可以避免反复操作吗?因为,要复制粘贴啊~!

TA的精华主题

TA的得分主题

发表于 2015-8-1 07:04 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2015-8-1 07:10 来自手机 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
第一,你的变量都声明成合适的类型了吗? 第二,添加 application.screenupdate语句了吗?第三,可以考虑把单元格一次性复制到内存数组里面,操作完再一次性复制到目标表格(只是猜想,没试过)

TA的精华主题

TA的得分主题

发表于 2015-8-1 09:44 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-8-1 10:20 | 显示全部楼层
thestronger 发表于 2015-8-1 07:10
第一,你的变量都声明成合适的类型了吗? 第二,添加 application.screenupdate语句了吗?第三,可以考虑把 ...

谢谢你的回答。第一个问题,我不清楚。第二,我添加了screenupdate语句。第三,如何将单元格内容一次性复制到内存数组呢?其实我考虑过用数组,但是自己还没熟悉数组的赋值,上下限的定义什么的(都不确定),所以没用。我稍后会上传代码到附件,。

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-8-1 10:21 | 显示全部楼层
huang1314wei 发表于 2015-8-1 07:04
楼主附件都不给?

其实我之前上传过的。。只是代码太长,大家没心思看。我稍后整理一下需求就上传规则表,数据表(部分),代码。谢谢你的关注。

TA的精华主题

TA的得分主题

发表于 2015-8-1 12:25 来自手机 | 显示全部楼层
穿梭机丶Edward 发表于 2015-8-1 10:20
谢谢你的回答。第一个问题,我不清楚。第二,我添加了screenupdate语句。第三,如何将单元格内容一次性复 ...

刚刚尝试了一下,在表格中读取5万个格子并计算的速度和复制到内存数组中计算的速度相差四、五倍,而测试写入5万个单元格,则相差上百倍。而screenupdate语句反而没起什么作用
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-4-27 06:16 , Processed in 0.042984 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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