返回列表 上一主題 發帖

[發問] for next 迴圈速度慢,如何改速度能加快

[發問] for next 迴圈速度慢,如何改速度能加快

test.zip (93.13 KB)     共幾秒.jpg

M欄為變數,有可能數量會到十萬或二十萬...
利用迴圈速度很慢,如何可以加快速度

Public Sub WWW()

Start = Timer

Range("K3") = "=COUNTIF(M:M,""*RBW*"")"
    a = Range("K3")
        For i = 4 To a + 3

            Cells(i, "N") = "=IFERROR(AVERAGEIF($D:$H,M" & i & ",E:H),""0"")"
            Cells(i, "O") = "=IFERROR(COUNTIF(D:D,M" & i & "),""0"")"

Next i

Range("M:O").Value = Range("M:O").Value
      
Finish = Timer
TotalTime = Finish - Start
MsgBox "已完成!  總共:" & TotalTime & "秒 !"

End Sub

  1. Sub WWW()
  2. Dim Arr, Brr, xD, i&, j%, N&, SS, TM
  3. TM = Timer
  4. Set xD = CreateObject("Scripting.Dictionary")
  5. Arr = Range([M4], Cells(Rows.Count, "M").End(xlUp))
  6. ReDim Brr(1 To UBound(Arr), 1 To 2)
  7. For i = 1 To UBound(Arr)
  8.     If Arr(i, 1) <> "" Then xD(Arr(i, 1)) = i
  9. Next i

  10. Arr = Range([D4], Cells(Rows.Count, "D").End(xlUp)(1, 5))
  11. For i = 1 To UBound(Arr)
  12.     N = xD(Arr(i, 1)): If N = 0 Then GoTo 101
  13.     SS = Split(Mid(Brr(N, 1), 2) & "/", "/")
  14.     For j = 2 To 5
  15.         If IsNumeric(Arr(i, j)) Then
  16.            SS(0) = Val(SS(0)) + Arr(i, j)
  17.            SS(1) = Val(SS(1)) + 1
  18.         End If
  19.     Next j
  20.     Brr(N, 1) = "=" & SS(0) & "/" & SS(1) '=總合計/個數
  21.     Brr(N, 2) = Brr(N, 2) + 1
  22. 101: Next i

  23. [N4].Resize(UBound(Brr), 2) = Brr
  24. MsgBox "已完成!  總共:" & Timer - TM & "秒 !"
  25. End Sub
複製代碼
Xl0000001.rar (91.71 KB)

TOP

回復 2# 准提部林


Dear 准提部林 :

謝謝幫忙,跑完才花費不到一秒鐘

對於初學持者但太深奧了!很想學起來但不知如何問起 =_=

TOP

        靜思自在 : 不要隨心所欲,要隨心教育自己。
返回列表 上一主題