Board logo

標題: [發問] 關於:VBA計算執行速度 [打印本頁]

作者: 韋弘智    時間: 2017-5-11 09:04     標題: 關於:VBA計算執行速度

本帖最後由 韋弘智 於 2017-5-11 09:05 編輯

諮詢各位版友,小弟的VBA程式碼中,因為每迴圈1次就需進行1~245欄位的計算,而導致程式執行速度相當的緩慢,
請問是否有改善的方式?用陣列的方式能改善嗎?
  1. For d = 0 To 100 Step 5
  2.   For i = 1 To 245
  3. Cells(i + 1, 24) = Int(Cells(i + 1, 18) + Cells(i + 1, 18) * (d / 100))
  4. Cells(i + 1, 25) = Int(Cells(i + 1, 18) + Cells(i + 1, 18) * (d / -100))
複製代碼
另外,表格欄位中出現#NUM!,我該如何使用if判斷,出現#NUM!後,仍繼續執行
  1. If Cells(1, 1 )= #NUM! Then
  2.             End If
複製代碼
這樣的程式,無法執行,已google尋找過,仍然無解。

[attach]27176[/attach]
作者: ikboy    時間: 2017-5-11 09:45

回復 1# 韋弘智


    首先直接在cells執行一定慢, 第二衹看那4行代碼, 首循環是多餘的, 建議上載檔案, 模擬結果, 說明計算邏輯.
作者: 准提部林    時間: 2017-5-11 09:46

Sub TestA()
Dim Arr, Brr, X, Y
Arr = [R2:R246]
[X2:Y246].ClearContents: Brr = [X2:Y246]
For D = 0 To 100 Step 5
  For i = 1 To 245
    If Not IsError(Arr(i, 1)) Then '不是〔錯誤值〕才進行計算
      Brr(i, 1) = Int(Arr(i, 1) + Arr(i, 1) * (D / 100))
      Brr(i, 2) = Int(Arr(i, 1) + Arr(i, 1) * (D / -100))
    End If
    Next
Next
[X2:Y246] = Brr
End Sub
 

If IsNumeric(Arr(i, 1)) Then 也可這樣判斷(是數值才計算)
 
 
作者: 韋弘智    時間: 2017-5-11 21:26

回復 3# 准提部林


謝謝您,我理解如何使用Not IsError和IsNumeric了,因為初心者的關係,在google總不能有效地輸入關鍵字,導致事倍功半,另外想跟你確定宣告X及Y是指X軸與Y軸的意思吧?(這方面我還得學習學習)
作者: 韋弘智    時間: 2017-5-11 21:27

回復 2# ikboy


  謝謝您,回復協助我,我已經學會及解決這個問題了,謝謝:D
作者: bioleon69    時間: 2017-5-13 12:56

直接用on error resume next 跟
IsNumeric
Not IsError
會有差別嗎?
(執行上,或者速度)
謝謝^^
作者: rogersg    時間: 2017-5-18 21:38

回復 4# 韋弘智
是宣告變數不是X軸或Y軸喔




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)