Board logo

標題: [發問] 想請問欄位紀錄最大最小值得最佳做法 [打印本頁]

作者: saleen    時間: 2015-1-8 22:46     標題: 想請問欄位紀錄最大最小值得最佳做法

假設我有一個欄位 A1
裡面的數字是隨時在變動的
如果我想把這個不斷變動的數字的最大值記錄在 B1
最小值記錄在 B2

這樣的話
似乎無可避免一定要用到 Timer 以每秒 (或每百毫秒) 來不斷跑一段 Sub

會造成效能低落的問題

想請教有沒有大大有更好的做法可以提供 ><
感謝 !
作者: PKKO    時間: 2015-1-9 01:53

回復 1# saleen

不曉得您所謂一值變動,指的是多久變動一次
如果一值變動,您的工作表也無法運作?

如果不是一值變動
試試看下面程式碼
放在該Sheet內即可使用
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2.     If Cells(1, 1) > Cells(1, 2) Then
  3.         Cells(1, 2) = Cells(1, 1)
  4.     ElseIf Cells(1, 1) < Cells(2, 2) Then
  5.         Cells(2, 2) = Cells(1, 1)
  6.     End If
  7. End Sub
複製代碼

作者: saleen    時間: 2015-1-9 14:03

回復 2# PKKO


    hi 大大您好
那可以只針對當 [A1] 這個欄位變動時
才去執行程式嗎 ?
作者: saleen    時間: 2015-1-9 14:30

回復 2# PKKO


    大大您好 : 可以幫看小妹這樣寫為什麼沒作用嗎 ?
[attach]20040[/attach]
作者: PKKO    時間: 2015-1-9 14:43

本帖最後由 PKKO 於 2015-1-9 14:45 編輯

回復 4# saleen
[attach]20041[/attach]
一、您的程式要放在該sheet的模組內才有效果
二、您的with 不能連接著sheet,要分開如下
三、不屬於開啟或儲存或關閉或作用中的程式類別,不太需要放在ThisWorkbook的模組內
四、下面的[B1]這種寫法,運算速度比range("B1")還慢,最快的是cells(1,2),若您的資料時常在變,最好用最快速的運作方式
若指定A1變動才變動,如下請試試看
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2.     If Target.Address <> "$A$1" Then Exit Sub
  3.     With Sheets("Sheet1")
  4.         If [B1] > [A1] Then
  5.             [B1] = [A1]
  6.         ElseIf [C1] < [A1] Then
  7.             [C1] = [A1]
  8.         End If
  9.     End With
  10. End Sub
複製代碼

作者: saleen    時間: 2015-1-9 17:26

回復 5# PKKO


   太感謝 P 大了 !!
這就是小妹想要的效果了 , 效率又好 ~ 感謝 P 大 ^^
關於這行
If Target.Address <> "$A$1" Then Exit Sub
是指只有當 A1 變動時才會記錄對吧
那如果我有多項的話就要這樣寫對不對
If Target.Address <> "$A$1" Then Exit Sub
If Target.Address <> "$A$2" Then Exit Sub
If Target.Address <> "$A$3" Then Exit Sub
作者: PKKO    時間: 2015-1-10 13:07

回復 6# saleen
如果這樣寫,只要不是A1就會跳出了哦
If Target.Address <> "$A$1" Then Exit Sub
If Target.Address <> "$A$2" Then Exit Sub
If Target.Address <> "$A$3" Then Exit Sub

必須要改成
  1. Select Case Target.Address
  2.     Case "$A$1"
  3.         MsgBox "!!"
  4.         
  5.     Case "$A$2"
  6.         MsgBox "!!"
  7.         
  8.     Case Else
  9.         Exit Sub
  10.     End Select
複製代碼
當然程式寫法非常多種,也可以用if +elseif
如果CASE裡面執行程式碼都相同,也可以用GOTO 或是 CALL 來執行相同程式碼
作者: saleen    時間: 2015-1-19 13:26

[attach]20096[/attach]回復 7# PKKO


    抱歉了 P 大
小妹又有問題 @@
小妹發現如果是 DDE 參照的話好像就不會觸發這個 worksheet_change 事件...
而且不論是抓出 value 還是去參照 value 都沒辦法觸發..
附上參考檔請 P 大看看




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