Board logo

標題: 變動紀錄的程式 [打印本頁]

作者: 藍天麗池    時間: 2016-3-21 09:54     標題: 變動紀錄的程式

請教一下版上大大,如果要寫一個價格變動就記錄的程式要如何寫??
A2=時間、B2=價格
一開始先將A2跟B2寫在A3和B3,然後對比B3跟B2的值,如果不相等就將A2、B2的值寫在A4、B4,一直往下寫,像這樣的程式要如何寫呢??

如果可以還請版上大大寫個範例讓我參考,感謝
作者: jackyq    時間: 2016-3-21 10:20

寫法就和大大的這篇 http://forum.twbts.com/thread-16677-1-1.html  一樣

只是你裡面有一段寫錯

(Range("B" & WR - 1) <> Range("B2")) Then '總量有異動時才記錄

(Range("B" & (WR - 1)) <> Range("B2")) Then
作者: jackyq    時間: 2016-3-21 12:18

呃,  我搞烏龍了
這樣才對

Sub RecordPrice()
Dim WR As Long
Dim I As Byte


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

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


'For I = 1 To 10
'   Cells(WR, I) = Cells(2, I)
'Next 'I
End Sub
作者: 藍天麗池    時間: 2016-3-21 23:18

回復 3# jackyq

[attach]23515[/attach][attach]23516[/attach]
大大你好厲害,另外再請教你一個問題,如果目前是將A2-C2的資料往下寫,改成把資料放在C2-E2然後往下寫要怎麼改程式碼??
就是將圖一改成圖二,上圖不是改好的,是我用拉的
作者: jackyq    時間: 2016-3-22 00:41

不不, 我不厲害, 這個其他大大都知道, 他們忙而已


Sub RecordPrice()
Dim WR As Long
Dim I As Byte

Excel.Application.EnableEvents = 0

Dim DDE_總量 As Range
Set DDE_總量 = Range("D2")
   
If IsError(DDE_總量.Value) Then Exit Sub
If DDE_總量.Value <= 0 Then Exit Sub

WR = DDE_總量.CurrentRegion.Row + DDE_總量.CurrentRegion.Rows.Count
'ActiveWindow.ScrollRow = WR - 5 '只顯示最新幾筆資料
If (WR = 3) Or _
   (Cells(WR - 1, DDE_總量.Column) <> DDE_總量.Value) Then       '總量有異動時才記錄
    Cells(WR, DDE_總量.Column).Offset(, -1).Resize(, 3).Value = _
                      DDE_總量.Offset(, -1).Resize(, 3).Value
End If

Excel.Application.EnableEvents = 1
End Sub
作者: 藍天麗池    時間: 2016-3-22 08:30

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

回復 5# jackyq

J大,裡面的(DDE_總量),是要用甚麼替換嗎,我看不太懂是甚麼意思??
可以幫我說明一下嗎??
我原附件裡面沒有這個東西,感謝你喔

測試後沒有動作
作者: jackyq    時間: 2016-3-22 08:40

本帖最後由 jackyq 於 2016-3-22 08:41 編輯

因為你說你要換位置ㄚ
原本總量的 DDE 在  B2 那就寫成 Set DDE_總量 = Range("B2")
如果總量的 DDE 搬到  D2 那就寫成 Set DDE_總量 = Range("D2")
其他的都不用改
如果堅持用原先那個
每次換位置就要修改不少地方


Sub RecordPrice()
Dim WR As Long
Dim I As Byte


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

Excel.Application.EnableEvents = 0

WR = Range("C1").End(xlDown).Row + 1
'ActiveWindow.ScrollRow = WR - 5 '只顯示最新幾筆資料
If (WR = 3) Or _
   (Range("D" & WR - 1) <> Range("D2")) Then '總量有異動時才記錄
    For I = 3 To 5
    Cells(WR, I) = Cells(2, I)
    Next
End If


Excel.Application.EnableEvents = 1

'For I = 1 To 10
'   Cells(WR, I) = Cells(2, I)
'Next 'I
End Sub
作者: 藍天麗池    時間: 2016-3-22 08:58

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

回復 7# jackyq
C大我了解了,感謝妳我試試看
可是用你的版本我測試是沒有動作的
作者: jackyq    時間: 2016-3-22 09:12

哪個版本? ..............
作者: 藍天麗池    時間: 2016-3-22 09:13

回復 9# jackyq

這個,我甚麼都沒改
    Sub RecordPrice()
Dim WR As Long
Dim I As Byte

Excel.Application.EnableEvents = 0

Dim DDE_總量 As Range
Set DDE_總量 = Range("D2")
   
If IsError(DDE_總量.Value) Then Exit Sub
If DDE_總量.Value <= 0 Then Exit Sub

WR = DDE_總量.CurrentRegion.Row + DDE_總量.CurrentRegion.Rows.Count
'ActiveWindow.ScrollRow = WR - 5 '只顯示最新幾筆資料
If (WR = 3) Or _
   (Cells(WR - 1, DDE_總量.Column) <> DDE_總量.Value) Then       '總量有異動時才記錄
    Cells(WR, DDE_總量.Column).Offset(, -1).Resize(, 3).Value = _
                      DDE_總量.Offset(, -1).Resize(, 3).Value
End If

Excel.Application.EnableEvents = 1
End Sub
作者: jackyq    時間: 2016-3-22 09:17

有可能執行到 Excel.Application.EnableEvents = 0 時
還沒執行到 Excel.Application.EnableEvents = 1 就貝你中途 Stop 掉
那你的事件就不會在觸發
OR 其他原因.... 沒檔案沒真相
作者: 藍天麗池    時間: 2016-3-22 09:22

[attach]23519[/attach]回復 11# jackyq


    請大大看看
作者: jackyq    時間: 2016-3-22 09:32

改成這樣

    Sub RecordPrice()
Dim WR As Long
Dim I As Byte

Dim DDE_總量 As Range
Set DDE_總量 = Range("D2")
   
If IsError(DDE_總量.Value) Then Exit Sub
If DDE_總量.Value <= 0 Then Exit Sub

WR = DDE_總量.CurrentRegion.Row + DDE_總量.CurrentRegion.Rows.Count
'ActiveWindow.ScrollRow = WR - 5 '只顯示最新幾筆資料
If (WR = 3) Or _
   (Cells(WR - 1, DDE_總量.Column) <> DDE_總量.Value) Then       '總量有異動時才記錄

    Excel.Application.EnableEvents = 0

    Cells(WR, DDE_總量.Column).Offset(, -1).Resize(, 3).Value = _
                      DDE_總量.Offset(, -1).Resize(, 3).Value

    Excel.Application.EnableEvents = 1
End If

End Sub
作者: jackyq    時間: 2016-3-22 09:36

存檔後 檔案記得關閉在重開
作者: 藍天麗池    時間: 2016-3-22 09:43

回復 13# jackyq


    還是不行
作者: jackyq    時間: 2016-3-22 09:58

回復 15# 藍天麗池


    你的檔案裡面的    ThisWorkBook

Private Sub Workbook_Open()
Application.RTD.ThrottleInterval = 0
''   Application.Calculation = xlCalculationManual     -> 把這個遮罩掉後, 存檔再重開
End Sub
作者: 藍天麗池    時間: 2016-3-22 10:24

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

回復 16# jackyq
[attach]23520[/attach]
J大其實我是要將附件裡面的東西整合在一起,裡面有群益的API,我是要擷取資料,但因為群益在加權的資料有誤,所以加權的部分改用變動紀錄的方式抓取
但是我將程式結合之後去無法執行了,想請J大幫我看看,要怎麼更改,更新的部分要維持原本的2秒更新一次才行,感謝大大

J大不好意思這樣麻煩你
作者: jackyq    時間: 2016-3-22 11:08

[attach]23521[/attach]
作者: 藍天麗池    時間: 2016-3-22 11:32

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

回復 18# jackyq


    大大,這個是改好的嗎??
我是要讓資料都出現在sheet4,後面多個加權DDE是??
不太懂大大的意思
作者: jackyq    時間: 2016-3-22 11:42

sheet4 是 API 的加權報價
sheet5  = Sheets("加權DDE" )   經由 DDE 紀錄加權指數

我是要讓資料都出現在sheet4 -> 讓他出現在 sheet5  也沒差吧
作者: 藍天麗池    時間: 2016-3-22 11:44

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

回復 20# jackyq
是沒錯,但是可以同時執行嗎??
sheet4執行API,sheet5執行抓價格??
可是我剛剛試過sheet5沒動作
所以J大,我的檔案無法整合在同一個sheet嗎??
因為我到時候還會做一些運算,所以整合在同sheet裡面會比較好
作者: jackyq    時間: 2016-3-22 12:10

本帖最後由 jackyq 於 2016-3-22 12:13 編輯

(1)Sheet4 是否原始檔案的東西
還是你自己弄出來的
(2) Sheet4 你是想收集什麼東西
(3) 所有報價不事都顯示在 Sheet1, Sheet3 了
(4) 你想收集很多商品的 "歷史' 資料嗎?
作者: 藍天麗池    時間: 2016-3-22 12:19

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

回復 22# jackyq

1.sheet4是我自己改的,亂套的,哈哈
2.我必須盤中抓取歷史資料,所以要用回補資料的方式
3.我不是要抓取很多歷史資料,而是盤中要抓取當天資料做運算,我要的資料有台指和加權的tick檔

原本是台指跟加權都用API抓但是因為群益的資料有誤,所以改用變動紀錄的,如果資料有誤對下單會有影響

不知道這樣J大有了解嗎??
作者: jackyq    時間: 2016-3-22 12:28

如果只要 台指 , 加權 2種商品
為何不直接用 DDE 就好了
作者: 藍天麗池    時間: 2016-3-22 12:48

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

回復 24# jackyq


    我需要當天的所有tick做下單的判斷,一定要抓到所有tick,所以j大,我的檔案是無法整合嗎?
作者: jackyq    時間: 2016-3-22 13:02

我根本不知道大大要的整合後的排版樣子長成何種模樣
如何整合
作者: 藍天麗池    時間: 2016-3-22 13:30

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

回復 26# jackyq

j大,這樣說好了,讓我剛剛上傳的那個檔案的價格記錄部份可以work,這樣有辦法嗎?
其他部份不管,就讓sheet4那個價格記錄可以執行就好,j大讓你費心了,感謝

另外請教一下j大是哪裡人啊?
作者: 藍天麗池    時間: 2016-3-22 18:55

回復 26# jackyq


    j大,是不好整和嗎?還是我之前亂拼湊的程式碼太亂了?
作者: jackyq    時間: 2016-3-22 20:20

是不懂大大到底要整合到什麼樣子
最原始的檔案是處理總量用的是 Worksheet_Calculate 即時
後來給的檔案卻變成處理價格, 用的卻變成是定時
sheet4 上面又有 TSEA 又有 TX00
到底是要 TSEA 還是要 TX00
還是通通要
到底是要價併量, 量又要放哪裡
sheet4 上面又有 2個時間 , 2個成交價, 列位還是不互相對齊

大大不懂表達問題
束無能為力
作者: 藍天麗池    時間: 2016-3-22 20:34

回復 29# jackyq


    j大,我是api的部份抓期貨,另外的價格紀錄抓加權,這樣有比較清楚嗎?
然後兩個都用定時更新,抱歉表達不是很清楚,價格記錄部份就設定變動記錄
到時候只有TX00沒有tsae
作者: jackyq    時間: 2016-3-22 23:16

本帖最後由 jackyq 於 2016-3-22 23:18 編輯

[attach]23530[/attach]

TX00 報價收集放在 Sheets("台指") : TX00 報價來源 Sheet1.[G4]
TSEA 報價收集放在 Sheets("加權")  : TSEA 報價來源 DDE

其他排版大大自己處裡
sheet4 我不處裡
作者: 藍天麗池    時間: 2016-3-23 09:46

回復 31# jackyq


    J大謝謝你,讓你費心了
作者: 藍天麗池    時間: 2016-4-7 22:51

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

回復 31# jackyq

[attach]23752[/attach]
[attach]23753[/attach]
J大不好意思再請教你一下,我之前的程式碼是設定為某一個值變動就紀錄,那想請教一下J大如果我的變動值變多個的化程式碼要如何更改??

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




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