標題:
關於資料比對的寫法
[打印本頁]
作者:
藍天麗池
時間:
2016-7-17 21:12
標題:
關於資料比對的寫法
[attach]24684[/attach]
如果要寫兩個功能1.總量變動就將股價寫入E列
2.下次總量再變動時再將E列的資料寫入F列,作這一秒(E列)跟前一秒(F列)的股價作比對
例如:台積電 9:00:00 成交價是100元,先將100寫入E2,之後9:00:10 成交價是101,同時執行將前一秒的100元寫入F2,這一秒的101寫入E2,一直持續下去要如何寫成VBA呢??
還請版上大大幫幫忙,謝謝
作者:
c_c_lai
時間:
2016-7-18 11:47
回復
1#
藍天麗池
你是以"總量變動" 抑或是 "成交價" 做為比對標準?
請再仔細描述說明,謝謝!
作者:
藍天麗池
時間:
2016-7-18 13:02
回復
2#
c_c_lai
總量變動就寫入股價,以總量變動為條件來對比股價
c大感謝
作者:
c_c_lai
時間:
2016-7-18 20:24
回復
3#
藍天麗池
ThisWorkbook:
Private Sub Workbook_Open()
Dim rng As Variant
With Sheets(1)
For Each rng In Range(.[D2], .[D2].End(xlDown))
rng.Offset(, 26) = IIf(IsNumeric(rng), rng, 0)
rng.Offset(, 1) = IIf(IsNumeric(rng.Offset(, -1)), rng.Offset(, -1), 0)
Next
End With
End Sub
複製代碼
Sheet1:
Private Sub Worksheet_Change(ByVal Target As Range)
If Left(Target.Address, 2) = "$D" And IsNumeric(Target) Then
If Target.Offset(, 26).Value <> Target.Value Then
Target.Offset(, 26) = Target
Target.Offset(, 2) = Target.Offset(, 1)
Target.Offset(, 1) = IIf(IsNumeric(Target.Offset(, -1)), Target.Offset(, -1), 0)
End If
End If
End Sub
複製代碼
[attach]24685[/attach]
作者:
藍天麗池
時間:
2016-7-18 20:42
回復
4#
c_c_lai
C大,目前手動測試OK,明天開盤試試看
跟C大請教一下,程式碼裡面的26是甚麼阿,簡易的我還看得懂,但是無法理解裡面為什麼會有26?
作者:
c_c_lai
時間:
2016-7-18 21:11
回復
5#
藍天麗池
[attach]24691[/attach]
作者:
藍天麗池
時間:
2016-7-18 21:50
回復
6#
c_c_lai
哈哈,這樣我了解了,謝謝c大耐心解釋
作者:
藍天麗池
時間:
2016-7-19 11:01
回復
6#
c_c_lai
c大,跟你報告一下測試結果,測試後無法執行,但我用手動輸入數字卻可行,
我在想會不會是程式對於dde的數值判定有問題呢?
作者:
c_c_lai
時間:
2016-7-19 11:08
這跟我預期的一樣,因為 DDE 的匯入資料之變動
確定是不會觸發 Worksheet_Change() 的。
作者:
c_c_lai
時間:
2016-7-19 11:52
回復
8#
藍天麗池
用這個程式再試試看行不行
[attach]24695[/attach]
作者:
藍天麗池
時間:
2016-7-19 16:23
回復
9#
c_c_lai
哈哈,原來c大早就知道了,我回家再來看看程式的差別
作者:
c_c_lai
時間:
2016-7-19 16:55
回復
11#
藍天麗池
請將 ThisWorkbook 內的
.[Z1] = .[D2]
改成
.[Z1].Formula = "=D2"
如此才能觸發。
作者:
c_c_lai
時間:
2016-7-19 17:47
回復
11#
藍天麗池
我已經將 .[Z1].Formula = "=D2" 修正了。
[attach]24703[/attach]
作者:
藍天麗池
時間:
2016-7-19 21:38
本帖最後由 藍天麗池 於 2016-7-19 21:46 編輯
回復
13#
c_c_lai
謝謝C大,我明天測試後再向你報告
請教C大這次新加的z1是甚麼啊??
作者:
c_c_lai
時間:
2016-7-20 06:59
回復
14#
藍天麗池
Z1 為 Z 欄的第一行,主要用意是當 D2 DDE 匯入資料
有異動時 Z1 欄位公式 (=D2) 的內容值亦會跟著變動,
如此 Z1 數值 的變動便會觸發 Worksheet_Change()。
等確定後再來修正 AD 欄的存入值為數值、抑或是公式。
作者:
藍天麗池
時間:
2016-7-20 09:48
回復
15#
c_c_lai
c大,測試後完全沒有動作,只有dde在跳動,程式完全無法執行
作者:
c_c_lai
時間:
2016-7-20 10:37
回復
16#
藍天麗池
試試這隻程式!
[attach]24704[/attach]
作者:
藍天麗池
時間:
2016-7-20 10:45
回復
17#
c_c_lai
c大還是一樣沒有動作
作者:
c_c_lai
時間:
2016-7-20 11:05
回復
18#
藍天麗池
如此,便不能藉由 Worksheet_Change)
來處理了。
DDE 的處裡以往我是以程式來直接作業,即從開盤起,
每隔多少時間回顧一下,直到收盤為止。
但是它會占用一些CPU資源。讓我思考一下。
作者:
藍天麗池
時間:
2016-7-20 11:13
回復
19#
c_c_lai
c大,請教一下,如果用第一個程式更改程式對dde的判定或是增加輔助欄位這樣可行嗎?
作者:
c_c_lai
時間:
2016-7-20 11:13
回復
18#
藍天麗池
目前我的電腦環境裡無安裝卷商軟體,所以無從測試。
我再整理一個適合你的程式吧!
其實你也可以向 GBKEE、准提部林 等版大,以及站上
許多前輩請益的。他們亦均是我的指導老師。
作者:
c_c_lai
時間:
2016-7-20 11:48
本帖最後由 c_c_lai 於 2016-7-20 11:49 編輯
回復
20#
藍天麗池
再試一次
[attach]24705[/attach]
作者:
c_c_lai
時間:
2016-7-20 12:08
本帖最後由 c_c_lai 於 2016-7-21 07:10 編輯
回復
20#
藍天麗池
Private Sub Workbook_Open()
Dim rng As Variant
With Sheets(1)
For Each rng In Range(.[D2], .[D2].End(xlDown))
rng.Offset(, 26) = IIf(IsNumeric(rng), rng, 0)
rng.Offset(, 1) = IIf(IsNumeric(rng.Offset(, -1)), rng.Offset(, -1), 0)
Next
If Time < TimeValue("08:45") Then ' 早於開盤時間
Application.OnTime TimeValue("08:45"), "ThisWorkbook.MyWay" ' 設定於08:45 執行 MyWay 程序
ElseIf Time >= TimeValue("08:45") And Time <= TimeValue("13:30") Then ' 於交易時間內
MyWay ' 執行 MyWay 程序
End If
End With
End Sub
Sub MyWay()
With Sheets(1)
For Each rng In Range(.[D2], .[D2].End(xlDown))
If IsNumeric(rng) Then
If rng.Offset(, 26).Value <> rng.Value Then
rng.Offset(, 26) = rng
rng.Offset(, 2) = rng.Offset(, 1)
rng.Offset(, 1) = IIf(IsNumeric(rng.Offset(, -1)), rng.Offset(, -1), 0)
End If
End If
Next
End With
Application.OnTime Now + TimeValue("00:00:10"), "ThisWorkbook.MyWay" ' 設定 10 秒後 執行 MyWay 程序
End Sub
Sub addN() ' 手動測試用
Dim rng As Range
With Sheets(1)
For Each rng In Range(.[AD2], .[AD2].End(xlDown))
rng = rng + 1
Next
End With
End Sub
複製代碼
作者:
藍天麗池
時間:
2016-7-20 12:10
回復
23#
c_c_lai
c大我出門了,可能要明天才能測試,明天再跟你說結果
作者:
藍天麗池
時間:
2016-7-20 21:11
本帖最後由 藍天麗池 於 2016-7-20 21:21 編輯
回復
23#
c_c_lai
Application.OnTime Now + TimeValue("00:00:10"), "ThisWorkbook.MyWay" ' 設定 10 秒後 執行 MyWay 程序
C大請教一下,以上程式碼是指開盤後10秒執行(也就是8:45:10),還是指之後都是每10秒執行一次??
剛剛回到家看程式碼這個地方不太了解
作者:
c_c_lai
時間:
2016-7-21 06:24
本帖最後由 c_c_lai 於 2016-7-21 06:34 編輯
回復
25#
藍天麗池
第一次執行完之後,每10秒會再去執行一次。
順便將
Application.OnTime TimeValue("08:45"), "MyWay"
複製代碼
改成
Application.OnTime TimeValue("08:45"), "ThisWorkbook.MyWay"
複製代碼
以防尋找不著。只標明 "MyWay" ,一般系統會直接去模組裡搜尋。
作者:
藍天麗池
時間:
2016-7-21 09:08
回復
26#
c_c_lai
那這樣如果價格在10秒內有變動不就無法紀錄?
作者:
c_c_lai
時間:
2016-7-21 09:30
回復
27#
藍天麗池
"00:00:10" 那你就不會變動性的依你的需修改?
譬如:兩秒跑一次 "00:00:02"、五秒跑一次 "00:00:05"
作者:
藍天麗池
時間:
2016-7-21 09:38
回復
28#
c_c_lai
喔喔!c大那我了解了,目前測試ok
另外,請教一下c大,目前程式設定是單一個股的總量有變動才寫入,還是任一個股有變動就寫入呢?
因為我剛剛看了一下,感覺好像全部都一起寫入,但有時候這一秒跟前一秒價格一樣所以會有錯覺,所以再問一下c大
作者:
c_c_lai
時間:
2016-7-21 09:59
回復
29#
藍天麗池
全部都一起寫入,因為無法使用 Worksheet_Change()
無從判斷是由哪個欄位修正觸發的緣故。
作者:
藍天麗池
時間:
2016-7-21 11:17
本帖最後由 藍天麗池 於 2016-7-21 11:25 編輯
http://forum.twbts.com/viewthrea ... pageD1&page=13b
]
回復
30#
c_c_lai
哇!不能個別判段嗎?這樣我設定1秒變動就執行可能會來不及看
c大,不能像上次寫的那個程式一樣有變動才紀錄,其他不變嗎?
如果用上次的邏輯寫也無法嗎?
作者:
jackyq
時間:
2016-7-21 11:47
回復
31#
藍天麗池
大大要自己試著學啊
作者:
藍天麗池
時間:
2016-7-21 11:58
回復
32#
jackyq
j大,我有阿,從跟你們的對談中一點一點學阿,只是我還沒有很厲害就是了,所以很感謝論壇這邊有這麼多好前輩
作者:
c_c_lai
時間:
2016-7-21 12:42
回復
31#
藍天麗池
明天早上你用這支程式試試看。
[attach]24716[/attach]
作者:
c_c_lai
時間:
2016-7-21 12:46
回復
31#
藍天麗池
ThisWorkbook:
Private Sub Workbook_Open()
Dim rng As Variant, rnt As Range
With Sheets(1)
Set rnt = [AD2]
For Each rng In Range(.[D2], .[D2].End(xlDown))
rng.Offset(, 1) = IIf(IsNumeric(rng.Offset(, -1)), rng.Offset(, -1), 0)
rnt.FormulaR1C1 = "=RC[-26]"
Set rnt = rnt.Offset(1)
Next
End With
End Sub
複製代碼
工作表1:
Private Sub Worksheet_Change(ByVal Target As Range)
With Sheets(1)
If Left(Target.Address, 3) = "$AD" And IsNumeric(Target) Then
.Cells(Target.Row, 6) = .Cells(Target.Row, 5)
' Debug.Print "Target.Address = " & Target.Address
ElseIf Left(Target.Address, 2) = "$F" Then
.Cells(Target.Row, 5) = IIf(IsNumeric(.Cells(Target.Row, 3)), .Cells(Target.Row, 3), 0)
Else
End If
End With
End Sub
Private Sub Worksheet_Calculate()
' [K1] = [K1] + 1
End Sub
複製代碼
作者:
藍天麗池
時間:
2016-7-21 12:47
回復
34#
c_c_lai
c大,感謝你這麼上心的幫忙,如果你有在忙就先忙喔!
我的沒有很趕,我只是想上來問問順便學習,每次c大都很幫忙,真的很感謝
作者:
c_c_lai
時間:
2016-7-21 13:11
回復
36#
藍天麗池
我是想印證 Worksheet_Change() 與DDE 間之微妙牽動,
如透過它欄 ( AD3 "= D3" ) 的對等關係想印證是否能觸發
而已。端結是提問人有否頓悟決心、及好奇求知心。
作者:
藍天麗池
時間:
2016-7-21 16:54
回復
37#
c_c_lai
c大,我了解了,明天測試完跟你報告結果
作者:
藍天麗池
時間:
2016-7-22 09:23
回復
37#
c_c_lai
c大,測試完一樣不行
請教一下c大,我看程式裡面ad欄總量有過去阿,但為什麼還是無法執行?
之前無法執行不是因為抓不到dde的數值變化嗎?
作者:
c_c_lai
時間:
2016-7-22 10:41
回復
39#
藍天麗池
再試試,觀察新增的 "CD 欄觸發"、"AD 欄動態"、"F 欄動態"
數字有否變化?
[attach]24723[/attach]
作者:
藍天麗池
時間:
2016-7-22 11:03
本帖最後由 藍天麗池 於 2016-7-22 11:13 編輯
回復
40#
c_c_lai
c大,還是一樣不行
作者:
c_c_lai
時間:
2016-7-22 11:13
回復
41#
藍天麗池
數字都沒增加嗎?如果都是 0 值,看樣子那只好選擇三至五秒的方式較妥。
作者:
藍天麗池
時間:
2016-7-22 12:36
回復
42#
c_c_lai
都是0值,看來也只能這樣了
c大,請教一下,之前請教你的那個程式,有變動就往下寫的那個,我想不通一點,之前變動就往下寫也是用dde為基準寫的,再我看來,這次的程式是變動就往右邊寫,卻無法執行,這兩個程式的差異是在那邊呢?
作者:
c_c_lai
時間:
2016-7-22 17:14
回復
43#
藍天麗池
我已經沒印象了,你將它上傳我瞧瞧。
作者:
藍天麗池
時間:
2016-7-22 21:21
回復
44#
c_c_lai
[attach]24728[/attach]
C大,這個檔案你看看
作者:
c_c_lai
時間:
2016-7-23 06:43
回復
45#
藍天麗池
[attach]24729[/attach]
作者:
藍天麗池
時間:
2016-7-24 21:18
回復
46#
c_c_lai
C大我了解了,我在思考看看,謝謝
作者:
藍天麗池
時間:
2016-8-1 11:03
本帖最後由 藍天麗池 於 2016-8-1 11:07 編輯
回復
46#
c_c_lai
[attach]24791[/attach]
c大,可以幫我看看嗎?
我把原本的檔案加了一些東西進去,然後把對照欄從AD改到AR然後dde就不會跳動了,是我更改的程式有誤嗎?
作者:
c_c_lai
時間:
2016-8-1 11:31
回復
48#
藍天麗池
此專案的巨集已被暫停。請參閱指應用程式的線上說明或文件,
找出啟用巨集的方法。
作者:
藍天麗池
時間:
2016-8-1 11:57
回復
49#
c_c_lai
暫停?不太懂c大的意思,我打開檔案進去dde還會更新一次,而且程式碼也沒有什麼變動怎麼會暫停呢?
作者:
c_c_lai
時間:
2016-8-1 11:59
回復
50#
藍天麗池
你看看 AR欄有沒有數據?
作者:
藍天麗池
時間:
2016-8-1 12:16
回復
51#
c_c_lai
c大,ar欄有數字阿!
作者:
c_c_lai
時間:
2016-8-1 13:02
回復
52#
藍天麗池
你把 AR 欄資料清除,檔案儲存再從新進來
觀看AR欄有沒有資料。
請將
Private Sub Workbook_Open()
Dim rng As Variant
修改成
Private Sub Workbook_Open()
Dim rng As Range
就 OK 了。
作者:
藍天麗池
時間:
2016-8-1 13:28
本帖最後由 藍天麗池 於 2016-8-1 13:30 編輯
回復
53#
c_c_lai
c大,還是不行欸,照你說的將ar刪除,且做更改也是不行
另外,請教c大,z1那邊有個數字,那個數字的功用是什麼阿?
作者:
c_c_lai
時間:
2016-8-1 15:58
回復
54#
藍天麗池
#53 (Range) 的改了嗎? 我是可以運行的。
但是現已過 13:30 無從測試。
作者:
藍天麗池
時間:
2016-8-1 16:11
本帖最後由 藍天麗池 於 2016-8-1 16:12 編輯
回復
55#
c_c_lai
改了,剛好也1328,所以要明天才能測試,明天再跟c大報告
z1??
另外最下面那個程式的功能是??請教一下c大
作者:
c_c_lai
時間:
2016-8-1 16:50
回復
56#
藍天麗池
Z1 是前版本留下的暫存欄,在本程式中
是無作用的,可以將它清除。
作者:
藍天麗池
時間:
2016-8-2 13:58
回復
57#
c_c_lai
c大抱歉,今天早上比較忙,現在才回,目前可以運作了
作者:
藍天麗池
時間:
2016-9-13 17:08
本帖最後由 藍天麗池 於 2016-9-13 17:09 編輯
回復
57#
c_c_lai
http://forum.twbts.com/viewthread.php?tid=18350&extra=
C大,小弟又來跟你請教了,在請C大有空的時候指導小弟一下
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)