- 帖子
- 1447
- 主題
- 40
- 精華
- 0
- 積分
- 1471
- 點名
- 0
- 作業系統
- Windows 7
- 軟體版本
- Excel 2010 & 2016
- 閱讀權限
- 50
- 性別
- 男
- 來自
- 台灣
- 註冊時間
- 2020-7-15
- 最後登錄
- 2025-5-5
|
深入研究耗時:
單就判斷與建立字典庫!就耗時0.6秒
Option Explicit
Sub TEST_4()
Dim Arr, i&, j&, T, V, Y, U1, U2, S, P$
S = Timer
Set Y = CreateObject("Scripting.Dictionary")
Arr = Range([A1], [m65536].End(xlUp))
[O:O].ClearContents
For i = 1 To UBound(Arr)
V = -9 ^ 9
For j = 1 To UBound(Arr, 2)
If j < UBound(Arr, 2) Then
U1 = Arr(i, j): U2 = Arr(i, j + 1)
If U1 * U2 >= 0 Then
Y(U1) = IIf(Y(U1) <> 1, Abs((U2) - (U1)), Y(U1))
Y(U2) = IIf(Y(U2) <> 1, Abs((U2) - (U1)), Y(U1))
End If
End If
Next
Y.RemoveAll
Next
MsgBox Timer - S & "秒"
End Sub
去除IIF判斷! 0.3秒!
Option Explicit
Sub TEST_4()
Dim Arr, i&, j&, T, V, Y, U1, U2, S, P$
S = Timer
Set Y = CreateObject("Scripting.Dictionary")
Arr = Range([A1], [m65536].End(xlUp))
[O:O].ClearContents
For i = 1 To UBound(Arr)
V = -9 ^ 9
For j = 1 To UBound(Arr, 2)
If j < UBound(Arr, 2) Then
U1 = Arr(i, j): U2 = Arr(i, j + 1)
If U1 * U2 >= 0 Then
Y(U1) = ""
Y(U2) = ""
End If
End If
Next
Y.RemoveAll
Next
MsgBox Timer - S & "秒"
End Sub
光是反覆字典建立/清空!就要 0.25秒!
Option Explicit
Sub TEST_4()
Dim Arr, i&, j&, T, V, Y, U1, U2, S, P$
S = Timer
Set Y = CreateObject("Scripting.Dictionary")
Arr = Range([A1], [m65536].End(xlUp))
[O:O].ClearContents
For i = 1 To UBound(Arr)
V = -9 ^ 9
For j = 1 To UBound(Arr, 2)
If j < UBound(Arr, 2) Then
U1 = Arr(i, j)
Y(U1) = ""
End If
Next
Y.RemoveAll
Next
MsgBox Timer - S & "秒"
End Sub |
|