繼續上篇的Excel VBA (一) : 自訂函數之自動加總來修改程式
加總時如果要將非數字的全部濾掉, 我利用 TypeName 這個函數來完成, 再將Excel的C欄資料除了文字型別以外, 加上日期以及布林型別, 測試結果如下
Function 我的加總(加總區域 As Range) As Double Dim data As Variant 我的加總 = 0 For Each data In 加總區域 If TypeName(data.Value) = "Double" Then 我的加總 = 我的加總 + data End If Next End Function
如果我現在很懶, 懶得選擇加總區域, 讓它自動將它上方的資料自動加總起來, 例如在A10中輸入自訂函數, 則會自動將A1到A9的儲存格都加總起來, 我的懶人程式如下 :
加總則是從同欄的第一列開始加, 一直加到輸入的前一列, 也就是 Application.Caller.Row - 1
offset(-1,0) : 則表示要位移的位置, -1 表示垂直往上一格, 0 表示水平維持不變
Function 我的加總2() As Double Dim 目前儲存格 As Range Dim 目前列 As Integer Dim i As Integer Set 目前儲存格 = Application.Caller 目前列 = 目前儲存格.Row 我的加總2 = 0 For i = 1 To 目前列 - 1 Set 目前儲存格 = 目前儲存格.Offset(-1, 0) If TypeName(目前儲存格.Value) = "Double" Then 我的加總2 = 我的加總2 + 目前儲存格 End If Next End FunctionApplication.Caller : 會取得函數計算的儲存格, 它的行跟列可以透過Column跟Row來取得 (參考文章)
加總則是從同欄的第一列開始加, 一直加到輸入的前一列, 也就是 Application.Caller.Row - 1
offset(-1,0) : 則表示要位移的位置, -1 表示垂直往上一格, 0 表示水平維持不變
我在A10輸入自訂函數, 如果我只要從A9往上一直加總, 一直加總直到碰到非數字的就停止, 不再繼續往上加總, 程式碼只要加上 Exit For 強制讓它不繼續往上加總即可 !
Function 我的加總3() As Double Dim 目前儲存格 As Range Dim 目前列 As Integer Dim i As Integer Set 目前儲存格 = Application.Caller 目前列 = 目前儲存格.Row 我的加總3 = 0 For i = 1 To 目前列 - 1 Set 目前儲存格 = 目前儲存格.Offset(-1, 0) If TypeName(目前儲存格.Value) = "Double" Then 我的加總3 = 我的加總3 + 目前儲存格 Else Exit For End If Next End Function因為A9 + A8 = 9, 而A7是文字不是數字, 所以停止繼續往上加總, 所以總和是9
測試時間: 2020年07月29日
測試環境: Windows 10 家用版, Excel 2019 家用版
測試環境: Windows 10 家用版, Excel 2019 家用版
留言
張貼留言