[算表] 自订函数必须来源资料重算才能执行

楼主: 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