返回列表 上一主題 發帖

[發問] 詢問一個紀錄開高低收價的VBA問題

回復 1# laieven
試試看
  1. Option Explicit
  2. Private Sub Worksheet_Calculate()
  3.     Dim StartTime As Date, StopTime As Date
  4.     Dim T(1 To 3) As Double, xMax As Double, xMin As Double
  5.     Dim 成交價 As Range
  6.     Static Rng As Range, S As Integer
  7.    
  8.     StartTime = Range("A6") '開盤時間, 例如: "09:00:00 AM"
  9.     StopTime = Range("A7")  '收盤時間, 例如: "01:30:00 PM"
  10.     If Time <= StartTime Or Time > StopTime Then '尚未開盤 或 已經收盤
  11.         Set Rng = Nothing
  12.         Exit Sub
  13.     End If
  14.     Set 成交價 = Range("A2")
  15.      '****分鐘設定******
  16.     'T(1) = Application.Text(StartTime, "[M]")  '開盤時的分鐘數
  17.     'T(2) = Application.Text(Time, "[M]")       'Now的分鐘數
  18.     'T(3) = Round(((T(2) - T(1)) / 5))          '開盤後每時5分鐘的間隔次數
  19.       
  20.       '*** 秒數設定
  21.     T(1) = Application.Text(StartTime, "[S]")    '開盤時的秒數
  22.     T(2) = Application.Text(Time, "[S]")         'Now的秒數
  23.     T(3) = Round(((T(2) - T(1)) / 10))           '開盤後每10秒的間隔次數
  24.    
  25.     If Rng Is Nothing Then Set Rng = Range("D1").Resize(, 4)
  26.     xMax = Application.Max(Rng)                 '歷史最高價
  27.     xMin = Application.Min(Rng)                 '歷史最低價
  28.    
  29.     If S = T(3) Then                               '設定的時間間隔內
  30.         If 成交價 > xMax Then Rng.Cells(1, 2) = 成交價      '最高價
  31.         If 成交價 < xMin Then Rng.Cells(1, 3) = 成交價      '最高價
  32.         Rng.Cells(1, 4) = 成交價                            '收盤價
  33.     ElseIf S <> T(3) Then
  34.         Set Rng = Rng.Offset(1)                   '下一列
  35.         Rng.Resize(, 4) = 成交價
  36.         Cells(Rng.Row, "c") = Time  '查看時間的間隔,如不需要可刪除掉
  37.     End If
  38.     S = T(3)
  39. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

        靜思自在 : 脾氣嘴巴不好,心地再好也不能算是好人。
返回列表 上一主題