喜歡攝影的我,喜歡到處拍拍照,吃點當地的特色食物。 跟朋友聊天之餘,推薦我寫成網誌跟大家分享。 沒外出的日子,喜歡在家當隱性宅,寫程式看看書,追劇。 希望我的手札文,不會讓你翻桌 XD
2020年11月21日 星期六
2020年11月18日 星期三
VBA:使用EXCEL內建函數(APPLICATION、WorksheetFunction)
斜率或截距在VBA基本迴歸入門中有提到使用EXCEL內建函數,這邊簡單介紹一下EXCEL好用的內建函數,如何在EXCEL VBA中直接使用。
2種方式:
application
Application.WorksheetFunction
舉例1:sum函數,透過以上兩種語法結果都是一樣的。
application.sum(activesheet.range("a1:a10"))
Application.WorksheetFunction.sum(activesheet.range("a1:a10"))
但在VBA編輯時,
Application.WorksheetFunction可以自動帶出下拉式選單方便選擇。
來選擇要回傳斜率或截距等資料,但透過VBA,可以一次取存斜率或截距等資料,
不過是透過陣列的方式。如圖2.
Private Sub CommandButton1_Click() | |
s1 = ActiveSheet.Range("A2000").End(xlUp).Row | |
B1 = Application.WorksheetFunction.LinEst(ActiveSheet.Range("c2:" & "c" & s1), ActiveSheet.Range("b2:" & "b" & s1)) | |
If B1(2) > 0 Then | |
MsgBox "y=" & Format(B1(1), "##.00") & "+" & Format(B1(2), "##.00") & "x" | |
Else | |
MsgBox "y=" & Format(B1(1), "##.00") & "-" & Format(B1(2), "##.00") & "x" | |
End If | |
MsgBox "第二次" | |
B1 = Application.LinEst(ActiveSheet.Range("c2:" & "c" & s1), ActiveSheet.Range("b2:" & "b" & s1)) | |
If B1(2) > 0 Then | |
MsgBox "y=" & Format(B1(1), "##.00") & "+" & Format(B1(2), "##.00") & "x" | |
Else | |
MsgBox "y=" & Format(B1(1), "##.00") & "-" & Format(B1(2), "##.00") & "x" | |
End If | |
End Sub |
2020年11月17日 星期二
2020年11月16日 星期一
VBA:矩陣計算(相加)
矩陣計算:矩陣相加
矩陣是?參WIKI
筆者日前分享了Application.InputBox
利用機會結合一下矩陣計算,做VBA應用分享。
步驟:
1.先做一個VBA,ActiveX按鈕,如圖1.,VBA code:
'COPYRIGHT BY dropit.liu. | |
Private Sub CommandButton1_Click() | |
A_INPUTBOX_address = Application.InputBox("", Type:=8).Address '取得位置 | |
A_INPUTBOX = ActiveSheet.Range(A_INPUTBOX_address).Value '取得資料 | |
b_INPUTBOX_address = Application.InputBox("", Type:=8).Address '取得位置 | |
b_INPUTBOX = ActiveSheet.Range(b_INPUTBOX_address).Value '取得資料 | |
A_CHECK = UBound(A_INPUTBOX) | |
B_CHECK = UBound(b_INPUTBOX) | |
If A_CHECK <> B_CHECK Then | |
MsgBox "矩陣不對稱" | |
End If | |
For i = LBound(A_INPUTBOX) To UBound(A_INPUTBOX) Step 1 | |
For j = LBound(A_INPUTBOX) To UBound(A_INPUTBOX) Step 1 | |
A_INPUTBOX(i, j) = A_INPUTBOX(i, j) + b_INPUTBOX(i, j) | |
Next j | |
Next i | |
Call sheet_name_check_delete("矩陣相加結果") | |
Call 矩陣輸出("矩陣相加結果") | |
End Sub |
'COPYRIGHT BY dropit.liu. | |
Sub sheet_name_check_delete(name_check) '若sheet已存在則刪除 | |
For I = 1 To Sheets.Count Step 1 | |
If Sheets(I).Name = name_check Then | |
Sheets(I).Delete | |
exit for | |
End If | |
Next I | |
End Sub |
'COPYRIGHT BY dropit.liu. | |
Sub 矩陣輸出(SHEET_NAME) | |
Sheets.Add after:=Sheets(Sheets.Count) | |
Sheets(Sheets.Count).Name = SHEET_NAME | |
Sheets(SHEET_NAME).Range(A_INPUTBOX_address) = A_INPUTBOX '寫入資料 | |
Sheets(SHEET_NAME).Range(A_INPUTBOX_address).Interior.Color = QBColor(14) '反黃儲存格 | |
End Sub |
1.先選擇放有矩陣的儲存格(A、B兩個矩陣選擇對話框);
2.自動產生"矩陣相加結果"工作表,作為結果輸出。
2020年11月14日 星期六
VBA:矩陣計算(常數項乘矩陣)
矩陣計算:常數項與矩陣相乘
'COPYRIGHT BY dropit.liu. | |
Private Sub CommandButton1_Click() | |
A_INPUTBOX_address = Application.InputBox("", Type:=8).Address '取得位置 | |
A_INPUTBOX = ActiveSheet.Range(A_INPUTBOX_address).Value '取得資料 | |
If IsArray(A_INPUTBOX) = True Then | |
常數 = InputBox("輸入常數數字") | |
For i = LBound(A_INPUTBOX) To UBound(A_INPUTBOX) Step 1 | |
For j = LBound(A_INPUTBOX) To UBound(A_INPUTBOX) Step 1 | |
A_INPUTBOX(i, j) = 常數 * A_INPUTBOX(i, j) | |
Next j | |
Next i | |
Call sheet_name_check_delete("常數乘矩陣結果") | |
Call 矩陣輸出("常數乘矩陣結果") | |
End If |
操作類似VBA:矩陣計算(相加)
先選擇放有矩陣的儲存格;
再對話況再輸入常數項
自動產生"常數乘矩陣結果"工作表,作為結果輸出。
整體來說,選擇儲存格>運算>輸出。
輸出部分,小編簡單用一個副程式來整理輸出,此部分可以參考VBA:矩陣計算(相加)。
VBA:使用選擇對話框(Application.InputBox)
在操作EXCEL時,大家一錠都有一個經驗,在設定某些功能時,
如用分析工具箱時,點選完想要用的分析方法後,
例如圖1.迴歸操作的輸入Y範圍(Y):;
圖1.迴歸操作
點選後就可以在EXCEL工作頁中選擇要使用的資料範圍。
這個對話框,可以透過Application.InputBox這個方法來滿足。
根據MSDN回饋我們的,要掌握回傳值的結果,要設定TYPE這個參數;
筆者設定為8,也就是"儲存格參照,視為 Range 物件"的回傳值。
EX:
Private Sub CommandButton1_Click() | |
A_INPUTBOX = Application.InputBox("", Type:=8) | |
End Sub |
Private Sub CommandButton1_Click() | |
A_INPUTBOX = Application.InputBox("", Type:=1+2) | |
End Sub |
2020年11月12日 星期四
VBA:基本迴歸入門(分析工具箱-VBA)
前一篇VBA:基本迴歸入門,講了一點入門的部分,在這補充一點分析工具箱的VBA 引用,請在增益集中選如圖1的部分,別單單僅選分析工具而已歐。要點選分析工具箱-VBA
Application.Run "ATPVBAEN.XLAM!Regress", ActiveSheet.Range("$C$2:$C$16"), ActiveSheet.Range("$B$2:$B$16"), False, False, 95, ActiveSheet.Range("$J$1"), True, True, False, True, , True | |
VBA:00632R+VIX
分享小編每日收集的00632R跟VIX的資料:
'COPYRIGHT BY dropit.liu. | |
With CreateObject("MSXML2.XMLHTTP") | |
.Open "get", A, flase '開啟網頁 | |
.send | |
Do Until .readyState = 4 '確認網頁狀態 | |
DoEvents | |
Application.Wait DateAdd("s", 0.3, Now) '等待時間 | |
If temp_time = "" Then | |
temp_time = Now() | |
Else | |
TIME_BETWEEN = DateDiff("s", temp_time, Now()) '計算花費時間 | |
If temp > 1 Then | |
checklink = 0 | |
'MsgBox "check = 0" | |
Exit Function '包在FUNCTION 中時用EXIT FUNCTION 若是改包成在SUB中則改為EXIT SUB | |
End If | |
End If | |
Loop | |
M_DATA = .responseText '取得資料站存在M_DATA中 | |
M1 = .responseBody '測試用:回傳不同的結構 | |
lValue = .Status '測試用:收集狀態 | |
lValue_2 = .readyState '測試用:收集狀態 | |
If M_DATA = "" Then | |
GoTo LINE1 '沒回傳資料的處理 | |
End If | |
End With |
2020年11月10日 星期二
2020年11月7日 星期六
VBA:基本迴歸入門
迴歸基本概念:
2變數 X與Y之間的統計關係,為一非確定值得關係,當X的值確定後,Y的值並非唯一恆定值。而用以表示如此2變數X與Y間的數學模式稱為迴歸方程式或機遇模式。
迴歸分析既然是統計推論,自然有其必要基本假設要驗證,小編強調是針對樣本歐,迴歸分析有三個基本特性的檢定:常態性檢定、同質性檢定與隨機性檢定,這三個檢定有機會在聊聊。
回到主題,我們簡單整理一個例子。💪
簡單線性迴歸的長相:
透過最小平方法求兩個B0、B1的參數:
Private Sub CommandButton1_Click() | |
s1 = ActiveSheet.Range("A2000").End(xlUp).Row | |
B1 = Application.WorksheetFunction.LinEst(ActiveSheet.Range("c2:" & "c" & s1), ActiveSheet.Range("b2:" & "b" & s1)) | |
If B1(2) > 0 Then | |
MsgBox "y=" & Format(B1(1), "##.00") & "+" & Format(B1(2), "##.00") & "x" | |
Else | |
MsgBox "y=" & Format(B1(1), "##.00") & "-" & Format(B1(2), "##.00") & "x" | |
End If | |
End Sub |
流程:1.先載入資料轉換為一維陣列。2.開始計算B1、B0參數找出迴歸方程式。3.計算 SST SSR SSE ERROR Y預測值4.計算判定係數5.輸出結果
指數變化(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...