Страницы: 1
RSS
Не могу воспроизвести формулу indirect при создании UDF
 

Код
Function UOM(x As Double, y As Double) As Double
UOM = "=INDIRECT(x) * INDIRECT(y)"
End Function

на листе у меня прекрасно работает формула =indirect(x)*indirect(y)
хочу поменять ее на udf типа =UOM(x,y), но не могу понять, как...
буду благодарен за помощь
 
А почему у Вас X и Y as Double? Прочитайте в Справке что принимает функция INDIRECT (он же ДВССЫЛ())  в качестве аргументов
Согласие есть продукт при полном непротивлении сторон
 
В VBA аналога функции INDIRECT не существует в принципе
Согласие есть продукт при полном непротивлении сторон
 
а через worksheetfunction.indirect нельзя попробовать?
 
Попробуйте, кто мешает?
Повторю - нет такой функции. В ней просто нет необходимости.
Если Вы зададите вопрос по ЗАДАЧЕ, а не по СПОСОБУ, которым пытаетесь ее решить, да еще и с файлом-примером, то получите нужный Вам ответ гораздо быстрее
Согласие есть продукт при полном непротивлении сторон
 
Цитата
Sanja написал:
Если Вы зададите вопрос по ЗАДАЧЕ, а не по СПОСОБУ, которым пытаетесь ее решить, да еще и с файлом-примером, то получите нужный Вам ответ гораздо быстрее
Понял) приложил пример.

... я затупил что-то, там же имена как раз и есть. Спасибо)
Код
Function UDF(one, two)
one = Range(one)
two = Range(two)
UDF = one + two
End Function
Изменено: Евгений - 15.11.2017 11:31:34
 
Евгений, Вы думаете, если насильно впишите INDERECT в свой код, она (функция) появится в VBA?
Код
Function UDF(x As String, y As String) As Double
    UDF = Range(x) + Range(y)
End Function
Изменено: Sanja - 15.11.2017 01:41:44
Согласие есть продукт при полном непротивлении сторон
 
Цитата
Sanja написал:
Вы думаете, если насильно впишите INDERECT в свой код она (функция) появится в VBA
я не очень понимаю, как f2 работает в VBE, поэтому иногда я просто пробую писать, даже если автозаполнения нет.
вроде разобрался, все просто, но не первой непривычно.
спасибо большое.
 
Код
Function UDF(x As String, y As String) As Double    
UDF = Range(x) + Range(y)
End Function

Товарищи, здравствуйте)

В продолжение темы - как сделать функцию рабочей, если один из параметров отсутствует?
Например, сейчас это выглядит как =udf(x,y)

Как сделать, чтобы работали варианты =udf(x,), =udf(,y), и =udf(x) (в этом случае y считается равным 1)?
Я пробовал вот так, но не работает((

Код
if iserror(UDF) then
UDF = range(y)
else
UDF = default
end if
Изменено: Евгений - 07.12.2017 11:53:49
 
Цитата
Евгений написал:
как сделать функцию рабочей, если один из параметров отсутствует?
F1 - Optional
 
Добавление optional ничего не меняет почему-то(
Пробовал по разному - что-то не работает.
(у функции снизу type mismatch по y, пробовал по-разному: или ошибка в коде, или ошибка в вычислениях)
Код
Function UDF(x As String, Optional y As String) As Double
If y Is Nothing Then
UDF = Range(x)
Else
UDF = Range(x) + Range(y)
End If
End Function
 
F1 - IsMissing
Владимир
 
Цитата
sokol92 написал:
F1 - IsMissing
Посмотрел IsMissing, пример простой.
Однако у меня не получается (удаляю на листе х - выдает ошибку)

Код
Function UDF(Optional x As String, Optional y As String) As Double
If IsMissing(x) Then
UDF = Range(y)
Else
UDF = Range(x) + Range(y)
End If
End Function
Изменено: Евгений - 07.12.2017 23:31:18
 
Евгений, функция IsMissing применима только к переменным типа Variant. Для String опущенный параметр принимает значение пустой строки, если не указано иное в Optional x="что-то"
Код
Function UDF(Optional x As String, Optional y As String) As Double
  If Len(x) > 0 Then UDF = Evaluate(x)
  If Len(y) > 0 Then UDF = UDF + Evaluate(y)
End Function
Страницы: 1
Наверх