利用 excel 巨集處理日期不同長度之資料

利用 excel 巨集處理日期不同長度之資料

Yahoo finance 下載股市日資料 (daily data) 後,在整理各國資料時,你應該會發現,由於各國節慶休假日不同,將導致股市交易日不同。一種資料處理之做法是取兩國交易日之交集,即留下兩國皆有的交易 日,如此才能統一樣本資料長度。我寫了以下之 Excel 之巨集程式碼,可以自動刪除兩種交易日期不一的資料樣本,以利加快資料處理之速度,不需人工一行行地比對來刪除資料。

Yahoo finance 下載之日資料格式

下載時存成 csv 檔, 讀入 Excel 後, 其形式通常如下, 共有 A-G 欄 7 個欄位:
Date Open High Low Close Volume Adj Close
再將另一個國家之 csv 資料, 同樣讀入 Excel 後, 放在 I-O 欄 7 個欄位,

注意!! 以下的動作請先用 Excel 依日期先後排序
1. 兩個資料中間, 故意留一個空的 H 欄, 並在 H2 輸入 Excel 公式: =A2-I2,
2. 並將 H2 之「儲存格格式」改成「數值」
3. 接著將以下的巨集指定快速鍵 (例如 Ctrl+a), 然後一直按快速鍵, 此巨集即會自動刪除不一致的日期資料 (請小心使用)

Excel 巨集程式碼
Sub Macro3()
'
' Macro3 巨集表
' pundit 在 2010/2/6 錄製的巨集
'
' 快速鍵: Ctrl+a
'
'ActiveCell.Offset(-1, 0).Range("A1").Select
'Selection.Copy
'ActiveCell.Offset(1, 0).Range("A1").Select
'ActiveSheet.Paste
' -------> delete right part
If ActiveCell.Value > 0 Then
ActiveCell.Offset(0, 1).Range("A1:G1").Select
Application.CutCopyMode = False
Selection.Delete Shift:=xlUp
'move to left
ActiveCell.Offset(0, -1).Range("A1").Select
'move to up
ActiveCell.Offset(-1, 0).Range("A1").Select
Selection.Copy
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveSheet.Paste
End If
' -------> delete left part
If ActiveCell.Value < 0 Then
ActiveCell.Offset(0, -7).Range("A1:G1").Select
Application.CutCopyMode = False
Selection.Delete Shift:=xlUp
'move to right
ActiveCell.Offset(0, 7).Range("A1").Select
'move to up
ActiveCell.Offset(-1, 0).Range("A1").Select
Selection.Copy
'move to down
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveSheet.Paste
End If
If ActiveCell.Value = 0 Then
Selection.Copy
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveSheet.Paste
End If
End Sub

點擊就能免費打賞大叔

這個網誌中的熱門文章

99年度請領勞保年金者,在104年6月底就會收到依物價指數調整後的年金金額。

因噎廢食