【问题标题】:What formula will allow me to complete certain SUMs depending on the data of a different cell?什么公式可以让我根据不同单元格的数据完成某些 SUM?
【发布时间】:2021-03-31 19:51:43
【问题描述】:

这是一年内交易盈亏的示例电子表格。

如果在1 Mar 2131 Mar 21 的日期之间没有L 的日期,我正在尝试让单元格I6 在工作表MONTHLY STATS - SPREADS 上填充0 @。

但如果单元格H6 中存在数据,我只希望填充此0。如果H6 中没有数据,我希望I6 为空白。 (请注意,我无法使用数字格式将这些0 隐藏在单元格I6 中,因为我试图在稍后的工作表中对完整的I 列进行平均)

虽然它正在执行此单元格I6,但它还必须能够运行下面显示的COUNTIFSSUM 公式。

重要提示:这也必须以相反的方式工作。例如如果日期之间没有W,我希望在将数据放入LOST 列后将0 填充到WON 列中。

这是我目前在单元格I6 中使用的公式:

=IF(H6="", "",IF(COUNTIFS('SPREADS LOG'!P:P,"L",'SPREADS LOG'!R:R,">="&DATE(2021,3,1),'SPREADS LOG'!R:R,"<="&DATE(2021,3,31)),COUNTIFS('SPREADS LOG'!P:P,"L",'SPREADS LOG'!R:R,">="&DATE(2021,3,1),'SPREADS LOG'!R:R,"<="&DATE(2021,3,31)),"0"))

如果有人可以对此进行调整或提出修改建议,那就太好了。

【问题讨论】:

  • 更好地展示您的数据在SPREADS LOG 表上的结构,并进一步阐明“虽然它正在执行此单元格 I6 还必须能够运行下面显示的 COUNTIFS 和 SUM 公式。 "旨在实现...

标签: excel vba excel-formula excel-2019


【解决方案1】:

这里有一个公式可以做你想做的事情。

单元格H6:

=LET(LOSSES,COUNTIFS('SPREADS LOG'!$P:$P,"L",'SPREADS LOG'!$R:$R,">="&$A6,'SPREADS LOG'!$R:$R,"<="&EDATE($A6,1)),WINS,COUNTIFS('SPREADS LOG'!$P:$P,"W",'SPREADS LOG'!$R:$R,">="&$A6,'SPREADS LOG'!$R:$R,"<"&EDATE($A6,1)),IF(AND(LOSSES=0,WINS=0),"",WINS))

单元格I6:

=LET(LOSSES,COUNTIFS('SPREADS LOG'!$P:$P,"L",'SPREADS LOG'!$R:$R,">="&$A6,'SPREADS LOG'!$R:$R,"<="&EDATE($A6,1)),WINS,COUNTIFS('SPREADS LOG'!$P:$P,"W",'SPREADS LOG'!$R:$R,">="&$A6,'SPREADS LOG'!$R:$R,"<"&EDATE($A6,1)),IF(AND(LOSSES=0,WINS=0),"",LOSSES))

使用空字符串"" 而不是0 非常适合从SUMCOUNTIFS 公式中排除单元格而不破坏它们。

请注意,您不能使用其他单元格的值来决定是否填充 0 值,因为这会创建循环引用。

没有LET的版本:

单元格H6:

=IF(AND(COUNTIFS('SPREADS LOG'!$P:$P,"L",'SPREADS LOG'!$R:$R,">="&$A6,'SPREADS LOG'!$R:$R,"<"&EDATE($A6,1))=0,COUNTIFS('SPREADS LOG'!$P:$P,"W",'SPREADS LOG'!$R:$R,">="&$A6,'SPREADS LOG'!$R:$R,"<"&EDATE($A6,1))=0),"",COUNTIFS('SPREADS LOG'!$P:$P,"W",'SPREADS LOG'!$R:$R,">="&$A6,'SPREADS LOG'!$R:$R,"<"&EDATE($A6,1)))

单元格I6:

=IF(AND(COUNTIFS('SPREADS LOG'!$P:$P,"L",'SPREADS LOG'!$R:$R,">="&$A6,'SPREADS LOG'!$R:$R,"<"&EDATE($A6,1))=0,COUNTIFS('SPREADS LOG'!$P:$P,"W",'SPREADS LOG'!$R:$R,">="&$A6,'SPREADS LOG'!$R:$R,"<"&EDATE($A6,1))=0),"",COUNTIFS('SPREADS LOG'!$P:$P,"L",'SPREADS LOG'!$R:$R,">="&$A6,'SPREADS LOG'!$R:$R,"<"&EDATE($A6,1)))

这些公式假定您的列 A 中的日期包含日期值(例如,01.03.2021 代表三月)并使用自定义格式设置格式。这使您可以简单地复制整个列的公式,而无需手动更改日期。我强烈推荐这种方法,因为它对您当前的方法没有缺点,但是当您将其添加到您的自动化库中时,它可能具有巨大的优势。如果您决定坚持您的方法,则需要更改 COUNTIFS 中的条件。

已编辑,因为我误解了问题并提供了不正确的答案。

【讨论】:

  • 嗨@riskypenguin,非常感谢您的帮助,我真的很感激。我已经输入了公式,但是它给出了 NAME 错误。我试图找出原因,但无法解决。我不太担心手动更改日期,因为我的大部分工作表都是这样完成的。我们正在处理的工作表的 A 列不包含任何日期,只是您在屏幕上看到的文本。希望这会有所帮助?
  • NAME 错误很可能是由于您的 Excel 版本尚不支持 LET。我添加了一个没有LET 的版本。请注意,以文本形式输入月份和以日期形式输入月份与使用 MMMM 之类的自定义格式之间没有明显的区别(这适用于我的 Excel 版本,可能与您的不同)。我强烈建议在此处使用日期而不是文本。
  • 再次感谢。请问您使用的是哪个版本的Excel,我想升级一下。公式都输入没有错误,但我不确定它们是否产生了我们正在寻找的结果。到目前为止,在 3 月份,已经有一个 L 记录在 SPREADS LOG 工作表中,并且它没有显示在我们正在处理的工作表的“丢失”列中。如果它使事情变得更容易,我可以将工作表通过电子邮件发送给您,我知道仅使用屏幕截图可能会很困难。
  • 好的,请随时将其发送至 riskypenguin_so@protonmail.com,我会在今天晚些时候查看。
  • 啊,我忘记了:我正在使用我所在大学提供的教育许可下的 Microsoft Office 365。
猜你喜欢
  • 1970-01-01
  • 2013-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多