Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
楼主: 不看不看

V中班课前必做题:找唯一

[复制链接]
发表于 2008-7-5 18:46 | 显示全部楼层

<p>不会用字典,调用工作表函数COUNTIF做了个好像速度挺慢的。</p><p>如果同时运行了其他程序,对运行速度的影响挺大的。</p>
回复

使用道具 举报

发表于 2008-7-5 19:15 | 显示全部楼层

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

发表于 2008-7-5 19:19 | 显示全部楼层

<p>为了学别人的,发一个上来:</p><p>Sub test()<br/>t = Timer<br/>Application.ScreenUpdating = False<br/>Dim arr1(), r&amp;, i1%, myrange As Range, arr2(0 To 100, 1 To 2) As Long<br/>arr1 = [a1:a60000].Value<br/>Set myrange = [b1]<br/>For r = 1 To 60000 Step 200<br/>&nbsp; For i1 = 1 To 200<br/>&nbsp;&nbsp;&nbsp; arr2(arr1(r + i1 - 1, 1), 1) = arr2(arr1(r + i1 - 1, 1), 1) + 1<br/>&nbsp;&nbsp;&nbsp; arr2(arr1(r + i1 - 1, 1), 2) = r + i1 - 1<br/>&nbsp; Next<br/>&nbsp; For i1 = 0 To 99<br/>&nbsp;&nbsp;&nbsp; If arr2(i1, 1) = 1 Then<br/>&nbsp;&nbsp;&nbsp;&nbsp; Set myrange = Union(myrange, Range("a" &amp; arr2(i1, 2)))<br/>&nbsp;&nbsp;&nbsp; End If<br/>&nbsp; Next<br/>&nbsp; Erase arr2<br/>&nbsp;&nbsp; myrange.Interior.Color = vbYellow<br/>&nbsp;&nbsp; myrange.Font.Color = vbBlue<br/>&nbsp;&nbsp; Set myrange = [b1]<br/>Next r<br/>[b1].Clear<br/>Application.ScreenUpdating = True<br/>[d1] = Timer - t<br/>End Sub</p>
回复

使用道具 举报

 楼主| 发表于 2008-7-5 19:53 | 显示全部楼层

<p>呵呵,2008跟楼上都是利用了数据本身,这是出题时没考虑到得</p><p>该题原附件,数据全是文本的</p>
回复

使用道具 举报

发表于 2008-7-5 21:38 | 显示全部楼层

看看是什么
回复

使用道具 举报

发表于 2008-7-5 22:13 | 显示全部楼层

<div class="msgheader">QUOTE:</div><div class="msgborder"><b>以下是引用<i>不看不看</i>在2008-7-5 19:53:00的发言:</b><br/><p>呵呵,2008跟楼上都是利用了数据本身,这是出题时没考虑到得</p><p>该题原附件,数据全是文本的</p></div><p>即使是数字,也是大于100就会出错. 各位再完善一下吧.</p>
[此贴子已经被作者于2008-7-5 22:14:11编辑过]
回复

使用道具 举报

发表于 2008-7-5 22:18 | 显示全部楼层

<div class="msgheader">QUOTE:</div><div class="msgborder"><b>以下是引用<i>zbhpass</i>在2008-7-5 12:48:00的发言:</b><br/><div class="msgheader">QUOTE:</div><div class="msgborder">&nbsp;</div><p>兰版,帮我动行一下50楼的代码,看是不是能进1秒,我这是小于1秒的.进不了我也不去敢去回贴领BB,我想要而要不到很丢人的.</p></div><p>你的答案不能处理文本, 需要完善一下</p>
回复

使用道具 举报

发表于 2008-7-5 22:42 | 显示全部楼层

<p>4秒多的答案都不敢发出来[em04] 兰版0.5秒[em06] 刚看了一下评语,还要能处理文本的!完不了!</p><p>
游客,如果您要查看本帖隐藏内容请回复
[em09]
[此贴子已经被作者于2008-7-5 22:52:28编辑过]
回复

使用道具 举报

发表于 2008-7-5 23:13 | 显示全部楼层

<p>按92楼的思想,改成字典的,数字、文字通吃:</p><p>Sub test()<br/>Dim dic1 As New Dictionary, dic2 As New Dictionary<br/>Dim arr1(), r&amp;, i%, myrange As Range<br/>t = Timer<br/>Application.ScreenUpdating = False<br/>arr1 = [a1:a60000].Value<br/>For r = 1 To 60000 Step 200<br/>&nbsp; Set myrange = [b1]<br/>&nbsp; For i = 1 To 200<br/>&nbsp;&nbsp;&nbsp; dic1(arr1(r + i - 1, 1)) = dic1(arr1(r + i - 1, 1)) + 1<br/>&nbsp;&nbsp;&nbsp; dic2(arr1(r + i - 1, 1)) = r + i - 1<br/>&nbsp; Next<br/>&nbsp; For i = 0 To dic1.Count - 1<br/>&nbsp;&nbsp;&nbsp; If dic1.Items(i) = 1 Then Set myrange = Union(myrange, Cells(dic2.Items(i), 1))<br/>&nbsp; Next<br/>&nbsp; myrange.Interior.Color = vbYellow<br/>&nbsp; myrange.Font.Color = vbBlue<br/>&nbsp; Set dic1 = New Dictionary<br/>&nbsp; Set dic2 = New Dictionary<br/>Next<br/>[b1].Clear<br/>[d3] = Timer - t<br/>End Sub</p><p>好象92楼对文本型数字也可以。</p>
回复

使用道具 举报

发表于 2008-7-6 00:36 | 显示全部楼层

<div class="msgheader">QUOTE:</div><div class="msgborder"><b>以下是引用<i>aa123456aa</i>在2008-7-5 22:42:00的发言:</b><br/><p>4秒多的答案都不敢发出来[em04] 兰版0.5秒[em06] 刚看了一下评语,还要能处理文本的!完不了!</p><p>[em09]<br/></p></div><p>发个自定义格式的可惜啊自定义格式不能用时间快的很!&nbsp; 再慢的机子应该也在0.03秒之内吧!</p><p>
游客,如果您要查看本帖隐藏内容请回复
<br/>

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-15 10:51 , Processed in 0.589264 second(s), 3 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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