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