返回列表 上一主題 發帖

[發問] 想請問欄位紀錄最大最小值得最佳做法

[發問] 想請問欄位紀錄最大最小值得最佳做法

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

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

會造成效能低落的問題

想請教有沒有大大有更好的做法可以提供 ><
感謝 !
小妹在此向各位大大求教了 Orz

回復 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
複製代碼
PKKO

TOP

回復 2# PKKO


    hi 大大您好
那可以只針對當 [A1] 這個欄位變動時
才去執行程式嗎 ?
小妹在此向各位大大求教了 Orz

TOP

回復 2# PKKO


    大大您好 : 可以幫看小妹這樣寫為什麼沒作用嗎 ?
Tes.rar (12.03 KB)
小妹在此向各位大大求教了 Orz

TOP

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

回復 4# saleen
Tes.rar (12.26 KB)
一、您的程式要放在該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
複製代碼
PKKO

TOP

回復 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
小妹在此向各位大大求教了 Orz

TOP

回復 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 來執行相同程式碼
PKKO

TOP

Wc.rar (13.21 KB) 回復 7# PKKO


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

TOP

        靜思自在 : 【蒙蔽的自由】人常在什麼都可以自由自在的時候,卻被這種隨心所欲的自由蒙蔽,虛擲時光而毫無覺知。
返回列表 上一主題