15

我有一个以这种方式包含公式的 Excel 文件:

=IF(OR(ISERROR(G16),ISERROR(G17)),X16,IF(OR(G16="xxx",G16="yyy",G16="zzz"),Y16,IF(G16="333","N\A",IF(G17="333",Z16,IF(D17="",IF((HEX2DEC(W$10)-HEX2DEC(W16))/VLOOKUP(F16,$M$36:$N$41,2,FALSE)<0,0,(HEX2DEC(W$10)-HEX2DEC(W16))/VLOOKUP(F16,$M$36:$N$41,2,FALSE)), IF((HEX2DEC(W17)-HEX2DEC(W16))/VLOOKUP(F16,$M$36:$N$41,2,FALSE)<0,0,(HEX2DEC(W17)-HEX2DEC(W16))/VLOOKUP(F16,$M$36:$N$41,2,FALSE)))))))

我想简化它们,以便以更易读的方式编写。

  • 我可以以缩进的方式编辑/编写 Excel 公式吗?
  • 我可以做什么样的简化?
  • 我应该使用 VBA 脚本而不是 Excel 的公式吗?
4

9 回答 9

11

您可以在公式栏中使用 Alt+Enter 使公式变为多行。可悲的是,没有制表符只有空格,因此创建和编辑变得乏味。也可以看看

http://www.dailydoseofexcel.com/archives/2005/04/01/excel-formula-formatter/

于 2012-10-03T18:55:02.470 回答
5

命名您引用的一些单元格可能会使整个内容更具可读性

于 2012-10-03T18:21:26.613 回答
4

作为使用辅助列的示例,您可以使用以下内容缩短公式

[A1]=VLOOKUP(F16,$M$36:$N$41,2,FALSE)

[B1]=HEX2DEC(W$10)

[C1]=HEX2DEC(W16)

[D1]=HEX2DEC(W17)

然后将大公式缩短为

=IF(OR(ISERROR(G16),ISERROR(G17)),X16,IF(OR(G16="xxx",G16="yyy",G16="zzz"),Y16,IF(G16="333","N\A",IF(G17="333",Z16,IF(D17="",IF((B1-C1)/A1<0,0,(B1-C1)/A1), IF((D1-C1)/A1<0,0,(D1-C1)/A1))))))

这在使用 DATE 或 NOW 等易失性函数时特别有效,当结果相同时,您不想为每个单元格重新计算。

它是否更具可读性,也许不是,但您可以用适当的注释标记列标题

于 2012-10-03T18:18:48.243 回答
4

FormulaDesk是一个免费的 Excel 插件,它使复杂的公式更具可读性和更易于理解,而无需重写它们。它使创建、编辑、调试和理解公式变得更加容易。它有两种模式:“编辑视图”和“探索视图”,可以切换。

  • “编辑”视图是一个增强的公式编辑器,具有 Intellisense 等功能。它在您键入时格式化,垂直偏移嵌套元素以提高清晰度和可理解性。

  • “探索”视图以简单的嵌套/上卷方式呈现公式,首先是最简单的公式顶层视图,但允许您向下钻取到嵌套表达式。这使您能够快速了解​​它如何/为什么返回当前结果。单击绿色条(汇总结果)以向下钻取。或者,单击“全部展开”、“全部折叠”按钮。

  • 在这两个视图中,您可以将鼠标悬停在各种元素(例如:函数、参数等)上以查看包含更多信息的弹出窗口,例如定义/描述、当前值等。例如,悬停在某个范围上将显示其当前值。

  • 还有很多其他功能。

[披露:我是 FormulaDesk 的作者]

在此处输入图像描述

于 2014-09-18T01:00:30.707 回答
3

辅助列和命名范围的组合将使该公式变得非常简单。

在下图中,您可以看到命名范围如何整理公式:

请注意,“prices”是范围 A2:A7 的名称,“inflated_prices”是 B2:B7 的名称。

另请注意,名称是智能的:sum(prices)将对整个范围求和,而=+prices*2在 B2 中解析为=+A2*2=+prices*2在 B3 中解析为=+A3*2等等。

在此处输入图像描述

于 2012-10-03T18:32:38.863 回答
3

您可以大大简化您的公式,同时仍然保留一个公式。您对该HEX2DEC/VLOOKUP部分重复几乎相同的表达式 4 次,如果您认识到这可以简化为单个实例

=IF(公式<0,0,公式)

......相当于

=MAX(0,公式)

[对于公式的数值结果]

如果您将 IF(D17=""..... 表达式嵌套在主公式中,即此版本

=IF(ISERROR(G16&G17),X16,IF(OR(G16={"xxx","yyy","zzz"}), Y16,IF(G16="333","N\A",IF(G17="333",Z16,MAX(0,(HEX2DEC(IF(D17="",W$10,W17))-HEX2DEC(W16))/VLOOKUP(F16,$M$36:$N$41,2,0))))))

于 2012-10-03T19:03:33.517 回答
2

既然您询问了 VBA 代码,我想我会尝试一下。它当然更容易理解,因此更易于维护,但是该函数有 11 个参数,所以有点笨拙。

Function Magic(d17 As Range _
                , f16 As Range _
                , g16 As Range _
                , g17 As Range _
                , w10 As Range _
                , w16 As Range _
                , w17 As Range _
                , x16 As Range _
                , y16 As Range _
                , z16 As Range _
                , m36 As Range) As Variant


    Dim a As Variant
    Dim b As Variant

    If IsError(g16.Value) Or IsError(g17.Value) Then
        Magic = x16.Value
        Exit Function
    End If

    If g16.Value = "xxx" Or g16.Value = "yyy" Or g16.Value = "zzz" Then
        Magic = y16.Value
        Exit Function
    End If

    If g16.Value = "333" Then
        Magic = "N\A"
        Exit Function
    End If

    If g17.Value = "333" Then
        Magic = z16.Value
        Exit Function
    End If

    If d17.Value = "" Then
        a = Application.WorksheetFunction.Hex2Dec(w10.Value) _
                - Application.WorksheetFunction.Hex2Dec(w16.Value)
        a = a / Application.WorksheetFunction.VLookup(f16.Value, m36, 2, False)
        If a < 0 Then
            Magic = 0
            Exit Function
        Else
            Magic = a
            Exit Function
        End If
    Else
        b = Application.WorksheetFunction.Hex2Dec(w17.Value) _
                - Application.WorksheetFunction.Hex2Dec(w16.Value)
        b = b / Application.WorksheetFunction.VLookup(f16.Value, m36, 2, False)
        If b < 0 Then
            Magic = 0
            Exit Function
        Else
            Magic = b
            Exit Function
        End If
    End If
End Function

为了更容易遵循您的公式逻辑(我不知道单元格代表什么),我为单元格引用命名了变量。您需要将它们重命名为有意义的名称。代码属于一个模块。

于 2012-10-05T07:28:11.320 回答
1

如果您有一个看起来像这样的公式,那么要获得有意义的响应,您必须在论坛上发布一个示例工作簿,其中包含有关您要实现的目标的明确说明。

是的,上面的一些答案指出了如何更好地查看公式,或者摆脱一些多余的东西,或者隐藏一些 VBA 中的复杂性(在我看来,这仅涉及化妆品,可能会大大增加重新计算时间)。

但如果不知道公式的意图——以及它所在的工作簿——只能提供这么多的建议。

如果你的工作簿中有成千上万个这样的公式,那么你有一个数据结构问题,而不是公式问题。最有效的公式是避免使用的公式。如果您要从头开始重新设计此工作簿,以便它利用 Excel 表、数据透视表,也许还有高级筛选器,那么您将避免使用数以万计的公式。也许成千上万的公式。

于 2014-10-07T23:43:27.703 回答
0

FormulaDesk 仅适用于 Windows。

除了上面的 FormulaDesk:

这是 FastExcel 当前 Beta 3 的链接。但它们似乎已经存在了十多年。29 美元。我认为只有窗户。网站不清楚。

http://fastexcel.wordpress.com/2014/04/28/making-sense-of-complex-formulas-an-indenting-viewer-editer/

Precision Calc 的类似功能。12 美元有一个 Nagware 免费版本,如果你只是偶尔需要它。仅限窗户。

http://precisioncalc.com/tf/what_is_the_formulator.html

于 2014-10-07T13:59:35.827 回答