ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
123
返回列表 发新帖
楼主: huagnzhailing

[求助] 请问如何用程序代替公式以便提高速度?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2012-6-27 22:38 | 显示全部楼层
本帖最后由 yanjie 于 2012-6-27 22:42 编辑

采用“数据透视表”,缩减工作表个数2~3个就可以了,公式尽可能简单。
这样速度就可以快很多了,我做过,是可行的。
关于“优化的最快的计算的工作表”,请参考:
http://support.microsoft.com/kb/72622/zh-cn

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-7-1 10:14 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
zhaogang1960 发表于 2012-6-27 22:18

赵老师,您优化的程序,这两天在使用中发现以下问题,可否再帮忙看看什么原因,非常感谢

当在B列的输入物料编号,点击按钮,此时从数据库中提取出来的数据是没错的.但是当我把B列的物料编号清除,重新点击按钮,此时K:N列的原来的数据却仍然显示在那里不会自动清除.

TA的精华主题

TA的得分主题

发表于 2012-7-1 11:43 | 显示全部楼层
huagnzhailing 发表于 2012-7-1 10:14
赵老师,您优化的程序,这两天在使用中发现以下问题,可否再帮忙看看什么原因,非常感谢

当在B列的输入 ...
  1. Sub Macro1() '1个字典
  2.     Dim ar, br(), i&, j&, cr, dr, er, tt
  3.     tt = Timer
  4.     Dim d As Object
  5.     Set d = CreateObject("Scripting.Dictionary")
  6.     Range("E6:E65536,J6:n65536").ClearContents '修改
  7.     lr = Range("B65536").End(xlUp).Row
  8.     If lr < 6 Then Exit Sub
  9.     ar = Range("B6:c" & lr)
  10.     ReDim br(1 To UBound(ar), 1 To 5)
  11.     cr = Sheets("数据库.在途量").Range("e4:j" & Sheets("数据库.在途量").[j65536].End(3).Row)
  12.     dr = Sheets("数据库.IQC在检").Range("a4:c" & Sheets("数据库.IQC在检").[c65536].End(3).Row)
  13.     er = Sheets("数据库.森田总表").Range("c4:s" & Sheets("数据库.森田总表").[s65536].End(3).Row)
  14.     For i = 1 To UBound(cr)
  15.         d(cr(i, 1)) = d(cr(i, 1)) + cr(i, 6)
  16.     Next
  17.     For i = 1 To UBound(dr)
  18.         d("A" & dr(i, 1)) = dr(i, 3)
  19.     Next
  20.     For i = 1 To UBound(er)
  21.         If Not d.exists("B" & er(i, 1)) Then d("B" & er(i, 1)) = er(i, 12)
  22.         If Not d.exists("C" & er(i, 1)) Then d("C" & er(i, 1)) = er(i, 17)
  23.         If Not d.exists("D" & er(i, 1)) Then d("D" & er(i, 1)) = er(i, 14)
  24.         d("E" & er(i, 1)) = er(i, 5)
  25.     Next
  26.     For i = 1 To UBound(ar)
  27.         If d.exists(ar(i, 1)) Then br(i, 1) = d(ar(i, 1)) Else br(i, 1) = 0
  28.         If d.exists("A" & ar(i, 1)) Then br(i, 2) = d("A" & ar(i, 1)) Else br(i, 2) = 0
  29.         If d.exists("B" & ar(i, 1)) Then br(i, 3) = d("B" & ar(i, 1)) Else br(i, 3) = 0
  30.         br(i, 4) = d("C" & ar(i, 1))
  31.         br(i, 5) = d("D" & ar(i, 1))
  32.         ar(i, 1) = d("E" & ar(i, 1))
  33.     Next
  34.     [j6].Resize(i - 1, 5) = br
  35.     If i > 1 Then [e6].Resize(i - 1) = ar Else [e6] = ar(1, 1)
  36. End Sub
复制代码
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-16 03:03 , Processed in 0.029819 second(s), 5 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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