如何识别函数所在的单元格?

在我的表的D列中,我有一个自定义的函数,其variables在列A和B:

=MyFunction([ColumnA],[ColumnB]) 

我现在意识到该函数还需要捕获列C中的string。我可以将它添加为另一个variables:

 =MyFunction([ColumnA],[ColumnB],[ColumnC]) 

…但我希望我可以这样做,而不添加variables。

如果函数可以识别它所在的单元格,那就太棒了,就像ActiveCell一样:

 Public Function(VarA, VarB) ColumnCtext = ThisCell.Offset(0,-1).value End Function 

…对于D列中的每一行,“ThisCell”返回 – 这是所讨论的单元格。

那可能吗?

Application.Caller可以用来标识调用函数的单元格。

一些警告:

  1. 如果您尝试使用Application.Caller.Value您将得到一个循环引用。 使用Caller者获取另一个单元格的值,例如Application.Caller.Offset(0, -1).Value将会正常。

  2. 由于您不打算将函数中正在使用的单元格作为parameter passing,因此对该单元格的任何更改都不会导致重新计算您的函数,除非将函数标记为“ Volatile 。 (这样做意味着你的函数在任何时候任何单元格被改变时都会被调用。)