Try Application.Caller. For example:
Function kval(strTest As String, Optional lngCol As Long = 0) As Long
With Application
.Volatile True
If lngCol = 0 And TypeName(.Caller) = "Range" Then
lngCol = .Caller.Column
End If
End With
kval = lngCol
End Function
Perhaps you've simplified your explanation for our benefit, but have you
considered using built in lookup functions?
Since you are using match within your UDF, I would think you should be able
to make it work w/INDEX. For example:
=INDEX(DataCol, MATCH("XXXXX", KeyCol, 0))
"Tony Rollins" wrote:
I currently have a VB function that takes a string argument and a column
number argument. It scans a key column for the string (using the MATCH
worksheet function) and returns the the value at column number in the matched
row:
=kval("XXXXX", COLUMN(E1))
for example, to get the cell value from column E of the row that contains
"XXXXX" in the key column.
Frequently, I use the function to return a value from the same column that
the function reference is in:
=kval("XXXXX", COLUMN())
I would like to be able to compute the value that COLUMN() (or ROW()) would
supply within the function itself. How can I do this?