Альтернативы созданию мегаформулы

Есть ли способ оценить серию формул для таблицы значений, не объединяя их в одну мегаформулу?

Проще проиллюстрировать примером. Скажем, Table1 выглядит так:

        A        B       C            D                E          F
1    PRODUCT    COST   MARKUP    SECRET FORMULA      PRICE      PROFIT
2    burger     4.00    50%         =22*12345    =B2*(1+C2)*D2  =E2-B2
3    fries      3.00    50%         =22*12345    =B3*(1+C3)*D3  =E3-B3
4    soda       1.50    50%         =22*12345    =B4*(1+C4)*D4  =E4-B4

Теперь я хочу построить Table2, чтобы возвращать прибыль для диапазона ставок наценки для каждого продукта, например:

       A        B        C         D         E       F
1   MARKUP    10%       20%      30%       40%     50%
2   burger
3   fries
4   soda 

В Table2! B2 я хочу отображать значение ячейки Table1! $ C2, когда значение ячейки Table1! $ C2 установлено на значение заголовка столбца из Table2! B $ 1. Другими словами, я хочу получить прибыль от бургера при наценке 10%. Затем копируя строки и ячейки, я могу наблюдать влияние на прибыль для каждого элемента, когда я изменяю свою наценку от 10% до 50%.

Я знаю, что могу сделать это вручную, объединив формулы из таблицы 1, столбцы D и E в единую мегаформулу для таблицы 2. Например, ячейка Table2B1 будет иметь следующую формулу:

= Table1!B2*(1 + B$1)*22*12345

Но предположим, что СЕКРЕТНАЯ ФОРМУЛА на самом деле представляет собой очень сложную серию вычислений по нескольким столбцам с десятками зависимостей. Мой фактический набор формул охватывает около 20 столбцов и генерирует формулу из 8 строк ... которую невозможно редактировать.

Итак, построив серию зависимых формул в таблице 1, было бы здорово использовать эти формулы для создания таблицы 2, без необходимости повторять их все в таблице 2.


person Ed Haywood    schedule 15.07.2011    source источник
comment
Спасибо. Вопрос в том, как использовать эти несколько промежуточных ячеек в качестве расчета в другой таблице?   -  person jtolle    schedule 16.07.2011
comment
Вариант 2.5 должен делать то, что мне нужно. У меня есть только одна независимая переменная и один результат, и я пытаюсь провести анализ типа «если». Если вы отправите сообщение в качестве ответа, я приму, и вы получите баллы. Спасибо.   -  person Ed Haywood    schedule 16.07.2011
comment
Я рада, что помогло! Если хотите, запишите свой ответ на этот вопрос, описывая, как вы использовали таблицу данных для решения своей проблемы, а затем примите это ...   -  person Ed Haywood    schedule 16.07.2011
comment
К сожалению, оказалось, что вариант 2.5 не выполняет то, что мне нужно. На самом деле вся эта таблица данных кажется довольно глупой. Он не делает ничего, что нельзя было бы сделать за 5 минут, сделав зависимости формул абсолютными в соответствующих строках и столбцах, а затем скопировав формулу.   -  person jtolle    schedule 16.07.2011
comment
Эд, я не могу напрямую говорить о вашей ситуации, но функция таблицы данных Excel действительно делает что-то нетривиальное. По сути, он делает то, что вам пришлось бы делать вручную - подставлять значения в одну или две ячейки, которые затем связаны со сложной серией формул, и собирать результаты этих формул из одной ячейки результатов. Было бы действительно хорошо, если бы функция таблицы данных Excel и ее функция сценария были бы объединены, но, увы ...   -  person Ed Haywood    schedule 18.07.2011
comment
Спасибо, сделал это, но по-прежнему невозможно поддерживать формулу, которая охватывает почти весь экран. Хотя сочетание клавиш ALT + Enter сделает его более читабельным. Я опубликую формулу ниже, чтобы вы могли понять, о каком большом размере я говорю.   -  person jtolle    schedule 18.07.2011


Ответы (2)


Чтобы понять, насколько огромна и неуправляема мегаформула, я разместил ее ниже:

Захватите нижнюю границу строки формул и перетащите ее вниз, вы получите столько строк, сколько хотите для редактирования.

person Ed Haywood    schedule 15.07.2011

введите описание изображения здесь

Эд, в Excel можно делать то, что вы сделали, - разбивать вычисления на несколько промежуточных ячеек. Это предпочтительнее мега-формулы, если вы не уверены на 100%, что логика никогда не изменится (ха!). Однако просмотрите варианты (2.5) и (3) в этом ответе и посмотрите, помогут ли они: stackoverflow.com/questions/4640336/

person Eric Fortis    schedule 15.07.2011
comment
@Ed Haywook OMG Я думал, что 10% этой формулы - огромная сумма. Определенно используйте VBA, если вам нужен Excel, в противном случае нажмите Alt + F4 в Excel и попробуйте другой язык программирования. - person Ed Haywood; 16.07.2011
comment
LOL, да, это уродливо. То, что делает его плохим, - это все формулы IF с зависимостями. Некоторые из ценностей повторяются по дюжине раз. Я, вероятно, мог бы сделать некоторый факторинг, чтобы сократить его, но даже это был бы долгий и сложный процесс. - person Eric Fortis; 16.07.2011
comment
да, вы можете создать несколько подпрограмм в VB и вызвать их в формуле, это будет выглядеть намного красивее. Разделяй и властвуй - person Ed Haywood; 16.07.2011
comment
= Таблица6 [[# Эта строка], [FBLR]] * AC $ 1- ((Таблица6 [[# Эта строка], [Базовая зарплата]]] + IF (IF (Таблица6 [[# Эта строка], [исключено]] = "Y", ЕСЛИ ((AC $ 1-'Безубыточность'! $ D $ 32)> 'Безубыточность'! $ D $ 31, (AC $ 1-'Безубыточность'! $ D $ 32) - 'Безубыточность'! $ D $ 31,0), (AC $ 1-'Break Even '! $ D $ 32))> 0, IF (Table6 [[# This Row], [exclupt]] = "Y", IF ((AC $ 1-'Break Even '! $ D $ 32)>' Безубыточность '! $ D $ 31, (AC $ 1 -' Безубыток '! $ D $ 32) -' Безубыточность '! $ D $ 31,0), (AC $ 1 -' Безубыток ' ! $ D $ 32)) * IF (Таблица6 [[# Эта строка], [исключить]] = "Y", Таблица6 [[# Эта строка], [Ставка вознаграждения]], Таблица6 [[# Эта строка], [Платить ставка]] * 1.5), 0)) + Fringe! $ D $ 27 * IF ((Table6 [[# This Row], [Base Salary]]] + IF (IF (Table6 [[# This Row], [Expt]] = "Y", ЕСЛИ ((AC $ 1-'Безубыточность'! $ D $ 32)> 'Безубыточность'! $ D $ 31, (AC $ 1-'Безубыточность'! $ D $ 32) - 'Безубыточность'! $ D $ 31,0), (AC $ 1-'Break Even '! $ D $ 32))> 0, IF (Table6 [[# This Row], [exclupt]] = "Y", IF ((AC $ 1-'Break Даже '! $ D $ 32)>' Безубыточность '! $ D $ 31, (AC $ 1 -' Безубыток '! $ D $ 32) -' Безубыток '! $ D $ 31,0), (AC $ 1 -' Безубыток '! $ D $ 32)) * IF (Таблица6 [[# Эта строка], [исключено]] = "Y", Таблица6 [[# Эта строка], [Ставка вознаграждения]], Таблица6 [[# Эта строка], [Ставка вознаграждения]] * 1.5), 0))> Fringe! $ E $ 27, Fringe! $ E $ 27, (Table6 [[# This Row], [Base Salary]]] + IF (IF (Table6 [[# This Row], [исключено]] ] = "Y", ЕСЛИ ((AC $ 1-'Безубыточность'! $ D $ 32)> 'Безубыточность'! $ D $ 31, (AC $ 1-'Безубыточность'! $ D $ 32) - 'Безубыточность'! $ D $ 31,0), (AC $ 1-'Break Even '! $ D $ 32))> 0, IF (Table6 [[# This Row], [exclupt]] = "Y", IF ((AC $ 1-' Безубыточность '! $ D $ 32)>' Безубыточность '! $ D $ 31, (AC $ 1-' Безубыточность '! $ D $ 32) -' Безубыточность '! $ D $ 31,0), (AC $ 1-' Безубыточность Даже '! $ D $ 32)) * IF (Таблица6 [[# Эта строка], [исключить]] = "Y", Таблица6 [[# Эта строка], [Ставка вознаграждения]], Таблица6 [[# Эта строка], [Ставка заработной платы]] * 1,5), 0))) + (Таблица6 [[# Эта строка], [Базовая зарплата]] + IF (IF (Таблица6 [[# Эта строка], [исключено]] = «Y», ЕСЛИ ((AC $ 1-'Безубыточность'! $ D $ 32)> 'Безубыточность'! $ D $ 31, (AC $ 1-'Безубыточность'! $ D $ 32) - 'Безубыточность'! $ D $ 31,0) , (AC $ 1-'Break Even '! $ D $ 32))> 0, IF (Table6 [[# This Row], [exclupt]] = "Y", IF ((AC $ 1-'Break Even'! $ D $ 32)> «Безубыточность»! $ D $ 31, (AC $ 1 - «Безубыточность»! $ D $ 32 ) - 'Безубыточность'! $ D $ 31,0), (AC $ 1-'Безубыточность'! $ D $ 32)) * IF (Таблица6 [[# Эта строка], [исключено]] = "Y", Таблица6 [ [#This Row], [Pay rate]], Table6 [[# This Row], [Pay rate]] * 1.5), 0)) * Fringe! $ D $ 28 + Fringe! $ D $ 29 * Fringe! $ E $ 29 + Бахрома! $ D $ 30 * Бахрома! $ E $ 30 + IF (Таблица1 [[# This Row], [TC?]] = "Y", Fringe! $ F $ 34 * 12, IF (Table1 [[# This Row]] , [TC?]] = "N", бахрома! $ E $ 34 * 12 * бахрома! $ D $ 34, (бахрома! $ F $ 34 * 12 + бахрома! $ E $ 34 * 12 * бахрома! $ D $ 34) / 2 )) + (Таблица6 [[# Эта строка], [Базовая зарплата]] + IF (IF (Таблица6 [[# Эта строка], [исключено]] = «Y», ЕСЛИ ((AC $ 1-'Безубыточный'! $ D $ 32)> «Безубыточность»! $ D $ 31, (AC $ 1 - «Безубыток»! $ D $ 32) - «Безубыточность»! $ D $ 31,0), (AC $ 1 - «Безубыток»! $ D $ 32))> 0, IF (Table6 [[# This Row], [exclupt]] = "Y", IF ((AC $ 1-'Безубыточность'! $ D $ 32)> 'Безубыточность'! $ D $ 31 , (AC $ 1-'Безубыточность'! $ D $ 32) - 'Безубыточность'! $ D $ 31,0), (AC $ 1-'Безубыточность'! $ D $ 32)) * IF (Таблица6 [[# This Row ], [except]] = "Y", Table6 [[# This Row], [Pay rate]], Table6 [[# This Row], [Pay rate]]] * 1.5), 0)) * Fringe! $ D $ 32 + (Таблица6 [[# Эта строка], [Базовая зарплата]] + IF (IF (Таблица6 [[# Эта строка], [исключено]]] = "Y", ЕСЛИ ((AC $ 1-'Безубыточность'! $ D $ 32)> «Безубыточность»! $ D $ 31, (AC $ 1 - «Безубыточность»! $ D $ 32) - «Безубыточность»! $ D $ 31,0), (AC $ 1 - «Безубыточность»! $ D $ 32))> 0, IF (Table6 [[# This Row], [exclupt]] = "Y", IF ((AC $ 1-'Безубыточность'! $ D $ 32)> 'Безубыточность'! $ D $ 31, (AC $ 1-'Безубыточность'! $ D $ 32) - 'Безубыточность'! $ D $ 31,0), (AC $ 1-'Безубыточность'! $ D $ 32)) * IF (Таблица6 [[# This Row] , [exclupt]] = "Y", Table6 [[# This Row], [Pay rate]], Table6 [[# This Row], [Pay rate]]] * 1.5), 0)) * Fringe! $ D $ 33 + Fringe! $ E $ 35 * 12 * Fringe! $ D $ 35 + Table1 [[# This Row], [Base Salary]] * Frin ge! $ D $ 36 + бахрома! $ 37 $ * бахрома! $ 37 $) - person Eric Fortis; 16.07.2011