返回列表 上一主題 發帖

EXCEL抓取資料問題

Book666.rar (22.16 KB) 回復 10# slip


    基礎excel的功能要加強.....!!!:@

TOP

回復 10# slip

J4=IF(ISERROR(VLOOKUP("*"&B4&"*",Sheet2!$A$1:$D$100,4,)),0,TEXT(VLOOKUP("*"&B4&"*",Sheet2!$A$1:$D$100,4,)/100,"0.00%"))

TOP

回復 12# register313
謝謝,可以用了..
slip

TOP

本帖最後由 slip 於 2012-5-8 16:57 編輯

回復 9# c_c_lai


再請教大大:excel 如何每隔1分鐘自動抓dde的資料
我使用excel設定期貨看盤的dde功能,時間是0845~1345

Sheet 1
A1      B1      C1     D1
內盤   外盤    成交   漲跌
A2      B2      C2     D2
xxxxx  xxxxx   xxxx    xxx

要在sheet2中的,每隔一分鐘抓sheet1的數字資料
A1      B1      C1     D1
xxxxx  xxxxx   xxxx    xxx


備註:xxxx為數字
拜託高手幫忙,謝謝!

期-每分.rar (23.79 KB)

slip

TOP

回復 14# slip
補上檔案及補充說明

A2為內盤的數量
B2為外盤的數量
C2為成交的數量
D2為漲跌的值

請協助,將這四個數字
每隔一分鐘抓取一次
數字自動在sheet2中排列為
第一分鐘A1,B1,C1,D1
第二分鐘A2,B2,C2,D2
依此類推
時間開始是0845
結束是1345
謝謝

期-每分.rar (8.08 KB)

01

slip

TOP

回復 14# slip
目前你權限不足恐怕無法下載,所以我將程式碼貼上,
你複製後將她貼入到 ThisWorkbook 程式區內儲存即可,
至於 Sheet1 某些設定欄位請參照附圖照畫葫即可。
  1. ' DDE 資料紀錄問題
  2. Option Explicit
  3. Dim actEnabled As Boolean
  4. Dim cIndex As Single

  5. Private Sub Workbook_Open()
  6.     ' 以下四列資料之設定,可配合實作、或測試之目的,直接在 "sheet1" 指定之設定欄,得隨時予以異動。
  7.     If (Sheets("sheet1").Range("BA1").Value = "") Then Sheets("sheet1").Range("BA1").Value = "08:45:00"   ' 假設C6欄位為空白,則寫入開盤起始時間
  8.     If (Sheets("sheet1").Range("BA2").Value = "") Then Sheets("sheet1").Range("BA2").Value = "13:45:59"   ' D6欄位亦同。(此兩欄紀錄起始終止時間)
  9.     If (Sheets("sheet1").Range("BB1").Value = "") Then Sheets("sheet1").Range("BB1").Value = "00:01:00"   ' 紀錄資料匯入相隔時間,如每隔一分鐘寫入一次。
  10.     If (Sheets("sheet1").Range("BB2").Value = "") Then Sheets("sheet1").Range("BB2").Value = 0            ' 紀錄已匯入資料列數。

  11.     If (TimeValue(Now) > Sheets("sheet1").Range("BA2").Value) Then       ' 如果目前時間業已超過 D6 的營業時段,則呼叫.......
  12.         Call stopProcedure
  13.     Else                                                                 ' 反之在 D6 設定時間以前,則呼叫.......
  14.         Call startProcedure
  15.     End If
  16. End Sub

  17. Private Sub Workbook_BeforeClose(Cancel As Boolean)
  18.     On Error Resume Next
  19.     Call actStop
  20. End Sub

  21. Sub startProcedure()       ' 保留作為控制項之應用程序,如按鈕之巨集應用等。
  22.     Call actStart
  23. End Sub

  24. Sub stopProcedure()        ' 保留作為控制項之應用程序,如按鈕之巨集應用等。
  25.    Call actStop
  26. End Sub

  27. Sub newTitle()
  28.     Sheets(2).[A1].Resize(, 4) = Sheets(1).[A1:D1].Value  ' 套上你欲匯入資料的表頭名稱
  29. End Sub

  30. Sub Starter()
  31.     If (actEnabled = True And TimeValue(Now) >= Sheets("sheet1").Range("BA1").Value And TimeValue(Now) <= Sheets("sheet1").Range("BA2").Value) Then
  32.         cIndex = Sheets("sheet1").Range("BB2").Value

  33.         If (cIndex = 0) Then Call newTitle  ' newTitle 程序 (由使用者自行定義) 是將第一列的資料抬頭名稱寫入到sheet2;如日期、時間的對應欄位資料等。

  34.         Sheets("sheet1").Range("BB2").Value = cIndex + 1       ' 紀錄列號加一。

  35.         ' 複製從券商DDE匯入之相對應位置資料,如 A1、B1、C1、D1 對應的可能是內盤、外盤、成交、漲跌等等,以此類推。
  36.         Sheets(2).[A65536].End(xlUp).Offset(1).Resize(, 4) = Sheets(1).[A2:D2].Value

  37.         cIndex = Sheets("sheet1").Range("BB2").Value      ' 切記 Counter (計數器) 要加一,否則永遠為零 (當然已也可以不予紀錄資料列述,依個人習性)。
  38.     End If
  39. End Sub

  40. Sub onStarter()
  41.     If Not IsError(Sheets(1).[A2]) Then Call Starter
  42.     If actEnabled Then Call actStart
  43. End Sub

  44. Sub actStart()
  45.     actEnabled = True
  46.    
  47.     Application.OnTime (Now + Sheets("sheet1").Range("BB1").Value), "ThisWorkBook.onStarter"     ' 寫入資料的排程 (目前是每隔五分鐘寫入一次)
  48. End Sub

  49. Sub actStop()
  50.     actEnabled = False

  51.     On Error Resume Next
  52.     Application.OnTime Now, "ThisWorkBook.onStarter", , False
  53. End Sub
複製代碼

期貨每分鐘資料匯入.rar (27.93 KB)

TOP

回復 16# c_c_lai
謝謝c_c_lai 大大;
今天開始運作後,一切順暢
感謝您的幫忙
誠心感謝
slip

TOP

回復 16# c_c_lai


    再請教c大,我將dde匯入的資料sheet1裡,在5min或10min或隨機?min要把整個2列復製下來,A2-D2因為是匯入的dde數值會跟著跳動,不知有何方法是可讓其在隨機復製下來時數值不會跳動?

New期.rar (88.38 KB)

slip

TOP

回復  c_c_lai
    再請教c大,我將dde匯入的資料sheet1裡,在5min或10min或隨機?min要把整個2列復製 ...
slip 發表於 2012-5-16 15:44

在5min或10min或隨機?min要把整個2列復製 ...
能否請你描述清楚(明白)一點?

TOP

回復 19# c_c_lai


    sorry我的意思是,要在不特定的時間(開盤後dde的數值一直在跳動,可是可能我在某個時間看到有效做單的參考數值時,我想把整個2列復製下來,但是復製下來的值是dde函數,因此數值還是會跳動,是想有沒有辦法復製下來時的數值是固定的)。這是有辦法做到的?
slip

TOP

        靜思自在 : 【做人的開始】每一天都是故人的開始,每一個時刻都是自己的警惕。
返回列表 上一主題