我对编写 excel 自定义函数很陌生,我遇到了一个奇怪的行为,在搜索网络时似乎无法找到解释(尽管信息量当然很大)。请多多包涵。
这是一个演示,它至少显示了一些问题:
Function mycustomfn_demo(rng As Range)
Dim rngrows, rngcols, curcol, currow, i, j,firstcol As Integer
Dim exitflag As Boolean
firstcol = -1
rngrows = rng.Rows.Count
rngcols = rng.Columns.Count
exitflag = False
For i = 1 To rngcols
For j = 1 To rngrows
curcol = rng.Column + i - 1
currow = rng.Row + j - 1
If Cells(currow, curcol).Value <> "" Then
firstcol = i
exitflag = True
Exit For
End If
Next j
If exitflag = True Then
Exit For
End If
Next i
mycustomfn_demo = firstcol
End Function
此函数查找具有非空白单元格的区域中的第一列(区域中没有非空白单元格的结果为 -1)并且只要该区域与包含该函数rng
的公式位于同一工作表上,它就可以正常工作。mycustomfn_demo
这是包含公式和范围的表 1:
但是,如果它们在不同的工作表上,就会发生奇怪的事情这显示工作表 2(范围仍在工作表 1 中):
在这种情况下(但不是在其他情况下)引用表 1 中的公式单元格会给出正确的结果(同样,表 2):
这是预期的行为,还是错误的结果?我在 OSX High Sierra 10.13.5 下使用 Office 2016 for Mac,Excel 版本为 15.23。
我应该补充一点,在更复杂的情况下,引用另一个工作表中的自定义公式结果会删除公式单元格本身的结果。然后可以通过删除该单元格然后选择撤消来恢复它。