- 帖子
- 1447
- 主題
- 40
- 精華
- 0
- 積分
- 1471
- 點名
- 0
- 作業系統
- Windows 7
- 軟體版本
- Excel 2010 & 2016
- 閱讀權限
- 50
- 性別
- 男
- 來自
- 台灣
- 註冊時間
- 2020-7-15
- 最後登錄
- 2025-3-24
|
8#
發表於 2022-12-14 07:59
| 只看該作者
本帖最後由 Andy2483 於 2022-12-14 08:07 編輯
回復 7# ranceymm
謝謝前輩回復
今天再檢視&複習了此帖,發現很多的多餘與不足,後學也再學習中,先求有,再求好,心得註解供參考
Option Explicit
Function 最大值(前字元 As String, 後字元 As String, 儲存格 As Range) As Double
'↑最大值()是自己定義的函數名字,裡面的:
'前字元 As String :前字元宣告是字串變數,是使用此函數需輸入的值 "長"
'後字元 As String :後字元也宣告是字串變數,是使用此函數需輸入的值 "、"
'儲存格 As Range :儲存格宣告是儲存格變數,而且是使用此函數需輸入(或用選的)的儲存格位址
'As Double是宣告這最大值結果是雙精度小數
'如果要一句話敘述:給這函數兩個字串,一個單格的儲存格位址,後面的程序回傳 雙精度值,
'至於回傳的是不是最大值?? 就要看成是有沒有抓到最大值
'重要的是前輩對資料的邏輯規則是否正確! 資料錯誤就算不出來!有好的開始,成功就不遠了
Dim Y, V, A$, j&, P#
'↑宣告變數:(Y,V)是通用型變數,(A)是字串變數,(j)是長整數變數,(P)是雙精度小數
Application.Volatile
'↑將使用者定義的函數標示為易變。
'https://learn.microsoft.com/zh-tw/office/vba/api/excel.application.volatile
Set Y = CreateObject("Scripting.Dictionary")
'↑令Y是字典
'https://learn.microsoft.com/zh-tw/office/vba/language/reference/user-interface-help/dictionary-object
A = Replace(Replace(Replace(儲存格, " " & 前字元, ","), 後字元, ","), " ", ",")
'↑令A這字串變數是 函數使用時輸入 D3 儲存格裡的值,經過三次置換字元 (" 長":",")("、":",")(" ":",")
'https://learn.microsoft.com/zh-tw/office/vba/language/reference/user-interface-help/replace-function
V = Split(A, ",")
'↑令V這通用型變數裝入 A字串被Split()分割成的數個字串,V就變成是一維陣列
'https://learn.microsoft.com/zh-tw/office/vba/language/reference/user-interface-help/split-function
For j = 3 To UBound(V) Step 4
'↑設順迴圈!j從3到V陣列的最後一個索引號碼,j迴圈每繞回來一次就加3,7,11,.....
'https://learn.microsoft.com/zh-tw/office/vba/language/reference/user-interface-help/fornext-statement
If IsNumeric(V(j)) And V(j) <> "" Then
'↑如果索引值j位置的V陣列值經過IsNumeric()函數判斷是數字,而且不是空字元 ??
'https://learn.microsoft.com/zh-tw/office/vba/language/reference/user-interface-help/isnumeric-function
P = V(j): Y(P) = ""
'↑當IF條件成立!就令P這雙精度變數裝入 索引值j位置的V陣列值
'然後將這P變數當key,item是空字元,倒入Y字典裡
End If
Next
最大值 = Application.Max(Y.keys())
'↑令 最大值 這雙精度變數用 Max() 取得Y字典裡KEYS的最大值,顯示在儲存格裡
'https://learn.microsoft.com/zh-tw/office/vba/api/excel.worksheetfunction.max
End Function |
|