Страницы: 1
RSS
Вычисление формулы в текстовом виде
 
Здрасьте, еще такой вопрос. Как можно вычислить формулу, записанную в текстовом виде в ячейке? Например там записано: "exp(x)*sin(x^2)". Если просто написать "=exp(x)*sin(x^2)", а "x" сделать именованным диапазоном -  она вычислится, проблема в том что нужно изменить саму формулу. Есть файл примера где это реализовано, но повторить самому хоть убей не получается :)
 
Что, совсем никто не может помочь????  
Магистры! Разберитесь с этим вредным файлом))
 
У меня времени разбираться нет... но сделано в примере очень интересно... Это нужно запомнить...  
 
Что я понял с ходу... может это поможет:  
 
- чтобы ряд х данных для диаграммы создается массивом, которому присваивается имя х, которое и используется при задании исходных данных графика  
- массив х создается с помощью функции СТРОКА (повтор символов указанное количество раз) - это очень прикольный прием, о котором я и не знал и не узнал бы наверно без этого примера. А именно создается строка пустых строк (о как!!!) заданной длины количеством нужных точек в графике. Эта строка умножается на численные значения каждого последующего шага графика и получается массив чисел с заданным шагом от начальной точки до конечной. Как именно это получается, я не знаю, но получается на подобие работы формул-массивов.  
- массив у создается приблизительно так же... только уже на основании массива х, к каждому значению которого применяется указанная формула...  
- указанная формула при этом вычисляется с помощью функции ВЫЧИСЛИТЬ (что то же самое, что и EVALUATE на VBA) - которая, судя по всему - недокументирована для русскоязычных Excel... и которую даже нельзя использовать в ячейке листа (но, получается, что можно использовать в строке настройки имени).  
 
Как эти знания можно применить я пока не знаю... но может быть пригодится.  
 
А пример действительно очень приятный и впечатляющий!!!
 
{quote}{login=genyaa}{date=24.10.2007 05:24}{thema=}{post}- массив х создается с помощью функции СТРОКА (повтор символов указанное количество раз) - это очень прикольный прием, о котором я и не знал и не узнал бы наверно без этого примера. А именно создается строка пустых строк (о как!!!) заданной длины количеством нужных точек в графике. Эта строка умножается на численные значения каждого последующего шага графика и получается массив чисел с заданным шагом от начальной точки до конечной. Как именно это получается, я не знаю, но получается на подобие работы формул-массивов.  
{/post}{/quote}  
Это я поторопился написать... это не правильное понимание... здесь еще нужно разобраться.
 
- массив х создается с помощью функции СМЕЩ, третий параметр которого как раз и задает количество строк в возвращемом этой фунцией результате. Фактически, результат - это массив ячеек заданного размера. Дальше все, как и было сказано, на подобие фомулы-массива, для каждого элемента этого массива с помощью функции СТРОКА возращается номер строки, т.е. получается массив от 1 до количества строк в массиве, и каждый этот номер умножается на вычисляемый шаг. Получается массив значений с равным шагом от начального до конечного значения.
 
Теперь по сути заданного вопроса...  
 
- создаем имена ячейкам для переменных предполагаемой формулы, например, А1 будет x, А2 будет y  
- пишем в ячейке строку, представляющую из себя выражение формулы, например: в A3 пишем "(х+4)*y^2  
- создаем еще одно имя, например, z через меню-Вставка-Имя-Присвоить, для которого в поле его формулы пишем следующее выражение:  
 
=ВЫЧИСЛИТЬ($А$3)  
 
- и последнее, в ячейке, где нужно получить результат формулы, заданной в виде строки, ссылаемся на это созданное имя. В нашем примере это будет выглядеть так, например, в ячейке А4:    
 
=z    
 
Вот и все.
 
:) Блин точно, понял, функция "вычислить" работает только будучи используемой в именах. Но в принципе можно создать и пользовательскую функцию в вба. Вот это мне и надо было, спасибо большое).    
Честно говоря, наверно и сам мог бы допереть, но иногда мозги уже отказывают и в очевидные вещи не врубаются).    
С самим то примером разобрался, только с этой функцией вопросы остались.    
 
Если интересно - выкладываю другие примеры из этой серии, но там уже попроще.
Страницы: 1
Читают тему
Наверх