Board logo

標題: EXCEL抓取資料問題 [打印本頁]

作者: slip    時間: 2012-5-7 11:59     標題: EXCEL抓取資料問題

在sheet1裡
B4 2330    G4(要抓Sheet2資料)
B5 2317    G5(要抓Sheet2資料)

在Sheet2
A1 2330台積電      D1  10.81(要被抓取的資料)
A2 1301台塑           D2   2.43
A3 2317鴻海           D3  15.39(要被抓取的資料)

備註:
1. Sheet1  從B4.....一直到B100
2. Sheet1  從Sheet2抓取過來資料必須直接"轉換成 %"
3. Sheet2  從A1.....一直到A100都有資料

先謝謝 幫忙
作者: harvatek    時間: 2012-5-7 14:56

有人會嗎?我也需要00.
感謝熱心的人了
作者: ANGELA    時間: 2012-5-7 15:46

本帖最後由 ANGELA 於 2012-5-7 15:48 編輯

G4=VLOOKUP(B1&"*",Sheet2!$A$1:$D$1000,4,)
G欄儲存格格式設為百分比
作者: c_c_lai    時間: 2012-5-7 16:03

回復 1# slip
請將實際的檔案上傳,以便大家能了解你實際的需求面,
謝謝!
作者: slip    時間: 2012-5-7 16:18

回復 4# c_c_lai


各位大大,已上傳
感謝幫忙
作者: c_c_lai    時間: 2012-5-7 17:12

回復 5# slip
已上傳?
作者: slip    時間: 2012-5-7 17:22

回復 6# c_c_lai
作者: register313    時間: 2012-5-7 17:48

本帖最後由 register313 於 2012-5-7 17:52 編輯

回復 7# slip

基本上ANGELA版主在2#已解答了

只是發問者應建立一個觀念:
EXCEL不管是一般區,程式區,都是實際操作的東西
發問務必把 1.功能說明清楚 2.EXCEL壓縮檔上傳
光是文字敘述是不夠的

Sheet2 A欄每一儲存格前都多了個空白字元
Sheet1 J4=TEXT(VLOOKUP("*"&B4&"*",Sheet2!$A$1:$D$1000,4,),"0%") 往下複製
作者: c_c_lai    時間: 2012-5-7 20:36

回復 8# register313
回復 7# slip
謝謝 Angela 與 register313 兩位的解說!
J4=TEXT(VLOOKUP("*"&B4&"*",Sheet2!$A$1:$D$100,4,)/100,"0.00%")
[attach]10841[/attach]
作者: slip    時間: 2012-5-8 01:01

回復 8# register313
感謝大大
我試了
還有問題如下

在Sheet1  G欄位變成原本值得100倍ㄝ
請再次協助
另外如在sheet2抓不到相對應資料,能否Sheet1中不是顯示#N/A而是呈現0
如sheet1中的102欄位"2450神腦

再次感謝

年過半百來此請益...給我一個讚吧...嘿嘿
各位高手大大,多謝幫忙...

P.S:Sheet2 A欄每一儲存格前都多了個空白字元
因為是直接每日copy過來,我有去檢查,都多了個空白字元,如沒影響,這樣我就偷懶繼續這樣用,謝謝
作者: chen_cook    時間: 2012-5-8 05:14

[attach]10850[/attach]回復 10# slip


    基礎excel的功能要加強.....!!!:@
作者: register313    時間: 2012-5-8 08:31

回復 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%"))
作者: slip    時間: 2012-5-8 10:27

回復 12# register313
謝謝,可以用了..
作者: slip    時間: 2012-5-8 16:43

本帖最後由 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為數字
拜託高手幫忙,謝謝!
作者: slip    時間: 2012-5-8 17:05

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

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

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

回復 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
複製代碼
[attach]10864[/attach]
[attach]10865[/attach]
作者: slip    時間: 2012-5-9 10:00

回復 16# c_c_lai
謝謝c_c_lai 大大;
今天開始運作後,一切順暢
感謝您的幫忙
誠心感謝
作者: slip    時間: 2012-5-16 15:44

回復 16# c_c_lai


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

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

在5min或10min或隨機?min要把整個2列復製 ...
能否請你描述清楚(明白)一點?
作者: slip    時間: 2012-5-17 15:14

回復 19# c_c_lai


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

回復 20# slip
試試看這是不是你的意思:
  1. Sub Test1()
  2.   '  假設你要複製 A2:E2 的即時資訊到M14:Q14 (等5個欄位) 的位置上
  3.    Sheets("Sheet1").[M14].Resize(, 5) = Sheets("Sheet1").[A2:E2].Value
  4. End Sub
複製代碼
如果這是你要的,你就可以增加一按鈕,將其指定巨集指向 Test1。
作者: slip    時間: 2012-5-18 15:46

回復 21# c_c_lai

c_c_lai 大大 您好,

之前我表達,語意不夠明確,改進陳述如下

A2 ~ D2為DDE函數  E2為B2-A2的值

從第3列開始,A3,B3,C3,D3是有需要時, 即時用手動方式copy A2,B2,C2,D2的DDE值(僅copy值,DDE函數不需要)
並同時,F3,G3設定的相減運算也同時計算出來

依此類推
第4列,第5列,第6列.......都是有需要時用手動方式copy A2,B2,C2,D2的DDE值,同時相減運算的數值也計算出來

再請幫忙加入設定,E欄,F欄,G欄中,數字為負數時呈現紅色字體

再次感謝 c_c_lai 大大的幫忙
謝謝
作者: c_c_lai    時間: 2012-5-18 20:44

回復 22# slip
試試看!
  1. Sub duplicate_Click()
  2.     Dim nextRows As Single
  3.    
  4.     With Sheets("Sheet1")
  5.         nextRows = .Range("A" & Rows.Count).End(xlUp).Row + 1
  6.         .Range("A" & nextRows & ":AH" & .UsedRange.Rows.Count).ClearContents
  7.    
  8.         .Range("A" & nextRows & ":E" & nextRows).Value = Sheets("Sheet1").[A2:E2].Value                ' A-E
  9.         .Range("I" & nextRows & ":AH" & nextRows).Value = Sheets("Sheet1").[I2:AH2].Value              ' I-AH
  10.         .Cells(nextRows, 6).Formula = "=C" & nextRows & "-P" & nextRows                                ' F
  11.         If .Cells(nextRows, 6).Value < 0 Then .Cells(nextRows, 6).Font.Color = 1
  12.         .Cells(nextRows, 7).Formula = "=D" & nextRows & IIf(nextRows = 3, "", "-D" & nextRows - 1)     ' G
  13.         If .Cells(nextRows, 7).Value < 0 Then .Cells(nextRows, 7).Font.Color = 1
  14.         .Cells(nextRows, 8).Formula = "=E" & nextRows & IIf(nextRows = 3, "", "-E" & nextRows - 1)     ' H
  15.         If .Cells(nextRows, 8).Value < 0 Then .Cells(nextRows, 8).Font.Color = 1
  16.     End With
  17. End Sub
複製代碼
[attach]11051[/attach]
作者: slip    時間: 2012-5-21 14:09

回復 23# c_c_lai
c_c_lai 大大 您好;

今天開盤後,用您給我的程式(如附件檔)

只能執行一次
我在不固定的時間,
當需要時,我就手動點選"工具--巨集--巨集--執行"
這樣就會copy出現新的一列...我要的資料

是這樣的使用嗎??我猜應該不是...<__>
請大大指導
謝謝
作者: c_c_lai    時間: 2012-5-21 15:06

回復 24# slip
因為你無法下載#23的附件,所以無法得知Excel上的增建按鈕的作用,你可以按照以下圖示操作:
[attach]11082[/attach]
當你要擷取資料時只要按那按鈕不是很省事嗎?
作者: slip    時間: 2012-5-21 19:25

回復 25# c_c_lai
c_c_lai  老師:

已修改成功
感恩+謝謝
作者: patrick    時間: 2012-5-22 23:58

按到  百分比 吧
取消 百分比方式顯示,就不會變成100倍了。
作者: pigchen    時間: 2012-5-30 11:19

感謝版主無私提供




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