返回列表 上一主題 發帖

[發問] 請教如何修改程式來提高執行效率呢?

回復 20# Andy2483

應該是誤刪,不好意思

TOP

回復 21# 藍天麗池


[J23]值是 2 是固定的嗎? 還是變動的?
[J23:J27] [M23:M27] 值都被引用,但是都沒有被程式變動其值,所以是固定值嗎?
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

本帖最後由 藍天麗池 於 2024-1-18 15:35 編輯

回復 22# Andy2483
J23到m27的值不用管,那個只是我為了測試不同變動速度,程式是否能執行的更有效率用的,d2的值我常會用不同的變動速度去取代,用來觀察效率,一般d2的值是k10+L10

TOP

本帖最後由 Andy2483 於 2024-1-18 16:22 編輯

回復 23# 藍天麗池


所以D2的值用 =k10+L10 計算?
這樣就單純多了
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

回復 24# Andy2483


    所以Andy有甚麼想法了嗎?

TOP

回復 25# 藍天麗池


    有規劃好了,明天再繼續實現看看
還有一點想請教A2到E2可以不要寫入,只寫入在最後列嗎?
因為每次寫入儲存格都會需要時間

我想設計用VBA的陣列記錄10列再寫入A-E欄的後方,適合嗎?
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

本帖最後由 藍天麗池 於 2024-1-18 22:53 編輯

回復 26# Andy2483


不要寫入?我記錄後會將記錄的值再做運算,沒紀錄能在運算嗎?
我B欄跟C欄的值會每分鐘(這就是我A欄要記錄時間的原因)再做計算,沒紀錄的話我就無法運算,所以我不太懂你的不要寫入指的是啥意思

TOP

回復 26# Andy2483


    其實你不用管我範例也無妨,之前不丟範例就是怕版上的人被範例的思維帶著走
我要的重點很簡單,資料源是J5-M10,將J5-M10變動後的差值記錄下來做運算,僅此而已

TOP

本帖最後由 Andy2483 於 2024-1-19 10:02 編輯

回復 28# 藍天麗池


    謝謝論壇,謝謝前輩耐心的等待,後學藉此帖學到很多知識,但不知道可不可行,我用兩個活頁簿之間的公式做測試每秒可以記錄300列,DDE沒用過,請前輩試試看,計算邏輯可能需要視需求調整,沒有研究這些計算的意義
使用的方法是只留[B1]裡有公式,這公式只是為了讓程式收到DDE變動值觸動 Private Sub Worksheet_Calculate() ,公式是所有DDE值相加的和而已 沒什麼意義 其他由VBA執行,字典key當變數,item當計算值


變動記錄_20240119.zip (28.87 KB)

工作表模組:
Option Explicit
Private Sub Worksheet_Calculate()
Call Price
End Sub

一般模組:
Option Explicit
Public Z, BBS(1 To 5), BB(1 To 5), BA(1 To 5), BAS(1 To 5), FBS$, FAS$, E_2$, TT$, A(1 To 1, 1 To 5), j%
Sub Price()
If Not IsObject(Z) Then'一開始的[B1]公式建立
   Set Z = CreateObject("Scripting.Dictionary")
   BBS(1) = "=XQTISC|Quote!'FITXN*1.TF-BestBidSize1'"
   BBS(2) = "=XQTISC|Quote!'FITXN*1.TF-BestBidSize2'"
   BBS(3) = "=XQTISC|Quote!'FITXN*1.TF-BestBidSize3'"
   BBS(4) = "=XQTISC|Quote!'FITXN*1.TF-BestBidSize4'"
   BBS(5) = "=XQTISC|Quote!'FITXN*1.TF-BestBidSize5'"
   
   BB(1) = "=XQTISC|Quote!'FITXN*1.TF-BestBid1'"
   BB(2) = "=XQTISC|Quote!'FITXN*1.TF-BestBid2'"
   BB(3) = "=XQTISC|Quote!'FITXN*1.TF-BestBid3'"
   BB(4) = "=XQTISC|Quote!'FITXN*1.TF-BestBid4'"
   BB(5) = "=XQTISC|Quote!'FITXN*1.TF-BestBid5'"
   
   BA(1) = "=XQTISC|Quote!'FITXN*1.TF-BestAsk1'"
   BA(2) = "=XQTISC|Quote!'FITXN*1.TF-BestAsk2'"
   BA(3) = "=XQTISC|Quote!'FITXN*1.TF-BestAsk3'"
   BA(4) = "=XQTISC|Quote!'FITXN*1.TF-BestAsk4'"
   BA(5) = "=XQTISC|Quote!'FITXN*1.TF-BestAsk5'"
   
   BAS(1) = "=XQTISC|Quote!'FITXN*1.TF-BestAskSize1'"
   BAS(2) = "=XQTISC|Quote!'FITXN*1.TF-BestAskSize2'"
   BAS(3) = "=XQTISC|Quote!'FITXN*1.TF-BestAskSize3'"
   BAS(4) = "=XQTISC|Quote!'FITXN*1.TF-BestAskSize4'"
   BAS(5) = "=XQTISC|Quote!'FITXN*1.TF-BestAskSize5'"
   
   FBS = "=XQTISC|Quote!'FITXN*1.TF-FiveBidSize'"
   FAS = "=XQTISC|Quote!'FITXN*1.TF-FiveAskSize'"
   E_2 = "=VALUE(HOUR(NOW())&IF(LEN(MINUTE(NOW()))=1,0&MINUTE(NOW()),MINUTE(NOW()))&IF(LEN(SECOND(NOW()))=1,0&SECOND(NOW()),SECOND(NOW())))"
   TT = "=(" & Mid(FBS, 2) & "+" & Mid(FAS, 2)
   For j = 1 To 5
      TT = TT & "+" & Mid(BBS(j), 2) & "+" & Mid(BB(j), 2) & "+" & Mid(BA(j), 2) & "+" & Mid(BAS(j), 2)
   Next
   TT = TT & ")"
   ThisWorkbook.Sheets(1).[B1] = TT
End If
'=================================================================================
'以下是以字典key計算DDE值
Z("J5") = Evaluate(BBS(1)): Z("J6") = Evaluate(BBS(2)): Z("J7") = Evaluate(BBS(3)): Z("J8") = Evaluate(BBS(4)): Z("J9") = Evaluate(BBS(5))
Z("K5") = Evaluate(BB(1)): Z("K6") = Evaluate(BB(2)): Z("K7") = Evaluate(BB(3)): Z("K8") = Evaluate(BB(4)): Z("K9") = Evaluate(BB(5))
Z("L5") = Evaluate(BA(1)): Z("L6") = Evaluate(BA(2)): Z("L7") = Evaluate(BA(3)): Z("L8") = Evaluate(BA(4)): Z("L9") = Evaluate(BA(5))
Z("M5") = Evaluate(BAS(1)): Z("M6") = Evaluate(BAS(2)): Z("M7") = Evaluate(BAS(3)): Z("M8") = Evaluate(BAS(4)): Z("M9") = Evaluate(BAS(5))
Z("K10") = Evaluate(FBS): Z("L10") = Evaluate(FAS)

'以下是計算,應該很眼熟,只是把儲存格置換成key而已
Z("K12") = Z("K10") + Z("L10")
If Z("K12") <> Z("L12") Then
   Z("I14") = 0
   If Z("K14") = Z("K5") Then
      Z("I14") = Z("J5") - Z("J14")
      ElseIf Z("K14") = Z("K6") Then
         Z("I15") = Z("J6") - Z("J14")
   End If
   Z("I15") = 0
   If Z("K15") = Z("K5") Then
      Z("I15") = Z("J5") - Z("J15")
      ElseIf Z("K15") = Z("K6") Then
         Z("I15") = Z("J6") - Z("J15")
      ElseIf Z("K15") = Z("K7") Then
         Z("I15") = Z("J7") - Z("J15")
   End If
   Z("I16") = 0
   If Z("K16") = Z("K6") Then
      Z("I16") = Z("J6") - Z("J16")
      ElseIf Z("K16") = Z("K7") Then
         Z("I16") = Z("J7") - Z("J16")
      ElseIf Z("K16") = Z("K8") Then
         Z("I16") = Z("J8") - Z("J16")
   End If
   Z("I17") = 0
   If Z("K17") = Z("K7") Then
      Z("I17") = Z("J7") - Z("J17")
      ElseIf Z("K17") = Z("K8") Then
         Z("I17") = Z("J8") - Z("J17")
      ElseIf Z("K17") = Z("K9") Then
         Z("I17") = Z("J9") - Z("J17")
   End If
   Z("I18") = 0
   If Z("K18") = Z("K8") Then
      Z("I18") = Z("J8") - Z("J18")
      ElseIf Z("K18") = Z("K9") Then
         Z("I18") = Z("J9") - Z("J18")
   End If
   Z("N14") = 0
   If Z("L14") = Z("L5") Then
      Z("N14") = Z("M5") - Z("M14")
      ElseIf Z("L14") = Z("L6") Then
         Z("N14") = Z("M6") - Z("M14")
   End If
   Z("N15") = 0
   If Z("L15") = Z("L5") Then
      Z("N15") = Z("M5") - Z("M15")
      ElseIf Z("L15") = Z("L6") Then
         Z("N15") = Z("M6") - Z("M15")
      ElseIf Z("L15") = Z("L7") Then
         Z("N15") = Z("M7") - Z("M15")
   End If
   Z("N16") = 0
   If Z("L16") = Z("L6") Then
      Z("N16") = Z("M6") - Z("M16")
      ElseIf Z("L16") = Z("L7") Then
         Z("N16") = Z("M7") - Z("M16")
      ElseIf Z("L16") = Z("L8") Then
         Z("N16") = Z("M8") - Z("M16")
   End If
   Z("N17") = 0
   If Z("L17") = Z("L7") Then
      Z("N17") = Z("M7") - Z("M17")
      ElseIf Z("L17") = Z("L8") Then
         Z("N17") = Z("M8") - Z("M17")
      ElseIf Z("L17") = Z("L9") Then
         Z("N17") = Z("M9") - Z("M17")
   End If
   Z("N18") = 0
   If Z("L18") = Z("L8") Then
      Z("N18") = Z("M8") - Z("M18")
      ElseIf Z("L18") = Z("L9") Then
         Z("N18") = Z("M9") - Z("M18")
   End If

'以下是 [J14:M19] = [J5:M10].Value 以字典方式轉換
   Z("J14") = Z("J5"): Z("J15") = Z("J6"): Z("J16") = Z("J7"): Z("J17") = Z("J8"): Z("J18") = Z("J9"): Z("J19") = Z("J10")
   Z("L14") = Z("L5"): Z("L15") = Z("L6"): Z("L16") = Z("L7"): Z("L17") = Z("L8"): Z("L18") = Z("L9"): Z("L19") = Z("L10")
   Z("M14") = Z("M5"): Z("M15") = Z("M6"): Z("M16") = Z("M7"): Z("M17") = Z("M8"): Z("M18") = Z("M9"): Z("M19") = Z("M10")
End If

'以下是 將計算值帶入A陣列並寫入儲存格
Z("L12") = Z("K19") + Z("L19")
Z("A2") = Format(Now, "HH:MM:SS")
Z("B2") = Z("I14") + Z("I15") + Z("I16") + Z("I17") + Z("I18")
Z("C2") = Z("N14") + Z("N15") + Z("N16") + Z("N17") + Z("N18")
Z("D2") = Z("K10") + Z("L10")
Z("E2") = Evaluate(E_2)
A(1, 1) = Z("A2"): A(1, 2) = Z("B2"): A(1, 3) = Z("C2"): A(1, 4) = Z("D2"): A(1, 5) = Z("E2")
ThisWorkbook.Sheets(1).Cells(Rows.Count, "A").End(3)(2).Resize(, 5) = A
Application.EnableEvents = True
End Sub

Sub 清除()
[A3].Resize(1000000, 5).ClearContents: ActiveWindow.ScrollRow = 1
End Sub

Sub 自動重算()
Application.Calculation = xlAutomatic
End Sub

Sub 手動重算()
Application.Calculation = xlManual
End Sub
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

回復 29# Andy2483


   我下載下來了,但要如何使用阿?這個程式碼已經超出我目前能理解的範圍了
打開後點自動重算?

TOP

        靜思自在 : 改變自己是自救,影響別人是救人。
返回列表 上一主題