標題:
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 某些設定欄位請參照附圖照畫葫即可。
' DDE 資料紀錄問題
Option Explicit
Dim actEnabled As Boolean
Dim cIndex As Single
Private Sub Workbook_Open()
' 以下四列資料之設定,可配合實作、或測試之目的,直接在 "sheet1" 指定之設定欄,得隨時予以異動。
If (Sheets("sheet1").Range("BA1").Value = "") Then Sheets("sheet1").Range("BA1").Value = "08:45:00" ' 假設C6欄位為空白,則寫入開盤起始時間
If (Sheets("sheet1").Range("BA2").Value = "") Then Sheets("sheet1").Range("BA2").Value = "13:45:59" ' D6欄位亦同。(此兩欄紀錄起始終止時間)
If (Sheets("sheet1").Range("BB1").Value = "") Then Sheets("sheet1").Range("BB1").Value = "00:01:00" ' 紀錄資料匯入相隔時間,如每隔一分鐘寫入一次。
If (Sheets("sheet1").Range("BB2").Value = "") Then Sheets("sheet1").Range("BB2").Value = 0 ' 紀錄已匯入資料列數。
If (TimeValue(Now) > Sheets("sheet1").Range("BA2").Value) Then ' 如果目前時間業已超過 D6 的營業時段,則呼叫.......
Call stopProcedure
Else ' 反之在 D6 設定時間以前,則呼叫.......
Call startProcedure
End If
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
On Error Resume Next
Call actStop
End Sub
Sub startProcedure() ' 保留作為控制項之應用程序,如按鈕之巨集應用等。
Call actStart
End Sub
Sub stopProcedure() ' 保留作為控制項之應用程序,如按鈕之巨集應用等。
Call actStop
End Sub
Sub newTitle()
Sheets(2).[A1].Resize(, 4) = Sheets(1).[A1:D1].Value ' 套上你欲匯入資料的表頭名稱
End Sub
Sub Starter()
If (actEnabled = True And TimeValue(Now) >= Sheets("sheet1").Range("BA1").Value And TimeValue(Now) <= Sheets("sheet1").Range("BA2").Value) Then
cIndex = Sheets("sheet1").Range("BB2").Value
If (cIndex = 0) Then Call newTitle ' newTitle 程序 (由使用者自行定義) 是將第一列的資料抬頭名稱寫入到sheet2;如日期、時間的對應欄位資料等。
Sheets("sheet1").Range("BB2").Value = cIndex + 1 ' 紀錄列號加一。
' 複製從券商DDE匯入之相對應位置資料,如 A1、B1、C1、D1 對應的可能是內盤、外盤、成交、漲跌等等,以此類推。
Sheets(2).[A65536].End(xlUp).Offset(1).Resize(, 4) = Sheets(1).[A2:D2].Value
cIndex = Sheets("sheet1").Range("BB2").Value ' 切記 Counter (計數器) 要加一,否則永遠為零 (當然已也可以不予紀錄資料列述,依個人習性)。
End If
End Sub
Sub onStarter()
If Not IsError(Sheets(1).[A2]) Then Call Starter
If actEnabled Then Call actStart
End Sub
Sub actStart()
actEnabled = True
Application.OnTime (Now + Sheets("sheet1").Range("BB1").Value), "ThisWorkBook.onStarter" ' 寫入資料的排程 (目前是每隔五分鐘寫入一次)
End Sub
Sub actStop()
actEnabled = False
On Error Resume Next
Application.OnTime Now, "ThisWorkBook.onStarter", , False
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
試試看這是不是你的意思:
Sub Test1()
' 假設你要複製 A2:E2 的即時資訊到M14:Q14 (等5個欄位) 的位置上
Sheets("Sheet1").[M14].Resize(, 5) = Sheets("Sheet1").[A2:E2].Value
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
試試看!
Sub duplicate_Click()
Dim nextRows As Single
With Sheets("Sheet1")
nextRows = .Range("A" & Rows.Count).End(xlUp).Row + 1
.Range("A" & nextRows & ":AH" & .UsedRange.Rows.Count).ClearContents
.Range("A" & nextRows & ":E" & nextRows).Value = Sheets("Sheet1").[A2:E2].Value ' A-E
.Range("I" & nextRows & ":AH" & nextRows).Value = Sheets("Sheet1").[I2:AH2].Value ' I-AH
.Cells(nextRows, 6).Formula = "=C" & nextRows & "-P" & nextRows ' F
If .Cells(nextRows, 6).Value < 0 Then .Cells(nextRows, 6).Font.Color = 1
.Cells(nextRows, 7).Formula = "=D" & nextRows & IIf(nextRows = 3, "", "-D" & nextRows - 1) ' G
If .Cells(nextRows, 7).Value < 0 Then .Cells(nextRows, 7).Font.Color = 1
.Cells(nextRows, 8).Formula = "=E" & nextRows & IIf(nextRows = 3, "", "-E" & nextRows - 1) ' H
If .Cells(nextRows, 8).Value < 0 Then .Cells(nextRows, 8).Font.Color = 1
End With
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/)