2020年10月24日 星期六

Excel Vba 如何整理股權分散表(集保庫存) 四、依照檔案別維護個股股權分散表(集保庫存)

 前一篇說明如何整理,這一篇說明怎樣維護股權資料。

這次會多使用到Scripting.FileSystemObject這個物件。

使用這個物件目的在於判斷檔案有無使用。

先回到維護作業這件事,既然說是維護,那就是既有檔案的資料再更新這樣的概念。

整理一下流程:載入股權分散表>開啟個股檔案>開始更新資料>存檔。

流程展開:

1.清除前回工作頁資料>2.載入股權分散表>3.回寫股權分散表到工作頁中>4.根據股號判斷檔案有無>5.有檔案做開啟個股檔案>6.開始更新資料>7.存檔;流程編號4.中,若無檔案則寫入標題與資料後做檔案新建>以股號存檔

有一個前提,就是VBA的EXCEL跟個股在同一個資料夾中歐,才能檢查有無檔案,否則就要指定資料夾

VBA:

這次多一個FUNCTION副程式,這個副程式功能是用來判斷檔案存在與否用的,當檔案存在則回傳1,反之回傳0

FUNCTION 副程式

Function 檢查檔案存在(S) '檔案存在與否副程式判斷

        'S表示路徑
        
        Set fs = CreateObject("Scripting.FileSystemObject") '引用Scripting.FileSystemObject 以使用檔案有無判斷的方法
        If fs.FileExists(S) Then
            檢查檔案存在= 1  '表示存在
        Else
            檢查檔案存在= 0
        End If
        
        
End Function

先做一個ACTIVEX 的命令按鈕。

然後維護以下VBA:

     '此段VBA內碼具備有檔案存在有無判斷,當不存在檔案時,會執行產生新檔案的內碼。

'5/20更新、增加移除重複資料的功能

Private Sub CommandButton1_Click()
'標題
NEW_TAG = Array("DATE", "999", "999股數", "1000", "1000股數", "5000", "5000股數", "10000", "10000股數", "15000", "15000股數", "20000", "20000股數", "30000", "30000股數", "40000", "40000股數", "50000", "50000股數", "100000", "100000股數", "200000", "200000股數", "400000", "400000股數", "600000", "600000股數", "800000", "800000股數", "1000000", "1000001股數")
I = 1
Source = Excel.ActiveWorkbook.Name '儲存目前作業中檔案名稱
Do While Sheets("工作表1").Range("A" & I) <> ""
Sheets("集保戶股權分散表").Range("I1") = "證券代號"
Sheets("集保戶股權分散表").Range("I2") = Sheets("工作表1").Range("A" & I) '每次迴圈執行的股票代號
STOCK_ID = Sheets("工作表1").Range("A" & I)
Sheets("工作表3").Cells.Clear
Sheets("工作表3").Range("A1:AE1") = NEW_TAG
Call 進階篩選個股 '可以自己錄製或是參考
'Excel Vba 如何整理股權分散表(集保庫存) 一、進階篩選個股 (AdvancedFilter )
COUNT_集保 = Application.CountA(Sheets("集保戶股權分散表").Range("M1:M100"))
A = Sheets("集保戶股權分散表").Range("M2:O" & COUNT_集保) '集保篩選的資料
K = Sheets("集保戶股權分散表").Range("K2") 'DATE
FILE_PATH = ThisWorkbook.Path & "\" & STOCK_ID & ".xls"
檢查檔案存在_C = 檢查檔案存在(FILE_PATH)
If 檢查檔案存在_C = 1 Then
'存在時開啟檔案寫入資料。
Workbooks.Open Filename:=FILE_PATH
WORKNAME = Excel.ActiveWorkbook.Name
Windows(WORKNAME).Activate
COUNT_寫入 = ActiveSheet.Range("A2000").End(xlUp).Row + 1
ActiveSheet.Range("A" & COUNT_寫入) = K
X1 = 2
X2 = 3
For X3 = LBound(A) To UBound(A) - 2 Step 1
ActiveSheet.Cells(COUNT_寫入, X1) = A(X3, 2)
ActiveSheet.Cells(COUNT_寫入, X2) = A(X3, 3)
X1 = X1 + 2
X2 = X2 + 2
Next X3
COUNT_寫入 = ActiveSheet.Range("A2000").End(xlUp).Row
Dim myRange As Range
Set myRange = ActiveSheet.Range("A1:AE" & COUNT_寫入)
myRange.RemoveDuplicates Columns:=Array(1), Header:=xlYes
COUNT_寫入 = ActiveSheet.Range("A2000").End(xlUp).Row
ActiveSheet.Range("A1:AE" & COUNT_寫入).Sort Key1:=ActiveSheet.Range("A1"), Order1:=xlDescending, Header:=xlYes, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _
:=xlStroke, DataOption1:=xlSortNormal
Workbooks(WORKNAME).Save
Workbooks(WORKNAME).Close
Else
Sheets("工作表3").Cells.Clear
Sheets("集保戶股權分散表").Range("K:P").Clear '清除前回執行結果
Sheets("工作表3").Range("A1:AE1") = NEW_TAG
COUNT_寫入 = Sheets("工作表3").Range("A2000").End(xlUp).Row + 1
Sheets("工作表3").Range("A" & 2) = K
X1 = 2
X2 = 3
For X3 = LBound(A) To UBound(A) - 2 Step 1
ActiveSheet.Cells(COUNT_寫入, X1) = A(X3, 2)
ActiveSheet.Cells(COUNT_寫入, X2) = A(X3, 3)
X1 = X1 + 2
X2 = X2 + 2
Next X3
Sheets("工作表3").Copy
WORKNAME = Excel.ActiveWorkbook.Name
Workbooks(WORKNAME).Activate
ActiveWorkbook.SaveAs ThisWorkbook.Path & "\" & STOCK_ID & ".xls", FileFormat:=56
WORKNAME = Excel.ActiveWorkbook.Name
Workbooks(WORKNAME).Close
End If
I = I + 1 'I是控制取得ActiveSheet.Range("H" & I)儲存格資料的步進值
Workbooks(Source).Activate
Loop
End Sub

  

image

圖1.維護示意圖:

功能發想:如果你跟小編一樣,有數量眾多的股權分散表資料,如圖2,那可以思考把"檔案載入"跟"自動維護功能"用SUB互交呼交功能(CALL)連在一起做運用歐。

image

圖2.集保戶股權分散表資料檔

小編就分享整理資料與更新到這,接下來就是思考如何分析,這每個投資人各有各自的想法小編就不老王賣瓜了,有興趣參考分析可以參考小編 集保庫存 記錄(視覺化)

沒有留言:

張貼留言

指數變化(2025.03.28)

 指數變化(2025.03.28) 上周焦點: 美國消費者信心指數 3/25 92.9 美國耐久財訂單月增率 3/26 1.4 PCE 月增 0.4 年增 2.8 (不多阿,最高還有5.5ㄝ)   本周愛看: 美國非農業就業人數變化 美國ISM製造業採購經理人指數 美國芝加哥FE...