Excel cell from which a Function is called

ExcelVbaCell

Excel Problem Overview


How can I get the cell where my VBA Function is called from?

In other words, what is the VBA equivalent for INDIRECT(ROW(), COLUMN()) ?

I'm not looking for ActiveCell.

What I want to do is have a simple function ThisRow_Col(rColumn As String) return the column X of the row it's called from. Say in B2 I call =ThisRow_Col("A"), it should return the value of A2. This should work regardless of which cell active.

EDIT: Thanks Charles for the answer: Application.Caller. The following code gets the column X of the current row, independent of where the selection is:

Function ThisRow_Col(rColumn As Range)
    ' Return INDIRECT(rcolumn & ROW())

    ThisRow_Col = Application.Caller.Worksheet.Cells(Application.Caller.Row, rColumn.Column).Value

End Function

Note that passing the column as a Range (ThisRow_Col(A1)) is better than passing it as a string, because Excel can automatically update the formulas if you move or insert columns. Of course the 1 row of A1 is just a convention.

Excel Solutions


Solution 1 - Excel

Application.Caller returns the range object that the UDF is called from.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionDan DascalescuView Question on Stackoverflow
Solution 1 - ExcelCharles WilliamsView Answer on Stackoverflow