返回列表 上一主題 發帖

[原創] 上市櫃三大法人買賣超日報資料彙整處理

回復 1# VBALearner
你那 "C:\三大法人更新區\201*" 裡的
檔案內容是否如:
BIGD_1050804.rar (11.14 KB)
一樣?
是否也請上傳一個 "C:\三大法人更新區\201*"
中之任一檔案做為參考?

TOP

回復 10# VBALearner
能否提共另三個網址?

TOP

本帖最後由 c_c_lai 於 2016-8-6 10:36 編輯

回復 12# VBALearner
我做了一些更動 (整合、以及語法修正), 請參考:
上市櫃三大法人買賣超.rar (860.81 KB)
至於自動下載尚在研究、思考中。
上市上櫃交易(tbl As String, tbl2 As String, pos1 As Integer, pos2 As Integer, typ As String, Optional auto As Boolean = False)
中的 auto 即為預留之伏筆。

TOP

本帖最後由 c_c_lai 於 2016-8-6 11:52 編輯

回復 12# VBALearner
  1. Option Explicit
  2. Option Base 1

  3. Sub 調整儲存格大小()
  4.     Dim cts As Integer
  5.    
  6.     For cts = 1 To Sheets.Count
  7.         With Sheets(cts)
  8.             .Activate
  9.             .Columns.ColumnWidth = 10
  10.             .Rows.RowHeight = 15
  11.         End With
  12.     Next
  13. End Sub

  14. Sub 批量匯入買賣超與價格()
  15.     Call 上市上櫃交易("上市外資", "上市投信", 4, 7, "201*")    '  批量匯入買賣超
  16.     Call 上市上櫃交易("上櫃外資", "上櫃投信", 4, 7, "BIG*")    '  批量匯入價格
  17.     Call 上市上櫃交易("上市收盤價", "", 8, 0, "A112201*")     '  更新買賣超
  18.     Call 上市上櫃交易("上櫃收盤價", "", 2, 0, "SQUOTE*")     '  更新價格
  19.     Beep
  20. End Sub

  21. Sub 上市上櫃交易(tbl As String, tbl2 As String, pos1 As Integer, pos2 As Integer, typ As String, Optional auto As Boolean = False)
  22.     Dim myFile As String, myDate As String
  23.     Dim rng As Range, stkNo As Variant
  24.     Dim wb As Workbook
  25.     Dim cts As Long, xs As Long
  26.    
  27.     Application.ScreenUpdating = False
  28.     xs = Sheets(tbl).Range("A" & Rows.Count).End(xlUp).Row
  29.     ReDim tget2(xs - 1) As Long
  30.     If pos2 > 0 Then
  31.         ReDim tget3(xs) As Long
  32.     End If

  33.     stkNo = Application.Transpose(Range(Sheets(tbl).Range("A2"), Sheets(tbl).[A2].End(xlDown)))
  34.       
  35.     myFile = Dir("C:\三大法人更新區\" & typ)
  36.     Do While myFile <> ""
  37.         Workbooks.Open "C:\三大法人更新區\" & myFile
  38.         Select Case typ
  39.             Case "201*"               '  (20160802_2by_issue.csv)
  40.                 myDate = Left(myFile, 8)
  41.             Case "BIG*"               '  (BIGD_1050802.csv)
  42.                 myDate = Mid(myFile, 6, 7): myDate = CStr((Val(Left(myDate, 3)) + 1911)) + Mid(myDate, 4, 4)
  43.             Case "A112201*"           '  (A11220160802ALL.csv)
  44.                 myDate = Mid(myFile, 5, 8)
  45.             Case "SQUOTE*"            '  (SQUOTE_AL_1050802.csv)
  46.                 myDate = Mid(myFile, 11, 7): myDate = CStr((Val(Left(myDate, 3)) + 1911)) + Mid(myDate, 4, 4)
  47.         End Select
  48.          
  49.         myDate = Left(myDate, 4) + "/" + Mid(myDate, 5, 2) + "/" + Right(myDate, 2)
  50.         
  51.         myFile = Dir '第二次調用Dir函數而不帶任何參數,則會返回至同一目錄下的下一個文件
  52.         
  53.         Set wb = ActiveWorkbook
  54.         With Sheets(1)
  55.             For cts = 1 To xs - 1
  56.                 Set rng = .Range("A:A").Find(stkNo(cts))
  57.                 If Not rng Is Nothing Then
  58.                     tget2(cts) = IIf(IsNumeric(rng.Offset(0, pos1).Value), rng.Offset(0, pos1).Value, 0)                    '  (0, 8)
  59.                     If pos2 > 0 Then tget3(cts) = IIf(IsNumeric(rng.Offset(0, pos2).Value), rng.Offset(0, pos2).Value, 0)   '  (0, 7)
  60.                 Else
  61.                     tget2(cts) = 0
  62.                     If pos2 > 0 Then tget3(cts) = 0
  63.                 End If
  64.             Next
  65.         End With
  66.         wb.Close SaveChanges:=False
  67.         
  68.         With Sheets(tbl)
  69.             .Activate
  70.             Set rng = Range(.[A1], .[A1].End(xlToRight))     '  從 A 欄至最右欄位範圍
  71.             Set rng = rng.Find(CDate(myDate), LookIn:=xlValues, LookAt:=xlWhole)
  72.             If rng Is Nothing Then
  73.                 .Range("C:C").Insert
  74.                 Set rng = .[C1]
  75.                 rng.Value = myDate
  76.             End If
  77.             '  Range(.Range("C2"), .Range("C" & .[A2].End(xlDown).Row)) = Application.Transpose(tget2)
  78.             Range(rng.Offset(1), .Range(Chr(64 + rng.Column) & .[A2].End(xlDown).Row)) = Application.Transpose(tget2)
  79.         End With
  80.         
  81.         If tbl2 <> "" Then
  82.             With Sheets(tbl2)
  83.                 .Activate
  84.                 Set rng = Range(.[A1], .[A1].End(xlToRight))     '  從 A 欄至最右欄位範圍
  85.                 Set rng = rng.Find(CDate(myDate), LookIn:=xlValues, LookAt:=xlWhole)
  86.                 If rng Is Nothing Then
  87.                     .Range("C:C").Insert
  88.                     Set rng = .[C1]
  89.                     rng.Value = myDate
  90.                 End If
  91.                 '  Range(.Range("C2"), .Range("C" & .[A2].End(xlDown).Row)) = Application.Transpose(tget3)
  92.                 Range(rng.Offset(1), .Range(Chr(64 + rng.Column) & .[A2].End(xlDown).Row)) = Application.Transpose(tget3)
  93.             End With
  94.         End If
  95.     Loop
  96.    
  97.     Application.ScreenUpdating = True
  98. End Sub
複製代碼

TOP

        靜思自在 : 【時間如鑽石】時間對一個有智慧的人而言,就如鑽石般珍貴;但對愚人來說,卻像是一把泥土,一點價值也沒有。
返回列表 上一主題