Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 6281|回复: 19

[竟赛题]十进制递增输入(已结贴)

[复制链接]
发表于 2007-4-24 00:41 | 显示全部楼层 |阅读模式
<p>(图1</p><p><img src="data/attachment/forum/dvbbs/2007-4/20074240442341132.bmp" border="0" onclick="zoom(this)" onload="if(this.width>document.body.clientWidth*0.5) {this.resized=true;this.width=document.body.clientWidth*0.5;this.style.cursor='pointer';} else {this.onclick=null}" alt="" /><br/>&nbsp;</p><p>图2</p><p><img src="data/attachment/forum/dvbbs/2007-4/20074240445617953.bmp" border="0" onclick="zoom(this)" onload="if(this.width>document.body.clientWidth*0.5) {this.resized=true;this.width=document.body.clientWidth*0.5;this.style.cursor='pointer';} else {this.onclick=null}" alt="" /></p><p>图3</p><p><img src="data/attachment/forum/dvbbs/2007-4/20074240452434389.bmp" border="0" onclick="zoom(this)" onload="if(this.width>document.body.clientWidth*0.5) {this.resized=true;this.width=document.body.clientWidth*0.5;this.style.cursor='pointer';} else {this.onclick=null}" alt="" /></p><p>图4</p><p><img src="data/attachment/forum/dvbbs/2007-4/20074240454167955.bmp" border="0" onclick="zoom(this)" onload="if(this.width>document.body.clientWidth*0.5) {this.resized=true;this.width=document.body.clientWidth*0.5;this.style.cursor='pointer';} else {this.onclick=null}" alt="" /></p><p><strong>题目要求:</strong></p><p>1、VBA代码自动录入,如图1所示,从000开始到999结束,如图4所示</p><p>2、每张工作表限制200行,如图2所示</p><p>3、自动新建工作表,并接上表连续输入,如图3所示<br/><strong></strong></p><p><strong>评比标准:</strong></p><p>结果正确情况下速度为评比第一要素,要求测试设置时间为毫秒,测试机器会采用同一台机器统一测试</p><p><strong>参赛资格:</strong></p><p>六段及以下会员4月30日24:00前提交答案并结果正确</p><p><strong>奖罚制度:</strong></p><p>1、奖励前三名奖金分别为5、3、2个金币</p><p>2、不得以马甲参赛,违者封ID并罚50金币</p><p>3、其它高段及版主参与另设奖励</p><p>4、答案必须上交到指定地点,否则无效</p><p><strong>答案上传处:</strong></p><p><a href="http://www.excelpx.com/forum.php?mod=viewthread&tid=16224">http://www.excelpx.com/forum.php?mod=viewthread&tid=16224</a></p>
[此贴子已经被作者于2007-5-1 10:10:26编辑过]
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2007-4-24 08:43 | 显示全部楼层
回复

使用道具 举报

发表于 2007-4-24 10:08 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2007-4-25 17:25 | 显示全部楼层

<p>截止2007年4月29日24:00上交有效答案</p><p><font color="#0000ff"><strong>MXQCHINA</strong></font></p><p><font face="Verdana" color="#0000ff"><strong>jonnni</strong></font></p><p><font face="Verdana" color="#0000ff"><strong>Luckyguy2008</strong></font></p><p><font face="Verdana" color="#0000ff"><strong>djyjysxxs</strong></font></p><p><font face="Verdana" color="#0000ff"><strong>lpz001</strong></font></p>
[此贴子已经被作者于2007-4-30 10:02:15编辑过]
回复

使用道具 举报

发表于 2007-4-29 20:30 | 显示全部楼层

好像不是太难。
回复

使用道具 举报

 楼主| 发表于 2007-5-1 10:13 | 显示全部楼层

<p><strong>本次竞赛正如element兄和qee用兄所说</strong></p><p><strong>数据量比较少,算法上几乎没有时间差距</strong></p><p><strong>程序耗费的时间主要还是在如何向工作表写数据</strong></p><p><strong>写入工作表的方法上也没有多大的区别</strong></p><p><strong>这是我所没考虑到的的,第一次搞竞赛有什么不到之处还请大家谅解</strong></p><p><strong>测试机器:P4D 3.0G,512M DDR667</strong></p><p>&nbsp;</p><p><font size="6">本次优胜者:<strong><font color="#ff0000">Luckyguy2008</font>(奖五个金币)、<font color="#ff0000">mxqchina2</font>(三个金币)</strong></font></p><p><strong><font size="6">其他参与者各二个金币</font></strong></p><p><strong><font size="6">版主们让管理员给点参与奖吧</font></strong></p><p><strong></strong>&nbsp;</p>
[此贴子已经被作者于2007-5-1 10:53:09编辑过]
回复

使用道具 举报

 楼主| 发表于 2007-5-1 10:14 | 显示全部楼层

<p><strong>飞雨飘版主提供了最原始的解法,这也是我初学VBA时用的方法</strong><br/>Sub AA()<br/>Dim M, N, J, K, L As Integer<br/>K = 1<br/>L = 1<br/>For M = 0 To 9<br/>&nbsp;&nbsp; For N = O To 9<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; For J = 0 To 9<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Sheets(L).Cells(K, 1) = M<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Sheets(L).Cells(K, 2) = N<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Sheets(L).Cells(K, 3) = J<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; K = K + 1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Next<br/>&nbsp;&nbsp; Next<br/>&nbsp;&nbsp; If M Mod 2 &lt;&gt; 0 Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; L = L + 1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If L &gt; 3 Then Sheets.Add , Sheets(L - 1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; K = 1<br/>&nbsp;&nbsp; End If</p><p>Next<br/>End Sub<br/><strong>我们公认为速度最慢的一种方法512.625毫秒,PS:可惜被笔锋侠版主给打破了</strong></p>[em07][em07]
回复

使用道具 举报

 楼主| 发表于 2007-5-1 10:14 | 显示全部楼层

<p><strong>笔锋侠版主提供五种方法</strong><br/>Sub 方法一()<br/>&nbsp;&nbsp;&nbsp; Dim i As Integer, j As Integer, t As Single, arr() As Integer<br/>&nbsp;&nbsp;&nbsp; t = Timer<br/>&nbsp;&nbsp;&nbsp; Application.ScreenUpdating = False<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; j = Int(1000 / 200) - Sheets.Count<br/>&nbsp;&nbsp;&nbsp; If j &gt; 0 Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; For i = 1 To j<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ActiveWorkbook.Sheets.Add After:=Worksheets(Worksheets.Count)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Next i<br/>&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; ReDim arr(1 To Int(1000 / 200), 1 To 200, 1 To 3)<br/>&nbsp;&nbsp;&nbsp; For i = 0 To 999<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; arr(Int(i / 200) + 1, (i Mod 200) + 1, 1) = Int(i / 100)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; arr(Int(i / 200) + 1, (i Mod 200) + 1, 2) = Int(i / 10) Mod 10<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; arr(Int(i / 200) + 1, (i Mod 200) + 1, 3) = i Mod 10<br/>&nbsp;&nbsp;&nbsp; Next i<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; For i = 1 To Int(1000 / 200)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; For j = 1 To 200<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Sheets(i).Range("A" &amp; j) = arr(i, j, 1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Sheets(i).Range("B" &amp; j) = arr(i, j, 2)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Sheets(i).Range("C" &amp; j) = arr(i, j, 3)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Next j<br/>&nbsp;&nbsp;&nbsp; Next i<br/>&nbsp;&nbsp;&nbsp; Sheets(1).Select<br/>&nbsp;&nbsp;&nbsp; Range("F1") = (Timer - t) * 1000<br/>&nbsp;&nbsp;&nbsp; MsgBox "共用时:" &amp; (Timer - t) * 1000 &amp; "毫秒"<br/>End Sub<br/><strong>耗时453毫秒</strong><br/>Sub 方法二()<br/>&nbsp;&nbsp;&nbsp; Dim i As Integer, j As Integer, t As Single, arr() As Integer<br/>&nbsp;&nbsp;&nbsp; Dim cn As New ADODB.Connection, sql As String<br/>&nbsp;&nbsp;&nbsp; t = Timer<br/>&nbsp;&nbsp;&nbsp; Application.ScreenUpdating = False<br/>&nbsp;&nbsp;&nbsp; j = Int(1000 / 200) - Sheets.Count<br/>&nbsp;&nbsp;&nbsp; If j &gt; 0 Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; For i = 1 To j<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ActiveWorkbook.Sheets.Add After:=Worksheets(Worksheets.Count)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Next i<br/>&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; ReDim arr(1 To 1000, 1 To 4)<br/>&nbsp;&nbsp;&nbsp; For i = 1 To 1000<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; j = i - 1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; arr(i, 1) = Int(j / 100)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; arr(i, 2) = Int(j / 10) Mod 10<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; arr(i, 3) = j Mod 10<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; arr(i, 4) = Int(j / 200) + 1<br/>&nbsp;&nbsp;&nbsp; Next i<br/>&nbsp;&nbsp;&nbsp; With Sheets(1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Range("A1") = "A"<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Range("B1") = "B"<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Range("C1") = "C"<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Range("D1") = "D"<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Range("A2:D1001") = arr()<br/>&nbsp;&nbsp;&nbsp; End With<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; cn.Open "provider=microsoft.jet.oledb.4.0;extended properties=excel 8.0;data source=" &amp; ThisWorkbook.FullName<br/>&nbsp;&nbsp;&nbsp; For i = Int(1000 / 200) To 1 Step -1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sql = "select A,B,C from [sheet1$] where D = " &amp; i<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Sheets(i).Range("A1").CopyFromRecordset cn.Execute(sql)<br/>&nbsp;&nbsp;&nbsp; Next i<br/>&nbsp;&nbsp;&nbsp; cn.Close<br/>&nbsp;&nbsp;&nbsp; Set cn = Nothing<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; Sheets(1).Select<br/>&nbsp;&nbsp;&nbsp; Range("A201:D1000").ClearContents<br/>&nbsp;&nbsp;&nbsp; Range("D1:D200").ClearContents<br/>&nbsp;&nbsp;&nbsp; Range("F2") = (Timer - t) * 1000<br/>&nbsp;&nbsp;&nbsp; MsgBox "共用时:" &amp; (Timer - t) * 1000 &amp; "毫秒"<br/>End Sub<br/><strong>数组+SQL的方法,因为数据量大小没有发挥出优势,耗时421.375毫秒<br/></strong>Sub 方法三()<br/>&nbsp;&nbsp;&nbsp; Dim i As Integer, j As Integer, t As Single<br/>&nbsp;&nbsp;&nbsp; t = Timer<br/>&nbsp;&nbsp;&nbsp; Application.ScreenUpdating = False<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; j = Int(1000 / 200) - Sheets.Count<br/>&nbsp;&nbsp;&nbsp; If j &gt; 0 Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; For i = 1 To j<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ActiveWorkbook.Sheets.Add After:=Worksheets(Worksheets.Count)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Next i<br/>&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; For i = 0 To 999<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; j = Int(i / 200) + 1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; With Sheets(j)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Range("A" &amp; (i Mod 200) + 1) = Int(i / 100)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Range("B" &amp; (i Mod 200) + 1) = Int(i / 10) Mod 10<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .Range("C" &amp; (i Mod 200) + 1) = i Mod 10<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End With<br/>&nbsp;&nbsp;&nbsp; Next i<br/>&nbsp;&nbsp;&nbsp; Sheets(1).Select<br/>&nbsp;&nbsp;&nbsp; Range("F3") = (Timer - t) * 1000<br/>&nbsp;&nbsp;&nbsp; MsgBox "共用时:" &amp; (Timer - t) * 1000 &amp; "毫秒"<br/>End Sub<br/><strong>这种方法居然打破了原始方法的最慢记录,耗时1124毫秒,PS:如果评最慢速度这个代码估计第一了</strong>[em01][em01]<br/>Sub 方法四()<br/>&nbsp;&nbsp;&nbsp; Dim i As Integer, j As Integer, t As Single, arr1(1 To 1000, 1 To 3) As Integer, arr2(1 To 200, 1 To 3) As Integer<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; t = Timer<br/>&nbsp;&nbsp;&nbsp; Application.ScreenUpdating = False<br/>Worksheets.Count<br/>&nbsp;&nbsp;&nbsp; j = Int(1000 / 200) - Sheets.Count<br/>&nbsp;&nbsp;&nbsp; If j &gt; 0 Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; For i = 1 To j<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ActiveWorkbook.Sheets.Add After:=Worksheets(Worksheets.Count)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Next i<br/>&nbsp;&nbsp;&nbsp; End If</p><p>&nbsp;&nbsp;&nbsp; For i = 1 To 1000<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; j = i - 1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; arr1(i, 1) = Int(j / 100)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; arr1(i, 2) = Int(j / 10) Mod 10<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; arr1(i, 3) = j Mod 10<br/>&nbsp;&nbsp;&nbsp; Next i<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; For j = 1000 / 200 - 1 To 0 Step -1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; For i = 1 To 200<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; arr2(i, 1) = arr1(200 * j + i, 1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; arr2(i, 2) = arr1(200 * j + i, 2)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; arr2(i, 3) = arr1(200 * j + i, 3)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Next i<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Sheets(j + 1).Range("A1:C200") = arr2()<br/>&nbsp;&nbsp;&nbsp; Next j<br/>&nbsp;&nbsp;&nbsp; Sheets(1).Select<br/>&nbsp;&nbsp;&nbsp; Range("F4") = (Timer - t) * 1000<br/>&nbsp;&nbsp;&nbsp; MsgBox "共用时:" &amp; Range("F4").Value &amp; "毫秒"<br/>End Sub<br/><strong>耗时15.5毫秒</strong><br/>Sub 方法五()<br/>&nbsp;&nbsp;&nbsp; Dim i As Integer, j As Integer, t As Single, arr1(1 To 1000, 1 To 3) As Integer<br/>&nbsp;&nbsp;&nbsp; t = Timer<br/>&nbsp;&nbsp;&nbsp; Application.ScreenUpdating = False<br/>&nbsp;&nbsp;&nbsp; j = Int(1000 / 200) - Sheets.Count<br/>&nbsp;&nbsp;&nbsp; If j &gt; 0 Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; For i = 1 To j<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ActiveWorkbook.Sheets.Add After:=Worksheets(Worksheets.Count)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Next i<br/>&nbsp;&nbsp;&nbsp; End If</p><p>&nbsp;&nbsp;&nbsp; For i = 1 To 200<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; j = i - 1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; arr1(i, 1) = Int(j / 100)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; arr1(i, 2) = Int(j / 10) Mod 10<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; arr1(i, 3) = j Mod 10<br/>&nbsp;&nbsp;&nbsp; Next i<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; For j = 1 To 1000 / 200<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Sheets(j).Range("A1:C200") = arr1()<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; For i = 1 To 200<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; arr1(i, 1) = arr1(i, 1) + 2<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Next i<br/>&nbsp;&nbsp;&nbsp; Next j<br/>&nbsp;&nbsp;&nbsp; Sheets(1).Select<br/>&nbsp;&nbsp;&nbsp; Range("F5") = (Timer - t) * 1000<br/>&nbsp;&nbsp;&nbsp; MsgBox "共用时:" &amp; Range("F5").Value &amp; "毫秒"<br/>End Sub<br/><strong>耗时15.125毫秒(本次竞赛最快记录)</strong></p>
[此贴子已经被作者于2007-5-1 10:20:58编辑过]
回复

使用道具 举报

 楼主| 发表于 2007-5-1 10:15 | 显示全部楼层

<strong>element版主的代码如下:</strong><br/>Sub element()<br/>&nbsp;&nbsp;&nbsp; Dim arr() As Integer<br/>&nbsp;&nbsp;&nbsp; Dim i As Integer<br/>&nbsp;&nbsp;&nbsp; Dim j As Integer<br/>&nbsp;&nbsp;&nbsp; Dim m As Integer<br/>&nbsp;&nbsp;&nbsp; Dim iCnt As Integer<br/>&nbsp;&nbsp;&nbsp; Dim oSht As Worksheet<br/>&nbsp;&nbsp;&nbsp; Dim mTime As Single<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; Application.ScreenUpdating = False<br/>&nbsp;&nbsp;&nbsp; mTime = Timer<br/>&nbsp;&nbsp;&nbsp; Set oSht = ActiveSheet<br/>&nbsp;&nbsp;&nbsp; iCnt = Int(1000 / 200)<br/>&nbsp;&nbsp;&nbsp; For i = 1 To iCnt - 1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Sheets.Add After:=Sheets(Sheets.Count)<br/>&nbsp;&nbsp;&nbsp; Next<br/>&nbsp;&nbsp;&nbsp; For i = 1 To iCnt<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ReDim arr(1 To 200, 1 To 3)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; For j = 1 To 200<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m = m + 1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; arr(j, 1) = Int((m - 1) / 100)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; arr(j, 2) = Int(Right(j - 1, 2) / 10)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; arr(j, 3) = (j - 1) Mod 10<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Next<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Sheets(i).Range("A1:C200") = arr<br/>&nbsp;&nbsp;&nbsp; Next<br/>&nbsp;&nbsp;&nbsp; oSht.Activate<br/>&nbsp;&nbsp;&nbsp; MsgBox (Timer - mTime) * 1000<br/>&nbsp;&nbsp;&nbsp; Application.ScreenUpdating = True<br/>End Sub<br/><strong>耗时16.625毫秒</strong>
[此贴子已经被作者于2007-5-1 10:22:25编辑过]
回复

使用道具 举报

 楼主| 发表于 2007-5-1 10:15 | 显示全部楼层

<strong>qee用版主:<br/></strong>Sub atest()<br/>&nbsp; Dim i%, j%, k%, l%<br/>&nbsp; Dim sh As Worksheet<br/>&nbsp; Dim s(1 To 200, 1 To 2)<br/>&nbsp; Dim rg As Range<br/>&nbsp; Dim t<br/>&nbsp; t = Timer<br/>&nbsp; Application.ScreenUpdating = False<br/>&nbsp; Set sh = Sheet1<br/>&nbsp; l = 1<br/>&nbsp; For i = 1 To 2<br/>&nbsp;&nbsp;&nbsp; For j = 0 To 9<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; For k = 0 To 9<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s(l, 1) = j<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s(l, 2) = k<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; l = l + 1<br/>&nbsp;&nbsp;&nbsp;&nbsp; Next k<br/>&nbsp;&nbsp; Next j<br/>&nbsp;Next i<br/>&nbsp;For i = 0 To 8 Step 2<br/>&nbsp;&nbsp; With sh<br/>&nbsp;&nbsp;&nbsp;&nbsp; .Range("A:C").ColumnWidth = 3<br/>&nbsp;&nbsp;&nbsp;&nbsp; .Range("B1:C200") = s <br/>&nbsp;&nbsp;&nbsp;&nbsp; .Range("A1:A100") = i <br/>&nbsp;&nbsp;&nbsp;&nbsp; .Range("A101:A200") = i + 1<br/>&nbsp;&nbsp; End With<br/>&nbsp;&nbsp; If i &lt; 8 Then Set sh = Worksheets.Add(after:=sh)<br/>&nbsp;Next i<br/>&nbsp;Sheet1.Select<br/>&nbsp;Application.ScreenUpdating = True<br/>&nbsp;MsgBox (Timer - t) * 1000 &amp; "ms"<br/>End Sub<br/><strong>耗时46.875毫秒</strong>
[此贴子已经被作者于2007-5-1 10:21:59编辑过]
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-19 07:39 , Processed in 0.275561 second(s), 4 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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