|
本帖最后由 CheryBTL 于 2013-10-16 07:58 编辑
对同一个表时,再增加一个变量,想着会节省时间,但运行时没发现有变化,
将数组re,redim为string型变量,时间立马就降下来了,在台式电脑上运行为0.18s左右:- Sub CheryBTL1() '仅对一个源数据表
- Dim i As Integer, j As Integer, Rnum As Integer, t As Single, temp As Integer
- Dim ar, re
- t = Timer
- Rnum = Sheets("数据源").[A65536].End(3).Row
- ar = Sheets("数据源").Range("A1:JD" & Rnum)
- ReDim re(1 To Rnum, 1 To 7) as String
- For j = 7 To UBound(ar, 2)
- For i = 10 To UBound(ar)
- If ar(i, j) = 1 Then
- temp = i - 8
- If ar(i - 1, j) = 0 Then
- re(temp, 1) = ar(3, j): re(temp, 2) = ar(4, j): re(temp, 3) = ar(5, j): re(temp, 4) = ar(6, j)
- End If
- re(temp, 5) = ar(i, 2)
- re(temp, 6) = ar(i, 5)
- re(temp, 7) = 1
- End If
- Next i
- Next j
- Sheets("结果").[a1].Resize(Rnum, 7) = re
- MsgBox Timer - t
- End Sub
复制代码 多表时,增加一个工作表循环:- Sub CheryBTL2_1() '对多表时
- Dim i As Integer, j As Integer, Rnum As Integer, m As Long
- Dim ar, re(1 To 100000, 1 To 7) as String
- Dim sht As Worksheet
- t = Timer
- m = 1
- For Each sht In Worksheets
- If sht.Name <> "结果" Then
- Rnum = sht.[A65536].End(3).Row
- ar = sht.Range("A1:JD" & Rnum)
- For j = 7 To UBound(ar, 2)
- For i = 10 To UBound(ar)
- If ar(i, j) = 1 Then
- m = m + 1
- If ar(i - 1, j) = 0 Then
- re(m, 1) = ar(3, j): re(m, 2) = ar(4, j): re(m, 3) = ar(5, j): re(m, 4) = ar(6, j)
- End If
- re(m, 5) = ar(i, 2)
- re(m, 6) = ar(i, 5)
- re(m, 7) = 1
- End If
- Next i
- Next j
- End If
- Next
- Sheets("结果").[a1].Resize(100000, 7) = re
- MsgBox Timer - t
- End Sub
复制代码 |
评分
-
查看全部评分
|