Создание пользовательсткой функции, если ячейки в формате R1C1, Смотрел материал по созданию пользовательской функции... попробовал, не получается... думаю причина в том, что формат R1C1
Друзья, сделайте, пожалуйста, подсказу. Прочитал материал (правда уже потерял ссылку), что можно создать собственную функцию WhaTIF, что мне и нужно, собственно. История такая... Ты вводишь ячейку, которую отслеживаешь, ячейку, которая изменяется и новое значение для изменяемой ячейки. Например: A1=1 A2=2 A3=A1+A2 A4=WHATIF(A3;A1;A5) A5=4
Хотя, конечно, в любом случае подход неверный. Легко убедиться, если ввести в A3 формулу: =A10+A2 По хорошему надо парсить формулу, вытаскивая каждую ссылку в полном виде и уже потом заменяя её. Как пример подобного изврата можно посмотреть код из этой статьи: Отобразить в формулах вместо ссылок на ячейки значения ячеек
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Сделал небольшой файлик с применением всех вариантов написанного кода, включая последний.... The_Prist , Ваша первая версия не работает. А вот последняя также работает отлично.
Проблемы с вводом через формулу одну переменную я так и не заметил. Может неправильно понял проблему.
А вот с моим проблемный файлом почему-то не применяется. Также интересно, будет ли это работать, если первоначальные расчёты выполнены на одном листе, а пересчёт по новому значению переменной - на другом листе. (пока писал, сразу и попробовал). НЕТ! Товарищи! Не работает оно, если расчёт ведётся на другом листе! А как сделать так, чтобы и на другом листе всё воспринималось нормально? Спасибо
Kirill Gureev написал: Проблемы с вводом через формулу одну переменную я так и не заметил.
Цитата
The_Prist написал: если ввести в A3 формулу: =A10+A2
при этом формула должна выглядеть так: =WHATIF(A3;A1;A5)
Т.е. А10 будет заменена не полностью, а только часть А1. Т.е. получится не 4, а 40.
Возможно, проблема будет нагляднее при таких исходных данных. =WHATIF(A3;A2;A5) а в А3: =WHATIF(A3;A2;A5) по факту А2 будет заменена на 4, а А20 на 40. Что неверно. В данном случае логично предположить, что должна замениться исключительно А2, а А20 должна остаться без изменений. Но, возможно, я неверно трактую Ваши требования к функции WHATIF.
Что до неработы функции со ссылками на другие листы Вы указываете функцию как: =WHATIF(D3;D2;D6) Что смущает: 1. В третьей строке вообще нет формулы. Она в 5-ой. 2. Вы в формуле в строке 5 указываете ссылки на столбец Е, а к замене указываете D. Что ожидаете от такой замены? 3. Как я уже выше упоминал - самое правильно это парсить и вытаскивать все ссылки. Тогда есть шанс сделать функцию рабочей с любыми ссылками.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
С другими листами можно чуть проще сделать, если правильно понял. Хотя тоже есть нюансы, в свое время пробовал такой вариант. С формулами, содержащими вложенные стандартные функции работать будет через раз. Сделал в Вашем же файле, в столбце со своей формулой.
The_Prist так действительно работает. Однако, то для чего я это искал так и не пашет. Мой проект Может у Вас будет идея, по какой причине. Формулы там конечно страшные... Как вообще это можно реализовать?
The_Prist написал: Это в другой форум - здесь по Гугл Таблицам народ не очень.
Нет-нет.... это просто большой файл, который не влазит просто как вложение. По этой причине я его выложил на свой google-диск Но это стандартный файл с макросом Excel. Просто, скачайте, пожалуйста, посмотрите. Я вставил Вашу функцию на лист "Модель" и лист "Чувствительность". Не работает. Посмотрите, пожалуйста.
Kirill Gureev написал: Я вставил Вашу функцию на лист "Модель" и лист "Чувствительность". Не работает.
Цитата
The_Prist написал: Хотя тоже есть нюансы, в свое время пробовал такой вариант. С формулами, содержащими вложенные стандартные функции работать будет через раз
Больше сказать нечего. ConvertFormula в этом случае часто выдает ошибки, отказываясь нормально преобразовывать ссылки, участвующие в функциях листа. А Evaluate может отказать работать с очень длинными формулами.