【问题标题】:Excel help on combination of Index - match and sumifs?Excel 对 Index - match 和 sumifs 组合的帮助?
【发布时间】:2018-10-01 02:32:31
【问题描述】:

我有这三个表,如下图所示: SalesOrderTable、OrderAdjustmentTable 和 TotalSalesTable。

SalesOrderTable

SalesOrderTable 中的每个订单号代表同一张发票中产品的一个订单号。如果发票是针对一种以上的产品开具的,则它具有 A、B 或 C,但如果仅针对一种产品开具发票则没有。 例如:订单 1703 有两个产品,因此每个订单号的末尾都有 A 和 B。订单 1704 仅针对 Apple 的订单,因此其末尾没有任何字母。

订单调整表

如果每个订单号有任何调整,则在调整栏中手动输入。

TotalSalesTable

在此表中,对同一订单号的所有总销售额和调整量进行总计。所以 1705 的顺序是 1705A、1705B、1705C 的组合。

这是我目前的公式,所有公式都会产生错误消息或计算不正确。

订单总金额栏:

=SUMIF(SalesOrderTable[Order Number], LEFT(G4,LEN(SalesOrderTable[Order Number])-1),SalesOrderTable[Order Sales Amount])

订单总调整栏:

=sumifs(OrderAdjustmentTable[#All],OrderAdjustmentTable[Order Number],MATCH(B19,LEFT(SalesOrderTable[Order Number],LEN(SalesOrderTable[Order Number])-1), 0), "*Adjustment",OrderAdjustmentTable[#All])

我知道这可能与 match 和 sumifs 有关,但我所做的所有公式都会导致错误消息。 任何人都可以帮助我解决我在上面这些公式中做错了什么,我该如何解决它们?我在这里束手无策,将不胜感激给出的任何建议。非常感谢!

编辑:

我想要达到的就是填:

TotalSalesTable 中的订单总额列,其中包含具有相同订单号的所有订单,无论其 ABC 是什么。因此,1705 的总金额将是 1705A、1705B、1705C 的订单金额的总和。

对于订单总调整,我想从 OrderAdjustmentTable 中获取 TotalSalesTable 中订单编号列的所有调整值,而不管它们的 ABC 是什么。因此,TotalSalesTable 中 1705 的总调整量将是 1705B 和 1705C。

【问题讨论】:

  • 您能否包括预期结果数字以及解释调整如何用于计算最终总数?
  • 你好@QHarr!我在上面编辑的问题中添加了我想要实现的目标。希望这能让它更清楚!
  • 嗨@QHarr,我在这里stackoverflow.com/questions/52588636/… 发布了我在上面提出的问题的更详细和具体的细分,您是否仍然有兴趣提供帮助:) 谢谢!

标签: excel excel-formula excel-2010 worksheet-function


【解决方案1】:

只要没有带有和不带有字母的订单重叠(例如,SalesOrderTable 有 1703、1703A 和 1703B 的记录),下面的公式应该在单元格 C19 中有效,您可以从中复制它:

订单总金额:

=SUMIFS(SalesOrderTable[Order Sales Amount],SalesOrderTable[Order Number],$B19)+SUMIFS(SalesOrderTable[Order Sales Amount],SalesOrderTable[Order Number],$B19&"*")

这个公式将精确匹配和近似匹配相加,但就像我说的那样,如果任何订单既有字母又有又缺少字母,则可能会被重复/重复计算。您还应该能够复制订单总计调整列的公式。

【讨论】:

  • 嗨@M。明智的,谢谢你的回答。我试过你的代码,它适用于总金额,但你能澄清一下这是什么意思吗? “....但就像我说的那样,如果任何订单都包含和缺少字母,那么某些东西可能会被重复/重复计算。”
  • 当然。例如,1703 有 3 条记录:1703A 的一条记录为 200 美元,1703B 的一条记录为 300 美元,1703 的一条记录为 500 美元。如果发生这种情况,公式将显示 1000 美元而不是 500 美元。
  • 感谢您的澄清!您的解决方案适用于总订单列,但我可能必须使用其他解决方案进行总调整。但是,仍然感谢您的解决方案!
【解决方案2】:

暂时解决这个问题,将 LEFT 放入 SUMIF 似乎会导致问题(至少在 Mac 上)。

我建议先在单独的列中计算不带字母的订单号。 LEFT 返回一个字符串,所以我必须将它包装在 VALUE 中,以便 SUMIF 匹配。由于你的都是四位数,我就用VALUE(LEFT([@[Order Number]],4))

那么它只是标准的SUMIF 表示法:

=SUMIF(Table1[Base Num],[@[Order Number]],Table1[Order Sales Amount])

示例:https://www.dropbox.com/s/yj6ktl14jqglxsm/Example.xlsx?dl=0

您可以通过多种方式获取订单号,但您必须小心您的示例:

LEFT(G4,LEN(SalesOrderTable[Order Number])-1) 因为这对于1703A12990B 可以正常工作,但会从1701 中删除一个数字。

编辑:如果您的位数不同,这是获取订单号的一种方法:=IFERROR(VALUE(A2),VALUE(LEFT(A2,LEN(A2)-1)))

这表示,“如果VALUE(A2) 返回错误(意味着其中包含一个字母),则删除最后一个字符,否则,使用VALUE(A2),因为它已经是一个数字。”

【讨论】:

  • 我以前在使用 left() 返回数字时遇到过这种情况。我的解决方案是乘以 1 即 =LEFT(A2,LEN(A2)-1))*1
  • @Mako212,这适用于单元格,但在这种情况下我该如何使用它,因为我的公式包含你的公式给我一条错误消息? '=MATCH(B19,IFERROR(VALUE(SalesOrderTable[Order Number]),VALUE(LEFT(SalesOrderTable[Order Number],LEN(SalesOrderTable[Order Number])-1))),0)'
  • 我只需在您的调整表中添加另一列,该列等于三个调整列的总和,然后它的工作方式与订单表相同。
  • 是的,可能会这样。我会看看我是否可以将其应用于我的问题。谢谢马可!
猜你喜欢
  • 2019-09-27
  • 2016-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多