早上無料,就整理了,沒特別用途,有用到資訊的人可以參考歐,但投資理財自負盈虧,不負任何責任。
喜歡攝影的我,喜歡到處拍拍照,吃點當地的特色食物。 跟朋友聊天之餘,推薦我寫成網誌跟大家分享。 沒外出的日子,喜歡在家當隱性宅,寫程式看看書,追劇。 希望我的手札文,不會讓你翻桌 XD
2021年7月23日 星期五
VBA:歷史資料計算本益比
首先準備資料:歷史股價(任意門YAHOO FINANCE),EPS:這部分資料各大卷商都有得查。
主題:小編主要是透過RANGE物件的方法AUTOFILTER與MAX、MIN等內建函數功能來完成本益比高低點歷史資料計算。
本益比簡單快入說明,就是股價/EPS=本益比;本益比高點=股價高點計算結果、本益比低點=股價低點計算結果。哈哈好廢話歐😁
來看VBA怎寫:
小編直接用YAHOO FINANCE下載的檔案直接新增一頁工作表1,然後在列1輸入年份,2020~2015;ˋ接著作一個按鈕插入以下CODE內容。
CODE:
Private Sub CommandButton1_Click() | |
list_data = Sheets("工作表1").Range("B1:G1") | |
J = 1 | |
Do While list_data(1, J) <> "" | |
Source = Excel.ActiveWorkbook.Name | |
Sheets("1101.TW").Activate | |
XX1 = Sheets("1101.TW").Range("A65536").End(xlUp).Row | |
Sheets("1101.TW").Range("$A$1:$f$" & XX1).AutoFilter Field:=1, Criteria1:= _ | |
">=" & list_data(1, J) & "/1/1", Operator:=xlAnd, Criteria2:="<=" & list_data(1, J) & "/12/31" | |
Set temp = Sheets("1101.TW").Range("B:E").SpecialCells(xlCellTypeVisible) | |
Sheets("工作表1").Cells(3, J + 1).Value = Format(Application.Max(temp), "##.00") | |
Sheets("工作表1").Cells(4, J + 1).Value = Format(Application.Min(temp), "##.00") | |
Sheets("工作表1").Cells(5, J + 1).Value = Format(Sheets("工作表1").Cells(3, J + 1) / Sheets("工作表1").Cells(2, J + 1), ".00") | |
Sheets("工作表1").Cells(6, J + 1).Value = Format(Sheets("工作表1").Cells(4, J + 1) / Sheets("工作表1").Cells(2, J + 1), ".00") | |
Sheets("1101.TW").AutoFilterMode = False | |
'Sheets("1101.TW").Activate | |
Sheets("工作表1").Activate | |
If J = UBound(list_data) Then | |
Exit Do | |
End If | |
Windows(Source).Activate | |
J = J + 1 | |
Loop | |
End Sub |
539了嗎?三星組合出現次數彙整
一樣透過vba做數字組合練習,就來臉習各三星組合好了,539數字組合為1~39等數字,排列組合不重複,三星數字組合合計有9139組組合,小編透過歷史資料比對後整理出9139組數字組合開獎的次數。 單純寫寫程式玩玩,別參考買注歐
2021年7月22日 星期四
VBA:FileDialog+Workbook.SaveAs 另存新檔
一個朋友跟我說,很多時後掌握基礎比複雜的說明問題更好;今天處理自己工作上的xlsx檔案轉存為xls檔案,用了之前自己寫的FileDialog案例,也做做分享。
作一個按鈕插入以下CODE:
CODE流程:關閉自動運算等功能>宣告物件>對話框>迴圈>開啟檔案>變更檔名>關閉>下一個檔案>離開迴圈>完成對話框顯示
操作流程:點選按鈕>對話框選擇檔案>開始轉換>發呆
Private Sub CommandButton1_Click() | |
Application.ScreenUpdating = False | |
Application.DisplayStatusBar = False | |
Application.Calculation = xlCalculationManual | |
Application.EnableEvents = False | |
ActiveSheet.Cells.Clear | |
Source = Excel.ActiveWorkbook.Name | |
Dim fd As FileDialog '宣告一個檔案對話框 | |
Set fd = Excel.Application.FileDialog(msoFileDialogFilePicker) '設定選取檔案功能 | |
Application.DisplayAlerts = False | |
fd.Filters.Clear '清除之前的資料 | |
fd.InitialFileName = Excel.ActiveWorkbook.Path '設定預設目錄 | |
fd.Filters.Add "Excel File", "*.xls*" '設定顯示的副檔名 | |
fd.Filters.Add "Word File", "*.txt" | |
fd.Filters.Add "Word File", "*.csv" | |
fd.Filters.Add "所有檔案", "*.*" | |
fd.Show '顯示對話框 | |
For I = 1 To fd.SelectedItems.Count | |
strFullName = fd.SelectedItems(I) 'FILE_AA(i) | |
Workbooks.Open Filename:=strFullName | |
WORKNAME = Excel.ActiveWorkbook.Name | |
Windows(WORKNAME).Activate | |
ActiveWorkbook.SaveAs ActiveWorkbook.Path & "\" & WORKNAME & "-NEW" & ".xls", FileFormat:=xlExcel8 | |
WORKNAME = Excel.ActiveWorkbook.Name | |
Windows(WORKNAME).Close | |
Windows(Source).Activate | |
ActiveSheet.Range("A" & I + 1) = WORKNAME | |
Next | |
Application.ScreenUpdating = True | |
Application.DisplayStatusBar = True | |
Application.Calculation = xlCalculationAutomatic | |
Application.EnableEvents = True | |
MsgBox "SAVESA IS DONE " | |
End Sub |
2021年7月20日 星期二
VBA:排列組合遊戲
最近在用VBA排列組合一些數字,做4組數字排列組合的生成,那為何不往5組或更多數字呢!!
因為超過4組數字的1~39高達百萬,要用不同方法堆壘資料阿......
架構:先產生1~39的數字>轉換為陣列>透過迴圈組合數字>檢查有無重複>回寫EXCEL A行Sub 排列組合不重複() | |
For i = 1 To 39 Step 1 | |
If ARR = "" Then | |
ARR = i | |
Else | |
ARR = ARR & "," & i | |
End If | |
Next i | |
ARR = Split(ARR, ",") | |
Set d = CreateObject("scripting.dictionary") | |
For i = LBound(ARR) To UBound(ARR): | |
For J = LBound(ARR) To UBound(ARR): | |
For K = LBound(ARR) To UBound(ARR): | |
OUT = Format(ARR(i), "0#") & Format(ARR(J), "0#") & Format(ARR(K), "0#") | |
If Rept_CHECK(OUT, 2) = False Then d(ARR(i) & ARR(J) & ARR(K)) = "" | |
Next: | |
Next: | |
Next | |
[a1].Resize(d.Count, 1).NumberFormatLocal = "@" | |
[a1].Resize(d.Count, 1) = Application.Transpose(d.keys) | |
End Sub | |
Function Rept_CHECK(SOURCE_str, LEN_STR) As Boolean | |
Rept_CHECK = False | |
For i = 1 To Len(SOURCE_str) - 1 | |
For J = i + 1 To Len(SOURCE_str) | |
If Mid(SOURCE_str, i, LEN_STR) = Mid(SOURCE_str, J, LEN_STR) Then | |
Rept_CHECK = True | |
Exit For | |
End If | |
Next | |
Next | |
End Function |
VBA:OUTLOOK 指定收件夾轉存信件
這幾天想要透過outlook弄自動化,寫了個簡單的vba,
目的是指定特定收件夾,將郵件轉存到指定資料夾,以利excel存取。
架構:設定存取outlook收件夾>迴圈執行存檔>檢查檔案是否存在>寫檔
啟用outlook 的vba編輯視窗,找到thisoutlooksession,然後貼上vba code即可
Sub Save_mial_Body_main() | |
'會將收件匣中 "特定資料匣" 裡,所有信件的全部另存到程式裡設定的路徑去 | |
Dim my_Name_Space As Outlook.NameSpace | |
Dim my_Folder, my_Inbox As Outlook.MAPIFolder | |
Dim my_Items As Outlook.Items | |
Dim i As Integer | |
Set fs = CreateObject("Scripting.FileSystemObject") | |
Set my_Name_Space = Application.GetNamespace("MAPI") | |
Set my_Inbox = my_Name_Space.GetDefaultFolder(olFolderInbox) 'myFolder 代表 "收件匣 Inbox" | |
Set my_Folder = my_Inbox.Folders("xxxx") 'XXX 是 "特定資料匣",是在收件匣中 | |
Set my_Items = my_Folder.Items 'myItems 代表 "特定資料匣" 中所有信件 (的集合) | |
For Each mail In my_Items '檢查每一封信 | |
Call Save_mial_Body_sub(mail) | |
Next mail | |
End Sub | |
Sub Save_mial_Body_sub(Item) 'Item As Object | |
On Error GoTo line1 | |
'存檔副程式,於存檔時引用FileSystemObject 檢查檔案是否存在,沒有才寫資料 | |
Set fs = CreateObject("Scripting.FileSystemObject") | |
Const olMsg As Long = 3 | |
Dim m As MailItem | |
Dim savePath As String | |
If TypeName(Item) <> "MailItem" Then Exit Sub | |
Set m = Item | |
savePath = "d:\測試區\ " | |
MailDate = Year(Item.SentOn) & Month(Item.SentOn) & Day(Item.SentOn) | |
savePath = savePath & m.Subject & MailDate '’Format(Now(), "yyyy-mm-dd-hhNNss") | |
savePath = savePath & ".msg" | |
SFName = savePath | |
If fs.FileExists(SFName) = False Then | |
savePath = Replace(savePath, " ", "") | |
savePath = Replace(savePath, "?", "") | |
m.SaveAs Replace(savePath, "?", ""), olMsg | |
End If | |
Exit Sub | |
line1: | |
MsgBox "error" | |
End Sub |
2021年7月13日 星期二
指數變化(2025.03.20)
指數變化(2025.03.20) 上周焦點: 美國紐約州製造業指數 -20 美國企業庫存月增率 +0.3% 美國零售額月增率 +0.1% FED 不升息 川普 名句:對等關稅是具備彈性的 本周愛看: 美國消費者信心指數 3/25 美國耐久財訂單月增率 3/26 ...

-
寫給自己速查 垂直屬性:HorizontalAlignment 水平屬性:VerticalAlignment 置中:xlCenter 靠左靠右:XLLEFT、XLRIGHT Sheets("工作表1").Range("m2").Ve...
-
美國實質可支配所得 利率與黃金 消費者信心 利率PK DW PK FED紐約分行 上海貨櫃指數 BDI CRB 美國m 1 m2 s&p 美國 非農 美國 非農就業職務空缺率 美國股市 行事曆 fomc 會議紀要與開會時間 全球股市行事曆 全球股市 巴菲特指數 外...
-
整理資料時,不免要判斷資料數量,在判斷資料時,資料有時會有不連續與連續資料,這時候判斷方式不盡相同 連續資料時: a行於65000儲存格以前的最後列,有點饒舌;應該是這樣看,從a65000往上找(xlup),找到的第一個儲存格,也相對於是a行在65000列之前最後一列。 END...