На самом деле, вы должны иметь возможность вернуть диапазон из UDF, как описано в этом MSDN-потоке .
Вот код, указанный MVP:
Function GetMeRange(rStartCell As Range, lRows As Long, iColumns As Integer) As Range
Set GetMe = rStartCell.Resize(lRows, iColumns) ' note the use of Set here since we are setting an object variable
End Function
(и это работает)
Комментарий Тиаго указывает на очень правильную вещь: поскольку вы хотите получить доступ к именованному диапазону, он должен быть определен первым.
Вы можете попытаться установить точку останова в вашемUDF и посмотрите, определен ли Range(NmdRng)
.