Board logo

標題: [發問] 簡化程式 [打印本頁]

作者: gelai01000001    時間: 2013-8-16 00:55     標題: 簡化程式

剛剛開始學習VBA程式想請問各位專家可以簡化的方法
假設我的資料有(C2:C500)

Sub abc()

'判斷歷史最大值是否大於目前值,並以最大值更新歷史最大值
If Worksheets("Sheet1").Range("C2") < Worksheets("Sheet1").Range("B2").Value Then
    Worksheets("Sheet1").Range("C2").Value = Worksheets("Sheet1").Range("B2").Value

End If

If Worksheets("Sheet1").Range("C3") < Worksheets("Sheet1").Range("B3").Value Then
    Worksheets("Sheet1").Range("C3").Value = Worksheets("Sheet1").Range("B3").Value

End If

If Worksheets("Sheet1").Range("C4") < Worksheets("Sheet1").Range("B4").Value Then
    Worksheets("Sheet1").Range("C4").Value = Worksheets("Sheet1").Range("B4").Value

End If

End Sub
感謝教導
作者: owen06    時間: 2013-8-16 07:52

回復 1# gelai01000001

這樣應該有符合你的需求吧

Sub abc()
For i = 2 To 4
'判斷歷史最大值是否大於目前值,並以最大值更新歷史最大值
If Sheet1.Cells(i, 3) < Sheet1.Cells(i, 2).Value Then
     Sheet1.Cells(i, 3) = Sheet1.Cells(i, 2).Value
End If
Next
End Sub
作者: gelai01000001    時間: 2013-8-17 00:34

感謝Owen06前輩專家的指導
簡化過後的語法確實我想要得
For i = 2 To 4
修改
For i = 2 to 500即可運行又多了解Cells語法的應用
作者: gelai01000001    時間: 2013-8-17 01:46

Owen06前輩不好意思!執行程式過程又出現一些問題想再請教一下

如果"B欄位"當中任何1列出現(#N/A、--、或非數值)的值,則會停止運算該如何處理

B欄           C欄
數值        最大值
38.95        38.95
37.95        37.95
13.85        13.85
19.6        19.6
10.45        10.45
14.95        14.95
55.8        55.8
23.6        23.6
#N/A        (跳出"型態不符合"的警告文字視窗)
21.5       
14.8
作者: c_c_lai    時間: 2013-8-17 08:46

回復 4# gelai01000001
  1. Sub test()
  2.     For i = 1 To 5           
  3.         '  判斷歷史最大值是否大於目前值,並以最大值更新歷史最大值
  4.         If Not IsError(Sheet1.Cells(i, 2)) Then
  5.              If Sheet1.Cells(i, 3) < Sheet1.Cells(i, 2).Value Then _
  6.                  Sheet1.Cells(i, 3) = Sheet1.Cells(i, 2).Value
  7.         End If
  8.     Next
  9. End Sub
複製代碼

作者: owen06    時間: 2013-8-17 14:13

回復 4# gelai01000001


Sub try2()
For Each mr In Range([b2], [b65536].End(xlUp))
If Not IsError(mr) Then
   If mr.Value > mr.Offset(0, 1).Value Then _
      mr.Offset(0, 1).Value = mr.Value
End If
Next
End Sub
作者: owen06    時間: 2013-8-17 14:32

回復 4# gelai01000001

今天系統怪怪的,所以沒辦法在同一篇回覆…
如果你的資料會一直新增下去的話,改成上面的方法會比較適當,
才不用常常在那邊改i=2 to x,也不用預設太多,讓程式多跑那些空資料格,
這些也都是我剛從版上的前輩們那學來的,一起加油吧~
作者: gelai01000001    時間: 2013-8-18 15:02

感謝Owen06、c_c_lai前輩專家熱心的指導解惑

兩種程式都測試過了可運算無誤呢!
可是執行程式時發現〈try2()的運算時間會少於test()〉。

謝謝啦!




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