返回列表 上一主題 發帖

價格紀錄的語法有寫錯嗎??

本帖最後由 藍天麗池 於 2016-4-8 10:15 編輯

回復 15# c_c_lai


    C大,沒錯,但是可以讓中間的空格不見,也就是說資料是連續的,以台積電來說上圖示出現在B10-C11,讓資料連續,出現在B8-C9,這樣可以嗎??

TOP

回復 14# 藍天麗池
是這樣嗎?

TOP

回復 13# c_c_lai

C大,因為每支股票的成交時間不太一樣,所以要分開寫入,不然計算上會有重疊

假設台積電9:01分有成交,其他沒成交,如果全部往下寫入,其他的沒成交也會寫入,這樣造成每支股票的成交量在計算上會重複,而且如果分開寫入資料量也互比較少不是嗎??

TOP

回復 12# 藍天麗池
不太明瞭 "如果C2變動就往下紀錄B2-C2,但是其他不紀錄",是甚麼意思?
你的 RecordPrice() 一次便寫入 A:U 啊。何謂 "其他不紀錄" ?

TOP

本帖最後由 藍天麗池 於 2016-4-7 22:50 編輯

回復 11# c_c_lai

股票.rar (18.4 KB)

C大再請教你一下,我之前的程式碼是設定為某一個值變動就紀錄,那想請教一下C大如果我的變動值變多個的化程式碼要如何更改??

例:如圖所示,如果C2變動就往下紀錄B2-C2,但是其他不紀錄,下個時間C2沒變動換E2變動,則記錄D2-E2,一樣其他不紀錄,以此類推,我的變動值原本只有設定If (WR = 3) Or _  (Range("C" & WR - 1) <> Range("C2")) Then '總量有異動時才記錄,我現在要設定多個,所有量的部分都設定為變動就紀錄,要如何更改程式碼呢??

TOP

本帖最後由 c_c_lai 於 2016-3-22 13:17 編輯

回復 8# 藍天麗池
Sheets  -  shtRTD (RTD)
原本內容:
  1. Option Explicit

  2. Private Sub Worksheet_Calculate()
  3.     Call RecordPrice
  4. End Sub
複製代碼
將它移除掉,修改為:
  1. Option Explicit

  2. Private Sub Worksheet_Change(ByVal Target As Range)
  3.     '  當 B2 欄位有異動時, 則去呼叫 RecordPrice 的方法 (Method)。
  4.     If Target.Address = "$B$2" Then Call RecordPrice
  5. End Sub
複製代碼
假設:
如你欲將原本之 :
  1.   A                  B            C                 D
  2. 時間                總量               
  3. 22:38:54        8734.54        2238        8734.54
複製代碼
更改為從 D 欄開始重新佈局成:
  1.   C                 D             E                 F
  2. 時間                總量               
  3. 22:38:54        8734.54        2238        8734.54
複製代碼
則將上述之 Worksheet_Change 請修正為:
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2.     '  當 D2 欄位有異動時, 則去呼叫 RecordPrice 的方法 (Method)。
  3.     If Target.Address = "$D$2" Then Call RecordPrice
  4. End Sub
複製代碼
另外, Module1 內之 RecordPrice 裡的模組:
  1. Option Explicit

  2. Sub RecordPrice()
  3.     Dim WR As Long

  4.     If Range("D2") < 1 Then Exit Sub

  5.     WR = Range("A1").End(xlDown).Row + 1
  6.     '  ActiveWindow.ScrollRow = WR - 5           '  只顯示最新幾筆資料
  7.     If (WR = 3) Or _
  8.        (Range("B" & WR - 1) <> Range("B2")) Then '  總量有異動時才記錄
  9.         Cells(WR, 1).Resize(, 3) = [A2:C2].Value
  10.     End If
  11. End Sub
複製代碼
更換為:
  1. Option Explicit

  2. Sub RecordPrice()
  3.     Dim WR As Long

  4.     If Range("F2") < 1 Then Exit Sub

  5.     WR = Range("C1").End(xlDown).Row + 1
  6.     '  ActiveWindow.ScrollRow = WR - 5           '  只顯示最新幾筆資料
  7.     If (WR = 3) Or _
  8.        (Range("D" & WR - 1) <> Range("D2")) Then '  總量有異動時才記錄
  9.         Cells(WR, 3).Resize(, 3) = [C2:E2].Value
  10.     End If
  11. End Sub
複製代碼

TOP

回復 9# c_c_lai


    C大我會錯意了,剛剛沒看到你前面有 ',把程式mark掉所以我才覺得奇怪,看到後就沒問題了

TOP

回復 8# 藍天麗池
先回答你第一個問題:
  1. If (WR = 3) Or _
  2.     (Range("B" & WR - 1) <> Range("B2")) Then ' 總量有異動時才記錄
  3.      For I = 1 To 3
  4.          Cells(WR, I) = Cells(2, I)
  5.      Next
  6. End If
複製代碼
從 For ~ Next 改為下列一次功夫就填入值 (Assign Value) 的方式,
你說是哪個處理較快速?
  1. If (WR = 3) Or _
  2.     (Range("B" & WR - 1) <> Range("B2")) Then ' 總量有異動時才記錄
  3.     Cells(WR, 1).Resize(, 3) = [A2:C2].Value
  4. End If
複製代碼

TOP

本帖最後由 藍天麗池 於 2016-3-22 08:32 編輯

回復 7# c_c_lai


  1.  C大我不太懂,為什麼多了Cells(WR, 1).Resize(, 3) = [A2:C2].Value這一行程式碼執行數度會加快??

2.另外再請教你一個問題,如果目前是將A2-C2的資料往下寫,改成把資料放在C2-E2然後往下寫要怎麼改程式碼??
就是將圖一改成圖二,上圖不是改好的,是我用拉的

3.以下是J大寫的,請教C大用Excel.Application.EnableEvents 跟你的用change哪種比較快??
Excel.Application.EnableEvents = 0
WR = Range("A1").End(xlDown).Row + 1
'ActiveWindow.ScrollRow = WR - 5 '只顯示最新幾筆資料
If (WR = 3) Or _
   (Range("B" & WR - 1) <> Range("B2")) Then '總量有異動時才記錄
    For I = 1 To 3
    Cells(WR, I) = Cells(2, I)
    Next
End If
Excel.Application.EnableEvents = 1

TOP

本帖最後由 c_c_lai 於 2016-3-22 06:53 編輯

回復 6# 藍天麗池
取代你原先 Sheets("RTD") 裡的 Worksheet_Calculate()。
又,你 目前 "模組1" RecordPrice 裡的 For ~ Next 運算式可以
用下列方式取代,以節省處裡時間:
  1.    '  For I = 1 To 3
  2.    '      Cells(WR, I) = Cells(2, I)
  3.    '  Next I
  4.    Cells(WR, 1).Resize(, 3) = [A2:C2].Value
複製代碼

TOP

        靜思自在 : 一個人不怕錯,就怕不改過,改過並不難。
返回列表 上一主題