|
Использование функции GoalSeek из пользовательской UDF-функции
|
|||
---|---|---|---|
#18+
Доброго времени суток форумчане. Столкнулся со следующей проблемой. Не могу воспользоваться функцией GoalSeek посредством пользовательской функции вводимой пользователем прямо в ячейку Excel. Работает только через GS() вызываемой через Alt+F8. Посредством ввода в ячейку =iGoalSeek(B5;B2;B3) или =sGoalSeek(5; 2; 2; 2; 3; 2) ничего не получается. Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49.
Заранее спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2015, 09:48 |
|
Использование функции GoalSeek из пользовательской UDF-функции
|
|||
---|---|---|---|
#18+
MAGRAV, функции листа "не имеют права" менять что-либо на листе, хотя есть исключение. Почитайте http://www.excel-vba.ru/chto-umeet-excel/kak-funkciej-polzovatelya-izmenit-znachenie-drugoj-yachejki/ Однако, работу функции можно эмулировать с помощью обработки события листа Worksheet_Change, в этом случае ограничений нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2015, 10:09 |
|
Использование функции GoalSeek из пользовательской UDF-функции
|
|||
---|---|---|---|
#18+
Казанский, Спасибо конечно, но на версиях Excel старше 2003 не фурычит. Зато нашол вот такой код: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
ТОГДА ТАКОЙ ВОПРОС: КАК ИМИТИРОВАТЬ iRange и iChangingCell В СЛЕДУЮЩЕЙ ЗАПИСИ Код: vbnet 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2015, 15:44 |
|
Использование функции GoalSeek из пользовательской UDF-функции
|
|||
---|---|---|---|
#18+
Я расскажу сам принцип в первом приближении. Допустим, в ячейке Я введена функция =Ф(Д1;Д2), где Д1 и Д2 - аргументы-диапазоны. Как работает функция. Если происходит изменение значений ячеек в диапазонах Д1 или Д2, Excel вызывает пересчет функции Ф и помещает результат в Я. Если мы хотим проделать то же самое макросом, пишем обработчик события листа (правый клик по ярлычку листа - Исходный текст) Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2015, 20:01 |
|
Использование функции GoalSeek из пользовательской UDF-функции
|
|||
---|---|---|---|
#18+
Казанский, спасибо буду пробовать такой вариант. Однако на ум пришла одна комбинация, но для её реализации нужна пользовательская ФУНКЦИЯ способная УБИТЬ САМУ СЕБЯ. Подскажите пути решения? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.04.2015, 08:16 |
|
Использование функции GoalSeek из пользовательской UDF-функции
|
|||
---|---|---|---|
#18+
Не надо никого убивать! Приложите файл и поясните, для какой ячейки (ячеек) должен работать GoalSeek и какие ячейки менять. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.04.2015, 18:31 |
|
Использование функции GoalSeek из пользовательской UDF-функции
|
|||
---|---|---|---|
#18+
Казанский, Вообще говоря, цель всех этих извращений в том чтобы измудриться использовать GoalSeek из пользовательской функции. А код функции находился только в одном модуле, который можно было бы подключать к любому документу. К примеру синтаксис на листе будет таким: "=iGoalSeek(A1;A2;A3)". Вся соль в том, что никак не удаётся сделать так чтобы можно было задавать из текста функции эти (A1;A2;A3). слабо верится,но хотел опробовать такой сценари: -iGoalSeek запоминает свой собственный текст синтаксиса "=iGoalSeek(A1;A2;A3)" из текущей ячейки (B5); -запоминает переменную из "А2"; -в "А2" помещаем ссылку на: "=B5"; -в "B5" число из "А2"; -после пробуем использовать встроенную функцию Excel "....GoalSeek Goal:=..., ChangingCell:=...",но ссылающуюся в параметре ChangingCell:=на "B5" вместо первоначаьного "А2". если чудо произойдёт и и встроенный GoalSeek сработает, то возвращаем все на свои места (в том числе и новую переменую) и радумся 8) 8) 8) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2015, 08:18 |
|
Использование функции GoalSeek из пользовательской UDF-функции
|
|||
---|---|---|---|
#18+
Как можно это реализовать. Будет надстройка, которая подключается к обработке событий приложения _SheetChange и _SheetCalculate. В ней будет создаваться база данных (коллекции и/или массивы) диапазонов, к которым должен применяться подбор параметра, целевых значений и изменяемых ячеек. При возникновении события пересчитывается либо все, либо выборочно. А функция iGoalSeek помещает свои аргументы в эту базу данных. Надо придумать, что делать при удалении функции iGoalSeek или при ручном изменении ее параметров. Наверно, проще будет не хранить эту базу данных, а каждый раз при пересчете искать ячейки с формулой "=iGoalSeek(...)" по всем листам всех открытых книг и проводить подбор параметра. Но это может заметно тормозить работу с приложением. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2015, 00:04 |
|
Использование функции GoalSeek из пользовательской UDF-функции
|
|||
---|---|---|---|
#18+
Вероятно, вот это сможет помочь VBA: Excel обход ограничений UDF ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2015, 15:40 |
|
|
start [/forum/topic.php?fid=60&msg=38929720&tid=2155978]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
44ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
41ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 142ms |
0 / 0 |