Имя: Пароль:
IT
 
Как в Excel вычислить значение формулы в ячейке, не меняя формулу.
0 Гений 1С
 
гуру
06.02.09
21:12
Конкретно, в Excel в ячейке А1 есть такая формула:
=CHOOSE(1,1234.14,"Подразделение",C1)
Мне нужно вычислить, чему равно в этой же ячейке значение формулы:
=CHOOSE(2,1234.14,"Подразделение",C1)

Я делаю так - запоминаю формулу из Formula, меняю ее на нужную, считываю Value потом откатываю обратно.

Но если не дай бог чего прервется, лист будет испорчен. Можно ли не деструктивно вычислять значение в ячейке?
1 asady
 
06.02.09
21:50
(0)
trigVariable = Evaluate("SIN(45)")
2 Гений 1С
 
гуру
06.02.09
21:52
(1) Асади, в контексте какой ячейки будет вычисляться выражение, тут не синус надо вычислить, в формуле есть C1!!!
3 Гений 1С
 
гуру
06.02.09
21:52
Вот это через Evaluate не вычислишь:
=CHOOSE(4,1234.14,"Подразделение",C1)
4 Torquader
 
06.02.09
22:20
Просто надо сначала ссылки привести в листонезависимому виду, а потом вычислять.
5 Torquader
 
06.02.09
22:26
Evaluate("=CHOOSE(2,2,Лист1!B2)")
Так работает!
6 vde69
 
06.02.09
23:09
есть для листа метод "calculate()"
7 Гений 1С
 
гуру
06.02.09
23:39
(4)(5) какой ты умный. Может мне транслятор написать, который будет приводить формулы? Кто его знает, что за ссылку там юзверь укажет...
8 Гений 1С
 
гуру
06.02.09
23:40
(6) И как мне это поможет решить мою проблему...
Мда, похоже это единственный способ, который я юзаю - деструктивный...
9 Гений 1С
 
гуру
06.02.09
23:41
Сформулирую задачу еще раз.
В ячейках листа есть формулы вида =CHOOSE(А, Б, В, Г, Д, ...).
Мне нужно для каждой ячейки, в которой есть такая формула, получить значения А, Б, В, Г, Д, ...
Нужно учесть, что вместо А, Б, В, Г, Д может стоять формула со ссылкой на другую ячейку!!!
10 Господин ПЖ
 
06.02.09
23:45
да нас.ать собственно... сиди да делай. нефиг тут истерики устраивать...
11 Гений 1С
 
гуру
06.02.09
23:52
(10) 0 бит информации
12 vde69
 
06.02.09
23:54
у ячейки есть недокументированое свойство "Text"

calculate - пересчитывает все формулы на листе
13 Гений 1С
 
гуру
07.02.09
00:58
(12) И что дает текст?
Вде, калькулейт мне никак не поможет.
14 vde69
 
07.02.09
01:14
(13) я не понимаю зачем тебе считать ДВЕ формулы в одной ячейки, куда тебе результат нужен?

вообще можно все считать через макрос, без ячеек вообще
15 Гений 1С
 
гуру
07.02.09
01:54
(14) Чувак, мне не результат нужен, мне нужно знать все параметры, переданные в выбор
16 Гений 1С
 
гуру
07.02.09
01:55
Если НЕ ЛЕВ(ВРЕГ(Формула),10) = "=CHOOSE(1," Тогда
           Продолжить;
       КонецЕсли;
       //Сообщить(Формула);
       //Получаем массив параметров
       Инд = 2;
       Хвост = Сред(Формула, 10); //Хвост начинается с запятой после единицы
       М = Новый Массив();
       ИсходнаяФормула = Формула;
       Пока Истина Цикл
           //Вычисляем и получаем значение формулы
           Попытка
               //Проверяем, есть ли параметр
               //=ISERROR(CHOOSE(1,1234.14,"СКД","УС:Счет.Код = ""01"", ","У:Субконто1.Наименование=""Жилое здание"""))
               Ячейка.Formula = "=ISERROR(CHOOSE(" + Формат(Инд, "ЧГ=") + Хвост + ")";
               Если Ячейка.Value Тогда
                   Прервать;
               КонецЕсли;
               //Если есть, то вычисляем
               Ячейка.Formula = "=CHOOSE(" + Формат(Инд, "ЧГ=") + Хвост;
               Инд = Инд + 1;
               М.Добавить(Ячейка.Value);
           Исключение
               Прервать;
           КонецПопытки;
       КонецЦикла;
       Ячейка.Formula = ИсходнаяФормула;
17 dk
 
07.02.09
06:06
(0) Genij, что мешает баловаться на копии листа или даже в другой книге?
18 Гений 1С
 
гуру
07.02.09
09:16
(17) Оперативность, батенька, оперативность... К тому же лист может быть здоровым, пока он скопируется во временный файл... Это не одноразовая, а постоянная операция. Контекст задачи здесь:
http://infostart.ru/projects/3381/
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший