2016-12-06 48 views
1

在我的表中的列d我有一個自定義函數,它的變量在列A和B:如何識別函數所在的單元格?

=MyFunction([ColumnA],[ColumnB]) 

我現在的功能還需要捕捉的C列中的字符串知道我可以添加它作爲另一個變量:

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

...但我希望我可以這樣做,而不添加變量。

這將是巨大的,如果該功能可以識別它在細胞內,有點像ActiveCell:

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

...其中,在列d各行「的ThisCell」返回 - 好,有問題的單元格。

這可能嗎?

+3

'Application.Caller',但如果你使用它的'.Value'屬性就會產生一個循環引用。 (儘管使用'Application.Caller.Offset(0,-1).Value'應該是安全的。) – YowE3K

+0

另一個警告,除非你使用函數'Volatile',否則對列C中的值的改變將不會強制重新計算D列中的函數 - 這就是爲什麼將範圍添加到參數(甚至可能傳遞單個範圍參數爲「A2:C2」)更好得多的原因。 – YowE3K

回答

2

Application.Caller可用於識別調用函數的單元。

一些警告:

  1. 如果您嘗試使用Application.Caller.Value你會得到一個循環引用。使用Caller獲得另一個單元格的值,例如Application.Caller.Offset(0, -1).Value會好的。

  2. 因爲你不打算傳遞函數被用作一個參數,其值的小區,該小區的任何更改將不事業你的函數的重新計算除非您將您的函數作爲Volatile 。 (而且這樣做意味着你的函數會被任何時間任何細胞改變。)

相關問題