【问题标题】:How can I perform a conditional indirect sum in excel with an if function?如何使用 if 函数在 Excel 中执行条件间接求和?
【发布时间】:2019-03-21 14:03:54
【问题描述】:

Sample Sheet

利润

销售

费用

销货成本

您好,我有一系列财务数据需要转化为利润。我已经能够根据特定的日期范围成功地将所有财务汇总在一起,但是我遇到了销售商品成本的问题。使用 match 函数(如果格式荒谬,我很抱歉,我是 stackoverflow 的新手;该公式也出现在 google sheet 中):

=SUM(INDIRECT("'Sales'!"&SUBSTITUTE(ADDRESS(1,MATCH($C$1,Sales!$1:$1,0),4),1,"") &MATCH(A3,Sales!A:A,0)&":"&SUBSTITUTE(ADDRESS(1,MATCH($E$1,Sales!$1:$1,0),4),1,"")&MATCH(A3,Sales!A:A,0)))+SUM(INDIRECT("'Expenses'!"&SUBSTITUTE(ADDRESS(1,MATCH($C$1,Expenses!$1:$1,0),4),1,"")&MATCH(A3,Expenses!A:A,0)&":"&SUBSTITUTE(ADDRESS(1,MATCH($E$1,Expenses!$1:$1,0),4),1,"")&MATCH(A3,Expenses!A:A,0)))+SUM(INDIRECT("'COGS'!"&SUBSTITUTE(ADDRESS(1,MATCH($C$1,COGS!$1:$1,0),4),1,"")&MATCH(A3,COGS!A:A,0)&":"&SUBSTITUTE(ADDRESS(1,MATCH($E$1,COGS!$1:$1,0),4),1,"")&MATCH(A3,Expenses!A:A,0)))

当匹配一个在所有数据表中保持不变的 ID 列表时,我可以逐行对每个表上的每个值求和。我的问题是:只有在同一位置但在销售选项卡上有相应的销售价值时,我只想将销售成本表相加才能获利。我尝试用 sumif 替换 sum 无济于事,因为我刚刚掌握了这个间接函数的窍门。任何人都可以向我提供任何可以帮助我更好地理解这个问题的信息,我真的很感激。谢谢

【问题讨论】:

  • 对不起,但我想我还需要进一步澄清。您有 4 个选项卡,因此您想在这些选项卡上找到相应 ID 的位置,并且只有在选项卡 Sales 上它实际上是除空之外的任何值时,您想对所有这些值求和?我只是感到困惑,因为在您添加的示例数据中,利润选项卡上的单元格 C3 似乎有所不同。
  • 正确;因此对于样本数据,永远不会出现销售没有相应费用的情况;但是,无论是否有销售,都会有商品销售价值的成本。对于单元格 B3(从 2019 年 1 月 1 日到 2019 年 1 月 6 日,ID 123 的利润)如果我将该日期范围内三张纸上的所有值相加,则利润将为 1.6;但是,由于 ID123 在 1/3-1/6 没有销售,我不希望它添加 1/3-1/6 的 COGS,在这种情况下只添加 1/1 和 1/2。

标签: excel vba match substitution excel-indirect


【解决方案1】:

我认为 COGS 应该是每天一次的费用。这就是除第一个示例之外的所有示例的计算方式。 如果是这样,我相信正确的答案是:

{=SUM(INDIRECT("'Sales'!"&SUBSTITUTE(ADDRESS(1,MATCH($C$1,Sales!$1:$1,0),4),1,"")&MATCH(A3,Sales!A:A,0)&":"&SUBSTITUTE(ADDRESS(1,MATCH($E$1,Sales!$1:$1,0),4),1,"")&MATCH(A3,Sales!A:A,0)))+SUM(INDIRECT("'Expenses'!"&SUBSTITUTE(ADDRESS(1,MATCH($C$1,Expenses!$1:$1,0),4),1,"")&MATCH(A3,Expenses!A:A,0)&":"&SUBSTITUTE(ADDRESS(1,MATCH($E$1,Expenses!$1:$1,0),4),1,"")&MATCH(A3,Expenses!A:A,0)))+SUMPRODUCT(IFERROR(INDIRECT("'Sales'!"&SUBSTITUTE(ADDRESS(1,MATCH($C$1,Sales!$1:$1,0),4),1,"")&MATCH(A3,Sales!A:A,0)&":"&SUBSTITUTE(ADDRESS(1,MATCH($E$1,Sales!$1:$1,0),4),1,"")&MATCH(A3,Sales!A:A,0))/INDIRECT("'Sales'!"&SUBSTITUTE(ADDRESS(1,MATCH($C$1,Sales!$1:$1,0),4),1,"")&MATCH(A3,Sales!A:A,0)&":"&SUBSTITUTE(ADDRESS(1,MATCH($E$1,Sales!$1:$1,0),4),1,"")&MATCH(A3,Sales!A:A,0)),0),INDIRECT("'COGS'!"&SUBSTITUTE(ADDRESS(1,MATCH($C$1,COGS!$1:$1,0),4),1,"")&MATCH(A3,COGS!A:A,0)&":"&SUBSTITUTE(ADDRESS(1,MATCH($E$1,COGS!$1:$1,0),4),1,"")&MATCH(A3,Expenses!A:A,0)))}

【讨论】:

    【解决方案2】:

    没有更多信息,我只能想出那个。

    =SUM(Sales!B2:I2)+SUM(Expenses!B2:I2)-SUMPRODUCT((Sales!B2:I2<>0)*(COGS!B2:I2))

    =SUMPRODUCT((Sales!B2:I2)*($C$1<=Sales!B1:I1)*($E$1>=Sales!B1:I1))+SUMPRODUCT((Expenses!B2:I2)*($C$1<=Expenses!B1:I1)*($E$1>=Expenses!B1:I1))-SUMPRODUCT((Sales!B2:I2<>0)*(COGS!B2:I2)*($C$1<=COGS!B1:I1)*($E$1>=COGS!B1:I1))

    如果日期很重要

    使用您提供的工作表返回 3.2

    你为什么用了这么多indirect & substitute

    它是必需的还是固定的范围适合您的需要?

    【讨论】:

    • 我相信SOMMEPROD实际上是SUMPRODUCT
    • 确实谢谢。一直用法语保存。
    • 所以我需要它根据日期条件逐行求和。例如,对于日期范围 (1/1-1/6) 上的 ID 123,公式的第一部分求和每个从 1/1-1/6 (3+7+0+0+0+0) 销售,第二个对费用 (-2+-4+0+0+0+0) 执行相同操作,第三个执行齿轮相同(-.4+-.4+-.4+-.4+-.4+-.4)。我正在寻找的公式除了 COGS 部分外,其他所有内容都一样,因为如果没有相应的销售,我不会将特定日期的利润评估为 -.4。不幸的是,COGS 数据源没有区别,并且无论销售额如何,每天都会将 COGS 值放在工作表上。
    • =SUMPRODUCT((Sales!B2:I2)*($C$1=Sales!B1:I1))+SUMPRODUCT((费用!B2:I2)*($C$1=Expenses!B1:I1))-SUMPRODUCT((Sales!B2:I20)*(COGS!B2 :I2)*($C$1=COGS!B1:I1)) 这个考虑日期
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-26
    • 1970-01-01
    相关资源
    最近更新 更多