返回列表 上一主題 發帖

DDE動態資料如何定時篩選?

DDE動態資料如何定時篩選?

有 一排DDE動態資料,每三秒記錄一次,
請問如何定時篩選出漲幅大於 9 的對應股號?

目前我想到的方法是錄製巨集,然後做進階篩選,複製在固定表格內。
但不知道怎麼定時篩選,最好是能夠複製在橫向表格裡。
DDE_VBA_定時篩選大於9的股號.zip (29.84 KB)

感謝您的發帖,獲益良多!!!

TOP

A7:=IF(COUNT(0/(A2>9)),COLUMN(A1),"--") 右拉至V7
B6:=IF(COLUMN(A1)>COUNT($A7:$V7),"",INDEX($A1:$V1,SMALL($A7:$V7,COLUMN(A1)))) 右拉

TOP

本帖最後由 c_c_lai 於 2015-11-29 08:04 編輯

回復 10# corcovado886
以下範例只演算到 A ~ AZ,如果實務值有超出 AZ 者,
依下面例子再往下繼續演算 ( IIf( ... , ... , ...  ) )下去:
  1. .Range(IIf(cts > 26, "A" & Chr(64 + cts - 26), Chr(64 + cts)) & 10)
複製代碼

TOP

回復 9# c_c_lai
原來還可以這樣用,真是厲害!
那如果要記錄的欄位超過26個怎麼辦呢?

因為A~Z,接下來就換成 AA、AB、AC....
是否也可用同樣的方法

TOP

回復 8# corcovado886
  1. Rng.Value = .Range(Chr(64 + cts) & 10).Value
複製代碼
也可以寫成如下:
  1. 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")
以此類推。

TOP

回復 7# c_c_lai
哇!真是太感動了....
沒錯,就是這樣,非常感謝!

可以請問一下嗎?   Rng.Value = .Range(Chr(64 + cts) & 10).Value   其中的Chr
google 好久,只找到  Chr (10) 是換行,但Chr(64 + cts) & 10就看不懂了....

TOP

回復 6# corcovado886
是這樣?
  1. Sub 自動記錄()
  2.     Dim cts As Integer, A As Range, Rng As Range
  3.    
  4.     If uMode = 0 Then Exit Sub
  5.     If Time > TimeValue(EndTime) Then '收盤時間以後不執行
  6.         Sht1.[W4] = "已過收盤"
  7.         uMode = 0
  8.         Exit Sub
  9.     End If
  10.     With Sht1
  11.         .Range("W2") = Time '當前時間(時間碼表)
  12.         '----------------------------------------------------------
  13.         '每1分鐘記錄,5分鐘則改為 Mod 5
  14.         If Second(Time) Mod 3 = 0 Then
  15.             xRow = .Range("A65536").End(xlUp).Row + 1 '從最後一格往上尋找有資料的儲存格, 是在第幾列,然後再加1列
  16.             If xRow < 11 Then xRow = 11 '如果列數小於11,則從第11列開始
  17.             .Range("A" & xRow & ":V" & xRow).Value = .Range("A2:V2").Value
  18.             .[B6:V6].ClearContents
  19.             Set Rng = .[B6]
  20.             cts = 0
  21.             For Each A In .Range("A" & xRow & ":V" & xRow)
  22.                 cts = cts + 1
  23.                 If (A.Value >= 9) Then
  24.                     '  A.Font.Color = vbRed
  25.                     Rng.Value = .Range(Chr(64 + cts) & 10).Value
  26.                     Set Rng = Rng.Offset(, 1)
  27.                 Else
  28.                     '  A.Font.Color = vbBlack
  29.                 End If
  30.             Next
  31.             .Range("W" & xRow).Value = Time 'W欄位的時間值往下記錄
  32.             '------------------------------------------------
  33.             If ActiveSheet.Name = .Name And xRow > 20 Then
  34.                 ActiveWindow.ScrollRow = xRow - 11   '  讓最新一筆資料保持在可見視窗中最底筆
  35.             End If
  36.         End If
  37.     End With
  38.     Application.OnTime Now + TimeValue("00:00:01"), "自動記錄"   '每一秒遞迴一次
  39. End Sub
複製代碼

TOP

回復 5# c_c_lai

好像不是這樣....:$

只要將第二列的動態資料,篩選大於 9 的 股號,
放在第六列就可以了(是顯示股號 ),下面每筆的記錄不用更動。

TOP

回復 3# corcovado886
  1.                 ActiveWindow.ScrollRow = xRow - 12   '  讓最新資料保持在可見視窗中
複製代碼
修改成如下,較吻合事實。即最新一筆資料永遠會保持在可見視窗中最底筆。
  1.                 ActiveWindow.ScrollRow = xRow - 11   '  讓最新一筆資料保持在可見視窗中最底筆
複製代碼

TOP

        靜思自在 : 慈悲沒有敵人,智慧不起煩惱。
返回列表 上一主題