Страницы: 1
RSS
Выполнить текст в ячейке как функцию
 
Не нашел поиском решил создать тему.  
 
Пример:  
 
В ячейку B5 записан текст: "СУММ(А1:А2)"  
Существует ли функция, которая при вызове с аргументом B5, вернет нам либо сумму ячеек A1 и A2, либо ошибку, если текст в ячейке B5 не распознался как функция.  
 
Пример в приатаченном файле.  
 
Я примерно представляю, что это можно сделать средствами VBA. Интересует можно ли обойтись без VBA или воспользоваться уже написанными функциями.
 
Встроенными функциями нельзя.  
Можно макрофункциями.  
Смотреть Ctrl+F3, имя "формула".  
Макросы должны быть разрешены.
 
Спасибо большое. Извиняюсь за задержку с ответом.  
 
А определенные пользователем функции нельзя использовать в макрофункциях? Это как-то очень печально.    
 
В своем примере я попытался воспользоваться функцией "Сцепитьесли", но мне Excel выдает ошибку. Где я не прав?
 
Хм, успел разлогиниться пока писал пост. В общем пост выше был от меня.
 
формула2 должна быть например такой:  
=СЦЕПИТЬЕСЛИ(Лист1!$I$14:$I$16;Лист1!$I$3;Лист1!K3:K5)
 
2 Hugo  
 
Не понял почему она должна быть такой. Функция СцепитьЕсли возвращает текст, если что. В любом случае даже в таком варианте она не работает.  
 
2 all  
 
Через костыль (функциюю ВПР()) сделал файл рабочим. Т.е. проблема того что функции, определенные пользователем почему-то не работают осталось и хотелось бы с ней разобраться все равно.  
 
Суть проблемы в следующем: мне нужно как-то вставлять в качестве аргументов значения определенных ячеек внутрь сложной макрофункции, например такой: =ВЫЧИСЛИТЬ(CУММЕСЛИ(диапазон1;CCЫЛКА_НА_ЯЧЕЙКУ;диапазон2))  
 
Сейчас как видно из примера я это решил плохим методом - я собираю формулу из двух кусков текста и вставляю между ними аргумент. Это плохо в плане масштабируемости, возможно в будущем мне понадобиться вставлять 3-5-10 ссылок в формулу. Я уверен, что есть какой-то более оптимальный способ (например, вставлять на место ссылок какие-то заменители, которые потом парсятся).  
 
Файл во вложении
 
Не знаю, может быть я не понял, что именно нужно получить, но в том варианте формула2 у меня работает, и выдаёт 3.
 
Можете приложить файл, в котором это работает?  
Заранее благодарю.
 
Вот.
 
По поводу функции СцепитьЕсли() разобрался. Это просто мои кривые руки. Плюс в макрофункции иногда ссылки ячейки изменяются на непонятно что. Пока не разобрался из-за чего.  
 
Но в целом с функцией СцепитьЕсли() все ясно.    
 
Остался вопрос по поводу вставки ссылки на ячейку(и) внутри сложной формулы
 
Dem, пока не понял чего Вы хотите добиться, но используемая функция ПОЛУЧИТЬ.ЯЧЕЙКУ(1;...) Возвращает ссылку в текстовом виде. Ее еще нужно преобразовать в действующую ссылку, например макрофункцией ТЕКСТССЫЛ(ПОЛУЧИТЬ.ЯЧЕЙКУ(1...); ИСТИНА).
 
2 kim  
 
Хм, т.е. если я попытаюсь вернуть значение из числовой ячейки через эту функцию, то будет ошибка? Хорошо, спасибо за подсказку  
 
В идеале хотелось бы получить что-то вроде метода класса string из C#:  
 
string.Format("Hello, {0} !", userName);  
string.Format("Hello, {0} {1} !", userName, userSurname);  
string.Format("Hello, {2} {0} {1} ! Вы готовы купить немного {3}", userName, userSurname, userSex, userBuy);
Страницы: 1
Читают тему
Наверх