[算表] Excel自訂函數無法立即更新

作者: home0303 (Blue night)   2019-05-07 11:15:51
軟體:EXCEL
版本:2010
自訂一個函數類似VLOOKUP 但可以回傳所有符合結果
Function MatchAll(儲存格, 查詢範圍, 向右位移)
For Each cell In 查詢範圍
If cell = 儲存格 Then MatchAll = MatchAll & "_" & cell.Offset(0, 向右位移
).Value
Next
If MatchAll = "" Then MatchAll = Application.Match(1, 2, 0): Exit Function
MatchAll = Mid(MatchAll, 2, Len(MatchAll))
End Function
舉例說明:
1 a
1 b
1 c
2 d
3 e
初步使用 =MatchAll(1,A1:A5,1)
是可以回傳 a_b_c 的確是我要的結果
把A4改成 1 也會變成 a_b_c_d
但如果我再把B1改成 f
函數並不會第一時間改成 f_b_c_d
我必須在函數儲存格重新執行才會回傳f_b_c_d
(連按F9也沒用)
是否因為我自訂的第3個引數是位移而非結果範圍
導致結果範圍資料改變函數卻不立即運算
而查詢範圍的改變會立即觸發運算
若是如此 請問該如何修正
作者: soyoso (我是耀宗)   2019-05-07 11:21:00
加上application.volatile
作者: home0303 (Blue night)   2019-05-07 11:42:00
謝謝S大 請問若不將Volatile調回False 會造成其他自訂函數也一律重新計算嗎
作者: soyoso (我是耀宗)   2019-05-07 12:15:00
這方面可以原文function另設個名稱來測試,測試上如果沒加上application.volatile或設為false的function,再修改a,b,c,d,e上是不會變更結果的。但如果function所設參照的引數值(a1:a5)改變時則都會重新計算。
作者: home0303 (Blue night)   2019-05-07 13:40:00
了解 謝謝S大

Links booklink

Contact Us: admin [ a t ] ucptt.com