作者home0303 (Blue night)
看板Office
標題[算表] 自訂函數必須來源資料重算才能執行
時間Tue Nov 17 00:57:31 2020
軟體: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 結果仍然一樣
請賜教 謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 223.137.155.251 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Office/M.1605545853.A.78E.html
→ soyoso: Cells(首列, 首欄) 改 範圍.Cells(1,1) 11/17 07:13
→ home0303: 謝S大 但我好奇為什麼原寫法需要在工作表1重新輸入 11/17 19:34
→ home0303: 才會正確地執行 11/17 19:34
→ soyoso: 測試,a1:a10編輯或修改資料後會觸發自訂函數重新運算,這 11/18 00:16
→ soyoso: 時作用工作表是工作表1,變數第一格會是工作表1的儲存格; 11/18 00:16
→ soyoso: 如果於工作表2,作用工作表是工作表2,變數第一格會是工作 11/18 00:16
→ soyoso: 表2的儲存格。因此需明確指定以工作表1(變數"範圍")的儲存 11/18 00:16
→ soyoso: 格 11/18 00:17
→ home0303: 懂了 謝謝S大解說 11/18 15:45