[算表] 自訂函數必須來源資料重算才能執行

作者: home0303 (Blue night)   2020-11-17 00:57:31
軟體:EXCEL
版本:2010
自訂函數如下:
Function ShowOnly(範圍, 第幾個)
首欄 = 範圍.Column: 首列 = 範圍.Row
Set 第一格 = Cells(首列, 首欄)
For Each cell In 範圍
計數 = 計數 + 1
出場 = Application.CountIf(Range(第一格, 第一格.Offset(計數 - 1)), cell)
If 出場 = 1 Then 真的數 = 真的數 + 1
If 真的數 = 第幾個 Then ShowOnly = cell: Exit Function
Next
If ShowOnly = 0 Then ShowOnly = "Not Available": Exit Function
End Function
說明:
這是類似UNIQUE函數的自訂函數 目的是輸出不重複項目
舉例 在工作表1 A1:A10分別為 A、B、C、B、C、D、D、E、F、G
則 B1 = ShowOnly($A$1:$A$10, ROW(A1)) = A
B1 以下複製 B2:B7 則為 B C D E F G
現在發現的問題是在同一工作表中執行沒問題 但如果自訂函數寫在別的工作表
例如工作表2 B1 = ShowOnly(工作表1!$A$1:$A$10,ROW(A1))
都會先出現 Not Available 直到回到工作表1重新輸入後
才會正確執行
請問原因為何
我試著在開頭加上 Application.Volatile 結果仍然一樣
請賜教 謝謝
作者: soyoso (我是耀宗)   2020-11-17 07:13:00
Cells(首列, 首欄) 改 範圍.Cells(1,1)https://i.imgur.com/CDJw1uR.gif
作者: home0303 (Blue night)   2020-11-17 19:34:00
謝S大 但我好奇為什麼原寫法需要在工作表1重新輸入才會正確地執行
作者: soyoso (我是耀宗)   2020-11-18 00:16:00
測試,a1:a10編輯或修改資料後會觸發自訂函數重新運算,這時作用工作表是工作表1,變數第一格會是工作表1的儲存格;如果於工作表2,作用工作表是工作表2,變數第一格會是工作表2的儲存格。因此需明確指定以工作表1(變數"範圍")的儲存格
作者: home0303 (Blue night)   2020-11-18 15:45:00
懂了 謝謝S大解說

Links booklink

Contact Us: admin [ a t ] ucptt.com