none
VBA內如何加快CPU運算? RRS feed

  • 問題

  • 各位好,我在VBA內寫了多重迴圈Do...(Do...while)loop,最內的迴圈利用二分法掃瞄答案,它只是佔用工作表內兩列儲存格的變數運算,但因工作表設定為「自動重算」而令CPU運算速度變慢。

    請教各位我能否設定內迴圈只在某一範圍內運算更新(以外則不運算)。繼後外迴圈則恢復全頁工作表運算更新,好讓加快整個迴圈流程速度?

    (P.S.可否提供發問VBA類別的路俓?)


    2015年4月14日 下午 04:21

解答

  • 不知道具體邏輯不知道如何加速。

    手動計算可放在迴圈外

    用 Cells(i,j) 取代 Range(字串相加) 會比較快

    回圈內 定時呼叫 API Sleep 1 ,雖然實際上變慢,但感受性變快。


    不精確的問法,就會得到隨便猜的答案;自己都不肯花時間好好描述問題,又何必期望網友會認真回答?

    2015年4月15日 下午 12:15

所有回覆

  • 只要某個範圍的儲存格重算:

    Range("A1:C5").Calculate

    2015年4月15日 上午 04:24
  • 結構是否如下,請指點:

    Application.Calculation = xlCalculationAutomatic
    
    Do while
    ...
        Do  
           Application.Calculation = xlCalculationMaunal
           mid = (high + low) / 2  '二分法
           Range("f" & r1) = mid  '輸入數據
           rows(r1-1 &":"& r1).Calculate  'r1及r1-1行運算
           scan_M = Range("be" & r1)  '輸出結果
           If scan_M <> scan_H Then
               low = mid
           ElseIf scan_M <> scan_L Then
               high = mid
           End If
        Loop While high - low > delta
        Application.Calculation = xlCalculationAutomatic
    ...
    loop
    
    

    2015年4月15日 上午 05:31
  • 不知道具體邏輯不知道如何加速。

    手動計算可放在迴圈外

    用 Cells(i,j) 取代 Range(字串相加) 會比較快

    回圈內 定時呼叫 API Sleep 1 ,雖然實際上變慢,但感受性變快。


    不精確的問法,就會得到隨便猜的答案;自己都不肯花時間好好描述問題,又何必期望網友會認真回答?

    2015年4月15日 下午 12:15
  • 受教了,我是見CPU在「輸入數據」及「輸出結果」時都需時整頁運算才用局部運算望令它加快,但為何你建議我將手動計算要放在迴圈外與我相反?
    2015年4月15日 下午 02:06
  • Excel 設定為手動計算完後,不會轉成自動計算,因此沒必要重複呼叫多次手動計算。

    你自己看你的程式碼,在回圈內多次設定手動計算,不是很沒意義?


    不精確的問法,就會得到隨便猜的答案;自己都不肯花時間好好描述問題,又何必期望網友會認真回答?

    2015年4月17日 下午 03:27