標題:
DDE動態資料如何定時篩選?
[打印本頁]
作者:
corcovado886
時間:
2015-11-17 19:26
標題:
DDE動態資料如何定時篩選?
有 一排DDE動態資料,每三秒記錄一次,
請問如何定時篩選出漲幅大於 9 的對應股號?
目前我想到的方法是錄製巨集,然後做進階篩選,複製在固定表格內。
但不知道怎麼定時篩選,最好是能夠複製在橫向表格裡。
[attach]22470[/attach]
作者:
c_c_lai
時間:
2015-11-18 16:16
回復
1#
corcovado886
你的意思是這樣?
[attach]22482[/attach]
作者:
corcovado886
時間:
2015-11-18 18:32
回復
2#
c_c_lai
哇! 我沒權限下載耶.....
就是將第二列的動態資料,把大於9的篩選出來,
再將對應的號碼顯示在固定一排表格內。
可以放程式碼上來嗎? 感激不盡 ^^
作者:
c_c_lai
時間:
2015-11-19 05:24
本帖最後由 c_c_lai 於 2015-11-19 09:30 編輯
回復
3#
corcovado886
是否如此結果?
Sub 自動記錄()
Dim cts As Integer
If uMode = 0 Then Exit Sub
If Time > TimeValue(EndTime) Then '收盤時間以後不執行
Sht1.[W4] = "已過收盤"
uMode = 0
Exit Sub
End If
With Sht1
.Range("W2") = Time '當前時間(時間碼表)
'----------------------------------------------------------
'每1分鐘記錄,5分鐘則改為 Mod 5
If Second(Time) Mod 3 = 0 Then
xRow = .Range("A65536").End(xlUp).Row + 1 '從最後一格往上尋找有資料的儲存格, 是在第幾列,然後再加1列
If xRow < 11 Then xRow = 11 '如果列數小於11,則從第11列開始
.Range("A" & xRow & ":V" & xRow).Value = .Range("A2:V2").Value
For cts = 1 To 22
.Range(Chr(64 + cts) & xRow).Font.Color = IIf(.Range(Chr(64 + cts) & xRow).Value >= 9, vbRed, vbBlack)
Next
.Range("W" & xRow).Value = Time 'W欄位的時間值往下記錄
'------------------------------------------------
If ActiveSheet.Name = .Name And xRow > 20 Then
ActiveWindow.ScrollRow = xRow - 12 '讓最新資料保持在可見視窗中
End If
End If
End With
Application.OnTime Now + TimeValue("00:00:01"), "自動記錄" '每一秒遞迴一次
End Sub
複製代碼
作者:
c_c_lai
時間:
2015-11-19 11:18
回復
3#
corcovado886
ActiveWindow.ScrollRow = xRow - 12 ' 讓最新資料保持在可見視窗中
複製代碼
修改成如下,較吻合事實。即最新一筆資料永遠會保持在可見視窗中最底筆。
ActiveWindow.ScrollRow = xRow - 11 ' 讓最新一筆資料保持在可見視窗中最底筆
複製代碼
作者:
corcovado886
時間:
2015-11-19 17:38
回復
5#
c_c_lai
好像不是這樣....:$
只要將第二列的動態資料,篩選大於 9 的 股號,
放在第六列就可以了(是顯示股號 ),下面每筆的記錄不用更動。
[attach]22506[/attach]
作者:
c_c_lai
時間:
2015-11-19 18:58
回復
6#
corcovado886
是這樣?
Sub 自動記錄()
Dim cts As Integer, A As Range, Rng As Range
If uMode = 0 Then Exit Sub
If Time > TimeValue(EndTime) Then '收盤時間以後不執行
Sht1.[W4] = "已過收盤"
uMode = 0
Exit Sub
End If
With Sht1
.Range("W2") = Time '當前時間(時間碼表)
'----------------------------------------------------------
'每1分鐘記錄,5分鐘則改為 Mod 5
If Second(Time) Mod 3 = 0 Then
xRow = .Range("A65536").End(xlUp).Row + 1 '從最後一格往上尋找有資料的儲存格, 是在第幾列,然後再加1列
If xRow < 11 Then xRow = 11 '如果列數小於11,則從第11列開始
.Range("A" & xRow & ":V" & xRow).Value = .Range("A2:V2").Value
.[B6:V6].ClearContents
Set Rng = .[B6]
cts = 0
For Each A In .Range("A" & xRow & ":V" & xRow)
cts = cts + 1
If (A.Value >= 9) Then
' A.Font.Color = vbRed
Rng.Value = .Range(Chr(64 + cts) & 10).Value
Set Rng = Rng.Offset(, 1)
Else
' A.Font.Color = vbBlack
End If
Next
.Range("W" & xRow).Value = Time 'W欄位的時間值往下記錄
'------------------------------------------------
If ActiveSheet.Name = .Name And xRow > 20 Then
ActiveWindow.ScrollRow = xRow - 11 ' 讓最新一筆資料保持在可見視窗中最底筆
End If
End If
End With
Application.OnTime Now + TimeValue("00:00:01"), "自動記錄" '每一秒遞迴一次
End Sub
複製代碼
作者:
corcovado886
時間:
2015-11-19 20:12
回復
7#
c_c_lai
哇!真是太感動了....
沒錯,就是這樣,非常感謝!
可以請問一下嗎? Rng.Value = .Range(Chr(64 + cts) & 10).Value 其中的Chr
google 好久,只找到 Chr (10) 是換行,但Chr(64 + cts) & 10就看不懂了....
作者:
c_c_lai
時間:
2015-11-19 20:26
回復
8#
corcovado886
Rng.Value = .Range(Chr(64 + cts) & 10).Value
複製代碼
也可以寫成如下:
Rng = .Range(Chr(64 + cts) & 10)
複製代碼
當 cts = 1 時,64 + 1 = 65,
ASC(65) = 'A'。 .Range(Chr(64 + cts) & 10) = .Range("A10")
當 cts = 2 時,64 + 2 = 66,
ASC(66) = 'B'。 .Range(Chr(64 + cts) & 10) = .Range("B10")
以此類推。
作者:
corcovado886
時間:
2015-11-28 21:43
回復
9#
c_c_lai
原來還可以這樣用,真是厲害!
那如果要記錄的欄位超過26個怎麼辦呢?
因為A~Z,接下來就換成 AA、AB、AC....
是否也可用同樣的方法
作者:
c_c_lai
時間:
2015-11-29 08:00
本帖最後由 c_c_lai 於 2015-11-29 08:04 編輯
回復
10#
corcovado886
以下範例只演算到 A ~ AZ,如果實務值有超出 AZ 者,
依下面例子再往下繼續演算 ( IIf( ... , ... , ... ) )下去:
.Range(IIf(cts > 26, "A" & Chr(64 + cts - 26), Chr(64 + cts)) & 10)
複製代碼
作者:
准提部林
時間:
2015-11-29 17:59
A7:=IF(COUNT(0/(A2>9)),COLUMN(A1),"--") 右拉至V7
B6:=IF(COLUMN(A1)>COUNT($A7:$V7),"",INDEX($A1:$V1,SMALL($A7:$V7,COLUMN(A1)))) 右拉
作者:
geneokimo
時間:
2016-3-4 11:45
感謝您的發帖,獲益良多!!!
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)