Excel SUMIFS 公式连续日期条件?

Excel SUMIFS 公式连续日期条件?
=SUMIFS($I$2:$I$2221,$M$2:$M$2221,"VISA",$B$2:$B$2221,"June 1")

这是我在销售分析工作表中使用的公式,它可以清除 POS 报告中的杂乱内容,并将其分解为如下所示的摘要。当我将 6 月 1 日的角拖到下面的其他单元格时,我想找到一种方法来使日期按顺序继续。有什么想法吗?

答案1

要更改天数,您可以为公式的该部分构建一个公式。使用随着行向下移动而递增的内容来构建它,然后您就可以开始工作了。

因此...不要使用“6 月 1 日”之类的文本,而是选择类似 ROW() 的内容,它将根据您所在的行为您提供一个数字。假设您从第 3 行开始:

=ROW()-2

将产生结果“1”。将其与 concatenate 或类似选项结合使用:

=CONCATENATE("June "&(ROW()-2))

这将在第 3 行产生“6 月 1 日”。将 6 月部分更改为“6”和“/”,然后在其末尾拼凑年份(连同其自己的“/”)作为 DATEVALUE 函数的输入:

=DATEVALUE( CONCATENATE( "6/" & (ROW()-2) & "/2018" ))

得出 =DATEVALUE("6/1/2018"),它将给出一个“真实”日期,Excel 可以很好地将其用作函数中的第三个参数。

当您将其向下复制时,它会不断添加“1”并提供您所要求的上升日期。

为了获得“6 月 1 日”的显示,而不是 Excel 以某种不太寻常的方式显示日期,请按如下方式格式化单元格:

嗯嗯

使用四个“m”字符将为您提供“六月”部分,空格将为您提供...空格...而单个“d”将为您提供日期,而无需使用“01”样式。它将是“1”或“22”,但没有前导“0”。(或者,如果您愿意,可以使用两个“d”字符来获取从 1 日到 9 日带有前导 0 的两位数日期。)

现在,如果你想要更花哨,你可以测试日期是否存在。例如,你必须复制 31 个单元格来覆盖 7 月等月份。但是当是 2 月时,最后三个单元格将显示难看的 ERROR!ERROR!ERROR!标签,这会打扰你的用户。因此,将上面的 DATEVALUE() 公式包装在 IFERROR() 公式中:

=IFERROR( DATEVALUE( CONCATENATE( "6/" & (ROW()-2) & "/2018" )), "" )

您可以将“6/”部分更改为包含月份名称的单元格的引用,或者其他一些变体,甚至是用户选择的下拉列表之类的花哨东西,以便更改月份。使用 VLOOKUP() 从名称和隐藏在某处的表中查找月份数字是相当标准的,或者您可以变得时髦,在更改它的 DATEVALUE() 公式中使用月份名称和标准添加,例如“-2018”(任何年份都可以,只要它超过 1900 年)并将其包装在 MONTH() 中:(假设您的月份名称在单元格 A1 中)

=MONTH( A1 & "-2018" )

结果是“6”。如果输入错误,请将其包装在 IFERROR() 中,这样您就可以给出自己的错误消息:

=IFERROR( MONTH( A1 & "-2018" ), "Mmm... spelling?" )

或其他什么。

如果您想要显示多个月份,情况会变得更加复杂,但也不会太复杂。只需更改上面带有 IFERROR() 包装器的公式,如果某个月份的天数太高,则使用“”(空白)。将“”部分替换为 DATEVALEU() 部分,但添加“1”以转到下个月开始的第二天,然后...

是的,然后……问题出现了。它不会转到第二天。也许测试一下月份并添加“1”……这里出现了一个更简单的想法……为什么不直接取显示的前一个日期并将“1”添加到它,而不是继续使用越来越难以实现的工作公式?

但是...您知道...我们可以在第二个单元格中做到这一点...在第一个单元格中显示漂亮的公式,然后对于之后的所有单元格都使用这种更简单的方法,并且月份更改都会为您处理...闰年也是如此...

第 4 行及其后所有行使用的公式为:

=A3 + 1

(当然,将“A”更改为您正在使用的任何列)。

现在你只剩下一个问题了,如果你一次只想计算一个月,那么你就这样做吧。(记住,这个公式对于一个月来说效果很好,所以你可以坚持使用它。)目前它还没有办法注意到月份的变化。所以二月份的月份会变成 2-28、3-1、3-2、3-3……看起来有点……嗯,很无聊……

您可以添加一些内容来解决这个问题。测试结果的 MONTH() 与上面单元格的 MONTH(),如果它们不匹配,则输出“”。这解决了第一个这样的单元格,除二月外的所有月份。使用 OR() 添加测试以查看上面的单元格是否为空白,如果是,则输出空白。这将解决二月的问题:

=IF( OR( MONTH( A3 + 1 ) <> MONTH( A2 ), A2 = "" ), "", A3 + 1 )

上面介绍的所有内容,包括随着您扩展如何使用作品的想法而陷入死胡同的部分,都是相当标准的、大块的电子表格写作。我构建了叙述,而不仅仅是给出我们最终得到的简单答案,以说明在开始时提前思考通常可以避免以后的噩梦。让其他人使用简单的开头,他们会吵着要这个要那个,然后你就陷入了一个复杂的混乱,每次你必须做出改变时,你都要花一个小时重新学习。花点时间思考一下它将来可能需要如何“改进”,你可能会找到一种相当简单、易于理解并逐步增加功能的电子表格。

还要注意,解决问题的方法会导致越来越复杂,直到你所有的初始问题都以某种方式得到解决,而且是通过合理的方法,但尽管你没有做任何愚蠢或错误的事情,但你却很难改进和扩展工作。你在开始时投入的战略思想可能会让你在开始时采用非常简单的“只需加 1”方法,而且实际上不需要解决任何问题。你会从一开始就在更短的时间内得到一份简单、可扩展的工作,而且烦恼更少。

(缺点:当你探索复杂的附加组件和临时路径时,你确实会学到东西。这本意是搞笑的,但也是事实。但我敢打赌,这实际上并不是你的主要目标。)

答案2

Excel 通常擅长计算数字序列,但有时您的数据并不总是按可预测的顺序排列,因此您必须提供一些提示。通常,只需在一个单元格中输入“6 月 1 日”,按您想要的方式格式化,然后拖动选择矩形右下角的方形手柄即可。另一方面,如果您的某些日期跳跃或存在其他因素,Excel 并不总是会做出正确的假设,可能会一遍又一遍地打印相同的值。

如果您想拖动日期:

  1. 在一个单元格中输入 6 月 1 日
  2. 在其下方的单元格中输入 6 月 2 日。 这会给 Excel 提示你想要重复的模式如果所有其他项目
  3. Excel 可能会将它们检测为日期,并将您的单元格重新格式化为除“6 月 1 日”之外的日期格式(如“1-Jun”)。突出显示单元格,并将数字格式更改为自定义格式:[$-409]mmmm d;@这样它就会按照您描述的方式显示单元格,而不打印年份。
  4. 将单元格格式化为您想要的方式后,选择这两个单元格。
  5. 将鼠标悬停在选择矩形的右下角方点上。您的光标应变为“+”符号。
  6. 使用鼠标主按钮向下拖动“+”,图案将重复。如需更多高级选项(例如仅重复工作日),请使用次要的鼠标按钮,它将弹出一个包含各种选项的上下文菜单。

这应该会重复该序列。这也适用于其他模式,例如,如果您使用 6 月 1 日和 6 月 4 日作为模式种子,则每 3 天跳过一次。

相关内容