Board logo

標題: [發問] 大家好 , 請教關於DDE自動換行與一些問題 [打印本頁]

作者: saleen    時間: 2013-6-5 11:13     標題: 大家好 , 請教關於DDE自動換行與一些問題

大家好 , 小妹因工作需要剛開始學習 Excel :P
參考了 這篇 後做出了大概想達成的需求 (調了好久 ><)
但又碰上一些問題
這邊附上圖懇請 c_c_lai 大幫忙 ><


另外還有幾個問題冒昧請教大大們 ~
台股的大盤不是有分電子、金融跟傳產嗎?
那我要把它們的成交比重抓到 Excel 應該怎麼抓 , 我老闆是用群益超級贏家這套
要抓出來像
電子 60%
金融 20%
傳產 10% 這樣 ><

然後就是如果說我想要抓 B,2 這欄的 "從開盤到目前的最高值與最低值"
應該要怎麼寫呢 ? ><

抱歉 ~ 問題有點多 >< 還請各位大大幫幫小妹了 :'(
作者: c_c_lai    時間: 2013-6-5 12:55

回復 1# saleen
妳把 Excel 壓縮成 .WAR 檔之後上傳 (如迴紋針的附件),
實際看了妳的文件後再評斷。
作者: saleen    時間: 2013-6-5 13:15

c_c_lai 大請查收 :)
[attach]15179[/attach]
感謝 :'(
作者: c_c_lai    時間: 2013-6-5 13:52

本帖最後由 c_c_lai 於 2013-6-5 13:56 編輯

回復 3# saleen
妳紀錄每筆資料的時段是多久? 每一秒、每二十秒、或是每一分鐘?
每次資料寫入時,均顯示在第一筆資料列上,亦即之前的資料錄均往下移一行?
麻煩妳將需求說明清楚,同時每欄要對應的資料來源也請描述一下。
P.S.  請回覆時,務必點選 "回覆" 鈕,否則如沒仔細瀏覽是不知道有 "信件消息" 的。
作者: saleen    時間: 2013-6-5 15:22

回復 4# c_c_lai

c_c_lai 大抱歉 >"<
以後會記得用回覆按鈕的
我記錄的時間一樣是五分鐘一次呀
第二行~是的就是前一筆資料下移
關於需求就是 :
以 E4 為例
E4 = B4 - B3
F4 = C4 - C3
G4 = D4 - D3
E5 = B5 - B4

但因為以原換行程式來跑它是把 A2~J2
每隔5分往下一行記錄
問題是在一開始時 E2 F2 跟 G2 是沒辦法有資料的 (因為 B C D 的第二行沒辦法減第一行 , 第一行是中文 , 而 E F G 的第三行因為一開始第二行沒資料也沒辦法去減它)
所以 E F G 往下就會一直是空白

不知道這樣解釋夠不夠清楚 ><
感謝 :Q
作者: GBKEE    時間: 2013-6-5 16:12

回復 5# saleen
期指_001.xlsm
  1. Sub updateFollow()
  2.     Dim Rng As Range
  3.     If (TimeValue(Now) < TimeValue("08:45:00") Or TimeValue(Now) > TimeValue("13:45:00")) Then Exit Sub
  4.     With 工作表1
  5.         Set Rng = .Range("A" & .Range("A" & .Rows.Count).End(xlUp).Row + 1).Resize(1, 12)
  6.         Rng(1) = "=XQTISC|Quote!'FITX06.TF-Time'"
  7.         Rng(2) = "=R2-Q2"
  8.         Rng(3) = "=X2-W2"
  9.         Rng(4) = "=T2-U2"
  10.         Rng(5) = "=IF(ISNUMBER(R[-1]C[-3]),RC[-3]-R[-1]C[-3],"""")"
  11.         Rng(6) = "=IF(ISNUMBER(R[-1]C[-3]),RC[-3]-R[-1]C[-3],"""")"
  12.         Rng(7) = "=IF(ISNUMBER(R[-1]C[-3]),RC[-3]-R[-1]C[-3],"""")"
  13.         Rng(8) = "=Y2"
  14.         Rng(9) = "=Z2"
  15.         Rng(10) = "=Z2-Q5"
  16.         Rng(11) = "= AA2 - AB2"
  17.         Rng(12) = "=AD2"
  18.         Rng.Value = Rng.Value
  19.         Rng(1).NumberFormat = "hh:mm:ss"
  20.     End With
  21.     If timerEnabled Then Call timerStart
  22. End Sub
複製代碼

作者: c_c_lai    時間: 2013-6-5 16:59

回復  c_c_lai

c_c_lai 大抱歉 >"<
以後會記得用回覆按鈕的
我記錄的時間一樣是五分鐘一次呀
第二行 ...
saleen 發表於 2013-6-5 15:22

E、F、G 欄值是 B、C、D  (當根 - 前根) ?
請澄清公式是否如此?
作者: saleen    時間: 2013-6-6 08:42

回復 7# c_c_lai


是的 ~ 就是當前減上一個 ><
作者: saleen    時間: 2013-6-6 08:46

回復 6# GBKEE


    感謝 GB 大
小妹現在來試試看 >"<
作者: saleen    時間: 2013-6-6 08:49

回復 8# saleen


    這邊說的有點不清楚 ><
應該是說上一筆的記錄減去上上一筆的記錄
問題就在第一筆是沒有上一筆的所以沒辦法算出
作者: saleen    時間: 2013-6-6 09:48

回復 6# GBKEE


哇 ~ 感謝 GBKK 超級版主 >~<
可以用了..超強的 ^"^
不過不知道為什麼這份 Excel 速度變得很慢(開啟關閉儲存都變很慢,新增一行時也變慢)
太厲害了! :D
作者: c_c_lai    時間: 2013-6-6 09:57

回復 10# saleen
其實 GBKEE 版大他已經給妳了正確的答案,唯一不同的處理
他是從資料錄最後往上遞增,但是妳要求資料須皆由 A2 行遞增
(插行), 所以我稍稍就地取材改了寫入點:
  1. Sub updateFollow()
  2.     Dim Rng As Range
  3.    
  4.     On Error Resume Next
  5.      If (TimeValue(Now) < TimeValue("08:45:00") Or TimeValue(Now) > TimeValue("13:45:00")) Then Exit Sub

  6.     With 工作表1
  7.         .Range("A2:L2").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove        '  插入資料,原本資料列均下移一行。
  8.         '  Set Rng = .[A2]
  9.         '  Rng = Sheet1.[c2]
  10.         '  Rng.Offset(, 1) = "=XQTISC|Quote!'FITX06.TF-Time'"
  11.         '  Rng.Offset(, 2) = "=R2-Q2"
  12.         '  Rng.Offset(, 3) = "=X2-W2"
  13.         '  Rng.Offset(, 4) = "=T2-U2"
  14.         '  Rng.Offset(, 5) = "=IF(ISNUMBER(R[1]C[-3]),RC[-3]-R[1]C[-3],0)"
  15.         '  Rng.Offset(, 6) = "=IF(ISNUMBER(R[1]C[-3]),RC[-3]-R[1]C[-3],0)"
  16.         '  Rng.Offset(, 7) = "=IF(ISNUMBER(R[1]C[-3]),RC[-3]-R[1]C[-3],0)"
  17.         '  Rng.Offset(, 8) = "=Y2"
  18.         '  Rng.Offset(, 9) = "=Z2"
  19.         '  Rng.Offset(, 10) = "=Z2-Q5"
  20.         '  Rng.Offset(, 11) = "= AA2 - AB2"
  21.         '  Rng.Offset(, 12) = "=AD2"
  22.         '  上面之敘述表達與下列的敘述結果是一樣的,差異只在於使用語法之巧妙不同。
  23.         Set Rng = .[A2].Resize(1, 12)
  24.         Rng(1) = "=XQTISC|Quote!'FITX06.TF-Time'"
  25.         Rng(2) = "=R2-Q2"
  26.         Rng(3) = "=X2-W2"
  27.         Rng(4) = "=T2-U2"
  28.         Rng(5) = "=IF(ISNUMBER(R[1]C[-3]),RC[-3]-R[1]C[-3],0)"
  29.         Rng(6) = "=IF(ISNUMBER(R[1]C[-3]),RC[-3]-R[1]C[-3],0)"
  30.         Rng(7) = "=IF(ISNUMBER(R[1]C[-3]),RC[-3]-R[1]C[-3],0)"
  31.         Rng(8) = "=Y2"
  32.         Rng(9) = "=Z2"
  33.         Rng(10) = "=Z2-Q5"
  34.         Rng(11) = "= AA2 - AB2"
  35.         Rng(12) = "=AD2"
  36.         Rng.Value = Rng.Value              '  將公式以欄值取代
  37.         Rng(1).NumberFormat = "hh:mm:ss"
  38.     End With
  39.     If timerEnabled Then Call timerStart
  40. End Sub
複製代碼
但是 請自行取消 {A1:L1] 間的下拉篩選,否則將無法  "插入" 資料列。
作者: saleen    時間: 2013-6-6 10:12

回復 12# c_c_lai

^^~感謝 c_c_lai 大大 !
我現在馬上去試試看 ~~
不過不知道我只是要把表格上色為什麼就跑出下拉選單來了
只好想辦法把它拿掉 ><
作者: saleen    時間: 2013-6-6 11:17

回復 12# c_c_lai


太強了 ! 感謝 c_c_lai 大大 >~~<
超級成功耶 !
雖然看不太懂      
Rng(5) = "=IF(ISNUMBER(R[1]C[-3]),RC[-3]-R[1]C[-3],0)"
Rng(6) = "=IF(ISNUMBER(R[1]C[-3]),RC[-3]-R[1]C[-3],0)"
Rng(7) = "=IF(ISNUMBER(R[1]C[-3]),RC[-3]-R[1]C[-3],0)"

這三行究竟是什麼意思 D:
都沒參照 rng 2 3 4 怎麼算出來差值的  囧
作者: c_c_lai    時間: 2013-6-6 11:51

回復  c_c_lai


太強了 ! 感謝 c_c_lai 大大 >~~<
超級成功耶 !
雖然看不太懂      
Rng(5) = "=IF ...
saleen 發表於 2013-6-6 11:17

.Range("A2:L2").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
在 A2 到 L2 間插入一資料列 (只異動 A ~ L 欄之位置;M ~ 以後之內容均保持不變),原本資料列均下移一行後,
Rng 設定於 A2 列  (Set Rng = .[A2].Resize(1, 12)), 所以此時:
E = 累委賣比五分變量   ("=IF(ISNUMBER(R[1]C[-3]),RC[-3]-R[1]C[-3],"""")") (=IF(ISNUMBER(B3),B2-B3,"")) B2(當根)-B3(前跟)
F = 累賣成比五分變量   ("=IF(ISNUMBER(R[1]C[-3]),RC[-3]-R[1]C[-3],"""")") (=IF(ISNUMBER(C3),C2-C3,"")) C2(當根)-C3(前跟)
G = 累委買口五分變量   ("=IF(ISNUMBER(R[1]C[-3]),RC[-3]-R[1]C[-3],"""")") (=IF(ISNUMBER(D3),D2-D3,"")) D2(當根)-D3(前跟)
以 E 欄為例: 目前在第二行上 E2 欄位置; E 的往前三欄 (D、C、B) 位置即為 B2 欄,同理、B2 欄往下一行 [1] 不就是 B3 欄嗎?
再以 F 欄為例: 目前在第二行上 F2 欄位置; F 的往前三欄 (E、D、C) 位置即為 C2 欄,同理、C2 欄往下一行 [1] 不就是 C3 欄嗎?
以此類推。
作者: saleen    時間: 2013-6-6 12:15

回復 15# c_c_lai


    哦哦 ! 原來如此 ! 是往前算三行的意思 !
請教 c_c_lai 大像這些程式碼要如何學習 ?
有專門整本都是程式碼的書推薦嗎 ?

另像是 .Range("A2:L2").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove 這段
我想把它改寫成 即時資料在最上面一行
然後每五分鐘由第三行起算往下加一行
我寫成  .Range("A3:L3").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
這樣對嗎 ?
因為現在這樣最新的即時資料會被擠到下面 ><
好像有點困難...
作者: c_c_lai    時間: 2013-6-6 12:26

回復 16# saleen
是這樣嗎?
  1. Sub updateFollow()
  2.     Dim Rng As Range
  3.    
  4.     On Error Resume Next
  5.     ' If (TimeValue(Now) < TimeValue("08:45:00") Or TimeValue(Now) > TimeValue("13:45:00")) Then Exit Sub

  6.     With 工作表1
  7.         .Range("A3:L3").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove        '  插入資料,原本資料列均下移一行。
  8.         '  Set Rng = .[A3]
  9.         '  Rng.Offset(, 1) = "=XQTISC|Quote!'FITX06.TF-Time'"
  10.         '  Rng.Offset(, 2) = "=R2-Q2"
  11.         '  Rng.Offset(, 3) = "=X2-W2"
  12.         '  Rng.Offset(, 4) = "=T2-U2"
  13.         '  Rng.Offset(, 5) = "=IF(ISNUMBER(R[1]C[-3]),RC[-3]-R[1]C[-3],0)"
  14.         '  Rng.Offset(, 6) = "=IF(ISNUMBER(R[1]C[-3]),RC[-3]-R[1]C[-3],0)"
  15.         '  Rng.Offset(, 7) = "=IF(ISNUMBER(R[1]C[-3]),RC[-3]-R[1]C[-3],0)"
  16.         '  Rng.Offset(, 8) = "=Y2"
  17.         '  Rng.Offset(, 9) = "=Z2"
  18.         '  Rng.Offset(, 10) = "=Z2-Q5"
  19.         '  Rng.Offset(, 11) = "= AA2 - AB2"
  20.         '  Rng.Offset(, 12) = "=AD2"
  21.         '  上面之敘述表達與下列的敘述結果是一樣的,差異只在於使用語法之巧妙不同。
  22.         Set Rng = .[A3].Resize(1, 12)
  23.         Rng(1) = "=XQTISC|Quote!'FITX06.TF-Time'"
  24.         Rng(2) = "=R2-Q2"
  25.         Rng(3) = "=X2-W2"
  26.         Rng(4) = "=T2-U2"
  27.         Rng(5) = "=IF(ISNUMBER(R[1]C[-3]),RC[-3]-R[1]C[-3],0)"
  28.         Rng(6) = "=IF(ISNUMBER(R[1]C[-3]),RC[-3]-R[1]C[-3],0)"
  29.         Rng(7) = "=IF(ISNUMBER(R[1]C[-3]),RC[-3]-R[1]C[-3],0)"
  30.         Rng(8) = "=Y2"
  31.         Rng(9) = "=Z2"
  32.         Rng(10) = "=Z2-Q5"
  33.         Rng(11) = "= AA2 - AB2"
  34.         Rng(12) = "=AD2"
  35.         Rng.Value = Rng.Value              '  將公式以欄值取代
  36.         Rng(1).NumberFormat = "hh:mm:ss"
  37.     End With
  38.     If timerEnabled Then Call timerStart
  39. End Sub
複製代碼
第二行就隨妳自由擺佈了 (因為成為未使用的空行了)。
作者: saleen    時間: 2013-6-6 12:56

回復 17# c_c_lai


完全成功耶 !
感謝 c_c_lai 大大 !
原來我是 a3 那邊沒改到..
^^
接下來要試著抓電子金融傳產的成交比重
c_c_lai 大可否建議一個方向小妹該從何著手 ><
作者: c_c_lai    時間: 2013-6-6 13:01

回復  c_c_lai


完全成功耶 !
感謝 c_c_lai 大大 !
原來我是 a3 那邊沒改到..
^^
接下來要試著抓 ...
saleen 發表於 2013-6-6 12:56

有關電子金融傳產的成交比重方面,
妳可能就要去請教諸位版大與其他先進了!
作者: saleen    時間: 2013-6-6 13:37

回復 19# c_c_lai


好滴
感謝 c_c_lai 大大啦 !
小妹以後一定還會有許多 Excel 跟 VB 的相關問題要請教大大 :D




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