how to pass cell address like A1 without double quota into macro function. for example
A1 in formula =UDF(A1) directly passed instead dereferenced as Text String
I think it is not possible to use that notation without quotes.
You can use numerical position notation instead:
("A1") = (0,0)
Hallo
function double_udf( source as variant )
double_udf = source * 2
end function

(This is about a solution using Basic with Option VBAsupport 1.)
If you create a module with Option VBAsupport 1 you can pass an argument which can be interpreted by the UDF as a reference - if it is one only, of course. (You can also access dereferenced data).
Interested in the reference you should test the parameter, say p1, with If IsObject(p1) Then ....
You may also work with an "ErrorExit" as my example does using the target label fail:.
See example:
disask111343_passReferenceToCalcUDF.ods (14.5 KB)
In addition to @Lupp’ s answer, a function for independent research with an arbitrary number of arguments:
Option Explicit
Option VbaSupport 1
' Returns number of arguments and argument types.
' For cell ranges, also returns the range address.
Function ArgType(ParamArray args)
Dim res As String, txt as String, i As Long
If Ubound(args)<Lbound(args) Then
ArgType="No arguments"
Exit Function
End If
res="Number of arguments: " & (Ubound(args) + 1)
For i=Lbound(args) To Ubound(args)
txt=TypeName(args(i))
If txt="Range" Then
txt=txt & " " & args(i).CellRange.AbsoluteName
End If
res=res & Chr(10) & i & ": " & txt
Next i
ArgType=res
End Function
Example:
=ARGTYPE(A1; 2)
shows
Number of arguments: 2
0: Range $Sheet1.$A$1
1: Double