求VBA高手通过程序优化vba 数组的长度公式速度

excel VBA 求高手优化运行速度.运行时CPU只用了50%??_百度知道
excel VBA 求高手优化运行速度.运行时CPU只用了50%??
& & & 2;运行速度越快; Range(&=a50& ’(30-小于0的个数)/30 =得出大于0的 & & & & & &nbsp.则循环的次数越快.arr1(2)=a50-arr2(2)*20&c1 = (30 - b50) / 30 & ’将当时 & & &nbsp?怎样创建;Range(& & &1-30随机值<img class="ikqb_img" src="http. &z52&quot. & && & &&nbsp.5) & &/zhidao/wh%3D450%2C600/sign=0b70b0d95bafa40f3c93c6d99e542f79/d058ccbf6cee5b09f; & & &nbsp.baidu?1-30 &nbsp:d65536& & & & & & For a2 = 1 To 30 & arr1(1)=a50-arr2(1)*20; &nbsp.VBA可以创建双线程执行吗; & &) = 1 为了更新 &nbsp. & & &每次& & & & &nbsp.(可以说判断 arr1里面小于0的个数)& & &;& & &nbsp://a; & & (1-30 的随机值求和)*(1-0; &nbsp.5) & & &nbsp.baidu.hiphotos.ClearContents &nbsp://a.com/zhidao/wh%3D600%2C800/sign=a1b3fa4ed043ad4ba67b4ec6b8ccbf6cee5b09f;) = 1 &nbsp.jpg" />Sub tt()Dim arr1(1 To 30) & & arr1(a2) = a50 - arr2(a2) * 20 &nbsp://a;刷新 &nbsp. &清理之前的记录100; &nbsp.求高手优化运行速度; & & & & & & & & & arr2 = A‘将表& &nbsp.等 至arr1(30)=a50-arr2(30)*20& & & &nbsp.; & & & & & & & & 1 Then b50 = b50 + 1 & &&百分比& &nbsp菜鸟初学; & &nbsp
’如果百分比小于70%则下次循环:
&#39a3 = a3 + 53
显示在 ‘ 单元格[d1+53: b51 = b51 + 1
&#39;循环的次数.1-30的数值又再一次随机
&#39;清零GoTo 100:d30+53]
提问者采纳
为什么CPU使率为 50% 而不是 100%因为楼主的CPU是双核的。 2、VBA可以创建多线程吗?VBA是做不到的。 1。至于硬要实现的话,就只能求高手了前两个问题比较好回答,只能单线程
提问者评价
来自团队:
其他类似问题
为您推荐:
运行速度的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁查看: 439|回复: 21
数组公式使用太多,表格崩溃了,怎么破?(见3、4楼妙解,速度嗖嗖的~)
阅读权限20
在线时间 小时
本帖最后由 小芙子 于
16:07 编辑
领导需要做一张对销售人员客户访问情况的跟踪表,销售人员每周填写一个sheet(见附件表格中的CW01-CW52,填写内容基本已预设,只需下拉框选择),然后年度统计表中自动统计每个客户的访问次数(含电话访问和实际访问)。由于年度统计表用来太多数组函数,整个表格无法正常运行,手动计算会影响一些自动跳出内容的显示,不方便销售人员使用。
可否请高手优化一下这张表格(为了方便大家帮改,目前“年度统计表”上没有放数组公式),会有感谢!
如果用VBA实现(VBA一点都不懂),是不是就嗖、嗖地很快?呈现形式还是表格吗?还是那种数据管理系统样的形式?
不是在下偷懒,实在领导着急要用,现学也无法一蹴而就,最近心情也很烦躁。拜托大侠们救我于危难,现在看见这张表就怕了。虽然做得半调子,但也是熬夜呕心沥血之作,尽力了。
13:43 上传
点击文件名下载附件
211.15 KB, 下载次数: 38
阅读权限95
在线时间 小时
典型的大面积大跨度滥用vlookup,vlookup是利剑也是耗能大户
使用辅助列避免重复查找,indirect+辅助列公共match替代
如果有数组公式,最好避之
阅读权限100
在线时间 小时
本帖最后由 看见星光 于
14:07 编辑
这样我都能明白楼主你表达的是什么意思,我自己都觉得莫名其妙了。。。Sub dd()
Dim d As Object, arr, brr, i&, j&, k&, sht As Worksheet
& & Set d = CreateObject(&scripting.dictionary&)
& & For Each sht In Worksheets
& && &&&If sht.Name && ActiveSheet.Name And sht.Visible = xlSheetVisible Then
& && && && &With sht
& && && && && & arr = .Range(&b10:i& & .Cells(Rows.Count, 2).End(3).Row)
& && && && && & For i = 1 To UBound(arr)
& && && && && && &&&st = arr(i, 1) & arr(i, 8)
& && && && && && &&&d(st) = d(st) + 1
& && && && && & Next
& && && && &End With
& && &&&End If
& & Next
& & arr = Range(&b14:i& & Cells(Rows.Count, 2).End(3).Row)
& && &&&For i = 1 To UBound(arr)
& && && && &arr(i, 7) = d(arr(i, 1) & &By phone&)
& && && && &arr(i, 8) = d(arr(i, 1) & &Visit&)
& && &&&Next
& & Range(&b14:i& & Cells(Rows.Count, 2).End(3).Row) = arr
& & Set d = Nothing
End Sub
复制代码
“理解“万岁
阅读权限100
在线时间 小时
& & & & & & & &
(228.31 KB, 下载次数: 78)
14:08 上传
点击文件名下载附件
阅读权限20
在线时间 小时
让我抹把眼泪 我似乎看到了希望
阅读权限20
在线时间 小时
典型的大面积大跨度滥用vlookup,vlookup是利剑也是耗能大户
使用辅助列避免重复查找,indirect+辅助列公 ...
菜鸟 还停留在简单模仿、函数堆积的层次 所以down机了
阅读权限20
在线时间 小时
这样我都能明白楼主你表达的是什么意思,我自己都觉得莫名其妙了。。。
我是不是表述不清?但结果,终究你是不是还是懂我说啥?
阅读权限20
在线时间 小时
星光老师,不好意思,我是太激动了,所以回复一丢丢发来。
我想问问,我CW01-CW52的表单里公司名称列,原来是可以根据输入内容动态更新下拉选项的,现在输入关键词,下拉没内容了;什么也不输入,下拉倒是能出现预设的全部内容。
阅读权限30
在线时间 小时
这样我都能明白楼主你表达的是什么意思,我自己都觉得莫名其妙了。。。
仰望大神之光,深深的觉得我辈的语文是体育老师教的。泪奔。。。
阅读权限100
在线时间 小时
星光老师,不好意思,我是太激动了,所以回复一丢丢发来。
我想问问,我CW01-CW52的表单里公司名称列, ...
数据验证的动态范围公式本来是少算了一个单元格的。我觉得不应该减1,减1就少了一个明细了。
=OFFSET(年度统计表!$L$14,,,COUNTIF(年度统计表!$L:$L,&?*&))
另外这种方式的动态有效性,需要输入一些数据后,点击数据有效性的下拉框才起作用。
1.gif (65.45 KB, 下载次数: 0)
15:09 上传
玩命加载中,请稍候
玩命加载中,请稍候
Powered by
本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任! & & 本站特聘法律顾问:徐怀玉律师 李志群律师EXCEL 关于一个二维数组的优化(高分)_百度知道
EXCEL 关于一个二维数组的优化(高分)
谁能用更短的公式取代下面这个数组=IF({1,0},ROW($1:20),ROW($21:40))原数组是IF({1,0},ROW($1:20)畅涪扳皇殖郝帮酮爆捆,ROW($1:20)+20)但是我感觉还可以短些,也就是最后生成{1,21;2,22;3,23;4,24;5,25;6,26;7,27;8,28;9,29;10,30;11,31;12,32;13,33;14,34;15,35;16,36;17,37;18,38;19,39;20,40}这样的二维数组。
另外刚忘了,还有一个问题:如何去掉数组中的0,盼望中比如数组{0,0,6,0,0,123,0,456,0,7,0,0,100,0,0,0},变成{6,123,456,7,100}随便一个包含0的数组,0在数组中的位置无序,非零数据排列、大小无序畅涪扳皇殖郝帮酮爆捆,怎么去掉0且保持非零数据顺序不变。请高手做答:)谢谢。
提问者采纳
我就回答第二个问题了 第一个貌似不难第二个你看看=LOOKUP(SMALL(TRANSPOSE({0,0,6,0,0,123,0,456,0,7,0,0,100,0,0,0}&&0)*ROW(1:16),ROW(INDIRECT(17-SUM(IF({0,0,6,0,0,123,0,456,0,7,0,0,100,0,0,0}&&0,1,0))&&:16&))),ROW(1:16),TRANSPOSE({0,0,6,0,0,123,0,456,0,7,0,0,100,0,0,0}))
你试验了看看呢 呵呵~~~这公式还能优化的 里面 16
17都可以用indirect 引用的 最后结果是竖的 你可以=TRANSPOSE(LOOKUP(SMALL(TRANSPOSE({0,0,6,0,0,123,0,456,0,7,0,0,100,0,0,0}&&0)*ROW(1:16),ROW(INDIRECT(17-SUM(IF({0,0,6,0,0,123,0,456,0,7,0,0,100,0,0,0}&&0,1,0))&&:16&))),ROW(1:16),TRANSPOSE({0,0,6,0,0,123,0,456,0,7,0,0,100,0,0,0})))再转置一下下 公式里面的SUM(IF({0,0,6,0,0,123,0,456,0,7,0,0,100,0,0,0}&&0,1,0) 也可以换成5 但数组不确定的时候最好用公式求出结果 前面的17
后面的1:16 也可以替换成公式 这对你来说应该不难的能去0 后 其他优化的工作都简单了。这公式只是针对你这个问题写的 ,通用的公式把里面常量替换成公式就好了~ 最终答案精简版=LOOKUP(SMALL(TRANSPOSE({0,0,6,0,0,123,0,456,0,7,0,0,100,0,0,0}&&0)*ROW(1:16),ROW(12:16)),ROW(1:16),TRANSPOSE({0,0,6,0,0,123,0,456,0,7,0,0,100,0,0,0}))全面的 把数字用INDIRECT 引用就是下面的=LOOKUP(SMALL(TRANSPOSE({0,0,6,0,0,123,0,456,0,7,0,0,100,0,0,0}&&0)*ROW(INDIRECT(&1:&&COUNT({0,0,6,0,0,123,0,456,0,7,0,0,100,0,0,0}))),ROW(INDIRECT(COUNT({0,0,6,0,0,123,0,456,0,7,0,0,100,0,0,0})+1-SUM(IF({0,0,6,0,0,123,0,456,0,7,0,0,100,0,0,0}&&0,1,0))&&:&&COUNT({0,0,6,0,0,123,0,456,0,7,0,0,100,0,0,0})))),ROW(INDIRECT(&1:&&COUN畅涪扳皇殖郝帮酮爆捆T({0,0,6,0,0,123,0,456,0,7,0,0,100,0,0,0}))),TRANSPOSE({0,0,6,0,0,123,0,456,0,7,0,0,100,0,0,0}))
其他类似问题
为您推荐:
其他4条回答
---- Excel是一个优秀的电子表格软件,如果你编的程序需要以报表的形式显示最终结果,它会是个不错的选择。你可以通过VB控制Excel显示数据表格。如果你不愿意深入了解Excel这些琐碎的细节,也不是没有权宜之计:你可以打开Excel中的工具→宏→录制新宏,然后进行手工操作,结束后把所录的宏代码贴进你的VB程序就行。这样得到的程序一般都能正常运行,但其中的宏代码往往不够简洁,效率和可读性都不高。
---- Excel编程碰到的第一个问题是表头。有时表头的形式比较复杂,需要横向或纵向合并单元格。请放心,只要没有斜杠,Excel都能应付得了。
---- 例如合并A2~A5这4个单元格,你录制的宏代码会是这样:
Range(&A2:A5&).Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlig...
这就是你12级给的答案?。。。。。。。赶紧把家回吧。。。。
分给别人。
=ROW(1:20)+{0,20}
谢谢,可以回答下第二问嘛?
这样做的目的是什么?返回一个常量数组的没有做出来。如果是将结果放在5个单元格里。横向的公式=INDEX({0,0,6,0,0,123,0,456,0,7,0,0,100,0,0,0},SMALL(IF({0,0,6,0,0,123,0,456,0,7,0,0,100,0,0,0}&0,COLUMN(A:P)),COLUMN(INDIRECT(&A:&&CHAR(SUM(N({0,0,6,0,0,123,0,456,0,7,0,0,100,0,0,0}&0))+64)))))纵向的公式=INDEX({0,0,6,0,0,123,0,456,0,7,0,0,100,0,0,0},SMALL(IF({0,0,6,0,0,123,0,456,0,7,0,0,100,0,0,0}&0,COLUMN(A:P)),ROW(INDIRECT(&1:&&SUM(N({0,0,6,0,0,123,0,456,0,7,0,0,100,0,0,0}&0))))))都是数组公式。
如果不放在一个单元格里就失去意义了,我要把两个计算出的数组中的0去掉。
就是没有想出方法来。如果想出来了会告诉你的。就象楼下说的,用VBA做个自定义函数是可以的。
第一问,顶楼上方括号;补充第二问:=INDEX({0,0,6,0,0,123,0,456,0,7,0,0,100,0,0,0},SMALL(IF({0,0,6,0,0,123,0,456,0,7,0,0,100,0,0,0}&&0,TRANSPOSE(ROW(INDIRECT(&1:&&COUNT({0,0,6,0,0,123,0,456,0,7,0,0,100,0,0,0}))))),TRANSPOSE(ROW(INDIRECT(&1:&&SUM(N({0,0,6,0,0,123,0,456,0,7,0,0,100,0,0,0}&&0)))))))
我要在一个单元格里显示 这个数组呀,你这好像是帖EH上的.这个是多单元格数组公式呀.
学以致用,比尔也是坐在桌前跟人学来的,嘿嘿,自定义函数可以吗
最讨厌答非所问的人来骗分了,!!1
严重同意!
二维数组的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁查看: 3080|回复: 8
VBA使用数组公式evaluate【已解决】
阅读权限10
在线时间 小时
本帖最后由 andy_excelhome 于
20:32 编辑
为了简化程序我在统计销售数据过程中采用evaluate方式,但是碰到“类型不匹配”的问题。
代码如下:
Private Sub CommandButton1_Click()
& & Dim ss As String
& & Dim t As Integer& &
& & ss = &A&& &
& & t = Application.Evaluate(&sum((A2:A10=& & ss & &)*(B2:B10))&)& &
& & MsgBox t& &
请高手指点!谢谢
产品名称销售数量销售单价(元)销售小计(元)A<font color="#.00 <font color="#0.00 <font color="#0.00 C<font color="#.00 <font color="#.00 <font color="#.00 B<font color="#.00 <font color="#.00 <font color="#0.00 A<font color="#.00 <font color="#0.00 <font color="#,320.00 E<font color="#.00 <font color="#.00 <font color="#.00 D<font color="#.00 <font color="#.00 <font color="#,250.00 B<font color="#.00 <font color="#.00 <font color="#,600.00 C<font color="#.00 <font color="#.00 <font color="#.00 B<font color="#.00 <font color="#.00 <font color="#,750.00
15:47 上传
点击文件名下载附件
25.89 KB, 下载次数: 27
阅读权限95
在线时间 小时
为什么不直接SUM呢?
阅读权限10
在线时间 小时
李甲 发表于
为什么不直接SUM呢?
因为销售表格每天在更新。数据条数增加时实时计算(还有其它几个同类型的SUM运算),造成填写数据有停滞等待现象,影响录入数据的效率!
阅读权限70
在线时间 小时
本帖最后由 余余1982 于
18:18 编辑
Private Sub CommandButton1_Click()
& & Dim ss As String
& & Dim t As Integer
& & ss = Range(&e1&)
& & t = Application.WorksheetFunction.SumIf(Range(&a2:a65536&), ss, Range(&b2:b65536&))
& &MsgBox ss & vbCrLf & &销售总数量为:& & vbCrLf & t
18:18 上传
点击文件名下载附件
159.04 KB, 下载次数: 29
阅读权限10
在线时间 小时
余余1982 发表于
Private Sub CommandButton1_Click()
& & Dim ss As String
& & Dim t As Integer
如果有一个以上的条件呢?比如要看某个月、某位销售员、某种产品的销售数量。
阅读权限70
在线时间 小时
本帖最后由 余余1982 于
19:30 编辑
andy_excelhome 发表于
如果有一个以上的条件呢?比如要看某个月、某位销售员、某种产品的销售数量。
&&t = Application.WorksheetFunction.SumIf(Range(&a2:a65536&), ss, Range(&b2:b65536&))
带入sumproduct 函数可以实现吧!
阅读权限10
在线时间 小时
余余1982 发表于
t = Application.WorksheetFunction.SumIf(Range(&a2:a65536&), ss, Range(&b2:b65536&))
带入sumpr ...
经过测试SUMPRODUCT不是一个VBA函数,最后还是通过EVALUATE解决啦。好像EVALUATE公式中的等号右边数值没有办法通过变量传递,只能引用?
感谢指点,受益了!
Private Sub CommandButton2_Click()
& & Dim ss As String
& & Dim t As Integer
& &
& & ss = &产品& & Range(&g1&) & &在& & Range(&h1&) & &月份&
& &
& & t = Application.Evaluate(&SUMPRODUCT((A2:A10=g1)*(B2:B10=h1),C2:C10)&)
& & 't = Application.Evaluate(&SUM((A2:A10=g1)*(B2:B10=h1),C2:C10)&)
& &
& & MsgBox ss & &销售总数量为:& & vbCrLf & t
& &
End Sub
复制代码
20:28 上传
点击文件名下载附件
27.98 KB, 下载次数: 62
阅读权限70
在线时间 小时
andy_excelhome 发表于
经过测试SUMPRODUCT不是一个VBA函数,最后还是通过EVALUATE解决啦。好像EVALUATE公式中的等号右边数值没有 ...
哦!谢谢提醒,我也是猜测一下没有去验证!不好意思!宏表函数是个不错的方法!学习到了~
阅读权限20
在线时间 小时
玩命加载中,请稍候
玩命加载中,请稍候
Powered by
本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任! & & 本站特聘法律顾问:徐怀玉律师 李志群律师

我要回帖

更多关于 vba 数组 的文章

 

随机推荐