【问题标题】:Alternatives to creating a megaformula创建大型公式的替代方案
【发布时间】:2011-07-15 20:58:22
【问题描述】:

有没有一种方法可以为一个值表计算一系列公式而不将它们组合成一个大公式?

用一个例子来说明会更容易。说 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 的值设置为来自 Table2!B$1 的列标题值时,我想显示单元格 Table1!$C2 的值。换句话说,我想要一个汉堡在加价为 10% 时的利润。然后通过跨行和单元格复制,我可以观察到当我将标记从 10% 更改为 50% 时对每个项目的利润的影响。

我知道我可以通过将表 1、列 D 和 E 中的公式组合成表 2 的单个大公式来手动执行此操作。例如,单元格 Table2B1 将具有以下公式:

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

但是假设秘密公式实际上是一系列非常复杂的计算,涉及具有数十个依赖项的多个列。我的实际公式集跨越大约 20 列,并生成一个 8 行公式……无法编辑。

因此,在表 1 中构建了一系列相关公式后,最好使用这些公式生成表 2,而无需将它们全部复制到表 2 中。

【问题讨论】:

  • Ed,“Excel 方式”就是做你所做的——将你的计算分解成多个中间单元格。这比“大型公式”更可取,除非您 100% 确定逻辑永远不会改变(哈!)。但是,请参阅此答案中的选项(2.5)和(3),看看它们是否有帮助:stackoverflow.com/questions/4640336/…
  • 谢谢。问题是如何使用这些多个中间单元格作为另一个表中的计算?
  • 选项 2.5 应该可以满足我的需要。我只有一个自变量和一个结果,并且正在尝试进行“假设”分析。如果您作为答案发布,我会接受,以便您获得积分。谢谢。
  • 我很高兴它有帮助!如果您愿意,请在您自己对这个问题的回答上记下说明您如何使用数据表来解决问题,然后接受它...
  • 不幸的是,选项 2.5 不能满足我的需要。事实上,整个数据表的事情看起来相当愚蠢。通过在相应的行和列中使公式依赖绝对,然后复制公式,它不会在 5 分钟内完成任何事情。

标签: excel spreadsheet worksheet-function


【解决方案1】:

所以只是为了感受一下这个超级方程式有多么庞大和难以管理,我把它贴在下面:

=Table6[[#This Row],[FBLR]]*AC$1- ( (Table6[[#This Row],[Base Salary]] + IF(IF(Table6[[#This Row],[exempt ]]="Y", IF( (AC$1-'收支平衡'!$D$32)>'收支平衡'!$D$31, (AC$1-'收支平衡'!$D$32)-'收支平衡' !$D$31,0 ), (AC$1-'收支平衡'!$D$32))>0, IF(Table6[[#This Row],[exempt]]="Y", IF( (AC$1- '收支平衡'!$D$32)>'收支平衡'!$D$31, (AC$1-'收支平衡'!$D$32)-'收支平衡'!$D$31,0 ), (AC$1-'收支平衡'!$D$32)) *IF(Table6[[#This Row],[exempt]]="Y",Table6[[#This Row],[Pay rate]],Table6[[#This Row] ,[工资率]]*1.5), 0)) + Fringe!$D$27*IF( ( Table6[[#This Row],[Base Salary]] + IF( IF(Table6[[#This Row],[豁免]]="Y", IF( (AC$1-'收支平衡'!$D$32)>'收支平衡'!$D$31, (AC$1-'收支平衡'!$D$32)-'收支平衡'!$D$31,0 ), (AC$1-'收支平衡'!$D$32))>0, IF(Table6[[#This Row],[exempt]]="Y", IF( (AC$1 -'收支平衡'!$D$32)>'收支平衡'!$D$31, (AC$1-'收支平衡'!$D$32)-'收支平衡'!$D$31,0 ), (AC$1- '收支平衡' !$D$32)) *IF(Table6[[#This Row],[exempt]]="Y",Table6[[#This Row],[Pay rate]],Table6[[#This Row],[Pay rate]]*1.5), 0)) > Fringe!$E$27,Fringe!$E$27, ( Table6[[#This Row],[Base Salary]] + IF( IF(Table6[[#This Row], [豁免]]="Y", IF( (AC$1-'收支平衡'!$D$32)>'收支平衡'!$D$31, (AC$1-'收支平衡'!$D$32)-'收支平衡偶数'!$D$31,0 ), (AC$1-'收支平衡'!$D$32))>0, IF(Table6[[#This Row],[exempt]]="Y", IF( (AC $1-'收支平衡'!$D$32)>'收支平衡'!$D$31, (AC$1-'收支平衡'!$D$32)-'收支平衡'!$D$31,0 ), (AC$1 -'收支平衡'!$D$32)) *IF(Table6[[#This Row],[exempt]]="Y",Table6[[#This Row],[Pay rate]],Table6[[#This Row],[Pay rate]]*1.5), 0)))+ ( Table6[[#This Row],[Base Salary]] + IF( IF(Table6[[#This Row],[exempt]]]=" Y", IF( (AC$1-'收支平衡'!$D$32)>'收支平衡'!$D$31, (AC$1-'收支平衡'!$D$32)-'收支平衡'!$D$31 ,0 ), (AC$1-'收支平衡'!$D$32))>0, IF(Table6[[#This Row],[exempt]]="Y", IF( (AC$1-'收支平衡' !$D$32)>'收支平衡'!$D$31, (AC$1-'收支平衡'!$D $32)-'收支平衡'!$D$31,0), (AC$1-'收支平衡'!$D$32)) *IF(Table6[[#This Row],[exempt]]="Y",Table6 [[#This Row],[Pay rate]],Table6[[#This Row],[Pay rate]]*1.5), 0))*Fringe!$D$28+Fringe!$D$29*Fringe!$E $29+Fringe!$D$30*Fringe!$E$30+ IF(Table1[[#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)) + ( Table6[[#This Row],[Base Salary]] + IF( IF(Table6[[#This Row],[exempt]]="Y", IF( (AC$1-'收支平衡' !$D$32)>'收支平衡'!$D$31, (AC$1-'收支平衡'!$D$32)-'收支平衡'!$D$31,0 ), (AC$1-'收支平衡'! $D$32))>0, IF(Table6[[#This Row],[exempt]]="Y", IF((AC$1-'收支平衡'!$D$32)>'收支平衡'!$D $31, (AC$1-'收支平衡'!$D$32)-'收支平衡'!$D$31,0), (AC$1-'收支平衡'!$D$32)) *IF(Table6[[#This Row],[exempt]]="Y",Table6[[#This Row],[Pay rate]],Table6[[#This Row],[Pay rate]]*1.5), 0))*Fringe!$ D$32 + ( Table6[[#This Row],[Base Salary]] + IF( IF(Table6[[#This Ro w],[exempt]]="Y", IF( (AC$1-'收支平衡'!$D$32)>'收支平衡'!$D$31, (AC$1-'收支平衡'!$D$32) -'收支平衡'!$D$31,0), (AC$1-'收支平衡'!$D$32))>0, IF(Table6[[#This Row],[exempt]]="Y", IF ((AC$1-'收支平衡'!$D$32)>'收支平衡'!$D$31, (AC$1-'收支平衡'!$D$32)-'收支平衡'!$D$31,0), (AC$1-'收支平衡'!$D$32)) *IF(Table6[[#This Row],[exempt]]="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 ]]*边缘!$D$36+边缘!$E$37*边缘!$D$37)

【讨论】:

    【解决方案2】:

    抓住编辑栏的底部边框并将其向下拖动,您将获得任意数量的行进行编辑

    【讨论】:

    • 谢谢,这样做了,但仍然无法维持一个几乎覆盖整个屏幕的公式。虽然 ALT+Enter 会使它更具可读性。我将在下面发布公式,这样您就可以看到我所说的有多大。
    • @Ed Haywook OMG 我在想这个公式的 10% 是一个巨大的公式。如果您需要 Excel,请务必使用 VBA,否则在 Excel 上按 Alt+F4 并尝试使用其他编程语言。
    • 大声笑,是的,它是一个丑陋的。让它变得糟糕的是所有具有依赖关系的 IF 公式。有些值会重复十几次。我可能会做一些考虑来缩短它,但即使这样也将是一个漫长而复杂的过程。
    • 是的,你可以在VB中制作几个子程序并在公式中调用它们,它看起来会更漂亮。 “分而治之”
    猜你喜欢
    • 2014-04-09
    • 2022-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-16
    • 1970-01-01
    • 2014-11-18
    • 2010-09-07
    相关资源
    最近更新 更多