【问题标题】:Formula Referencing Excel Table引用 Excel 表格的公式
【发布时间】:2019-02-13 00:54:53
【问题描述】:

我正在使用 Excel 2013。

我有一个包含三列的表格:Start DateEnd DateHoliday - 包含用于检查是否存在公式的列假期介于开始日期结束日期之间。 开始日期结束日期列包含对计算日期的其他列的引用。 假期 列中的公式使用Index/Match 函数来查看假期列表(在名为SLA 假期 的单独工作表上)。该表在一周的时间跨度内包含数千条记录,并且每天更新。

假期公式不起作用 - 即使时间范围内有假期,它也会返回 FALSE。在评估公式时,它说AND 函数的第一个逻辑是FALSE;但是,这是真的(2018 年 9 月 3 日 > 2018 年 8 月 31 日)。该公式正确计算了AND 函数的第二个逻辑。

当我用对包含这些日期的表格之外的单元格的引用替换对 开始日期结束日期 的表格引用时,公式可以正常工作。

下面是表格中几条记录的屏幕截图,显示了 3 列。我还包括了一个 HTML 版本的复制能力。公式如下:

{=AND(INDEX('SLA Holidays'!$A$2:$A$7,MATCH(MIN(ABS('SLA Holidays'!$A$2:$A$7-[@[Start Date]])),ABS('SLA Holidays'!$A$2:$A$7-[@[Start Date]]),0))>[@[Start Date]],INDEX('SLA Holidays'!$A$2:$A$7,MATCH(MIN(ABS('SLA Holidays'!$A$2:$A$7-[@[Start Date]])),ABS('SLA Holidays'!$A$2:$A$7-[@[Start Date]]),0))<[@[End Date]])}

Start Date  End Date    Holiday
08/31/2018  9/4/2018    FALSE
08/31/2018  9/4/2018    FALSE
08/31/2018  9/4/2018    FALSE

当我使用完全相同的公式,但将表引用切换为包含相同日期的单元格引用时,该公式有效。这是更新后的公式:

{=AND(INDEX('SLA Holidays'!$A$2:$A$7,MATCH(MIN(ABS('SLA Holidays'!$A$2:$A$7-AC5)),ABS('SLA Holidays'!$A$2:$A$7-AC5),0))>AC5,INDEX('SLA Holidays'!$A$2:$A$7,MATCH(MIN(ABS('SLA Holidays'!$A$2:$A$7-AC5)),ABS('SLA Holidays'!$A$2:$A$7-AC5),0))<AD5)}

有没有办法使这个公式适用于表格中对日期的引用?

【问题讨论】:

  • 欢迎您,@mjpaley10!你试过评估这个公式吗?转到 公式 选项卡,然后在 公式审核 组中,单击 评估公式 以逐步完成计算过程。我相信根本问题与它是一个数组公式有关,而您的公式用@ 引用了开始日期和结束日期。看看这个site,以更好地理解结构化引用。
  • @TotsieMae 我编辑了帖子以添加有关何时评估公式的详细信息。为什么它会正确评估公式的一部分而不是另一部分?
  • 您在 SLA 假期 中的假期顺序是怎样的?你能告诉我们日期吗?
  • @TotsieMae 我找到了错误的根源! 开始日期结束日期 列包含对计算日期的其他列的引用,而不仅仅是实际日期值。当我将其切换为实际日期值时,该公式有效。非常感谢您的帮助!
  • 我在玩弄你的公式,注意到它在所有日期范围的情况下都没有给出正确的答案,即使它工作正常。假设您的假期包括美国独立日 (7/4/18) 和阵亡将士纪念日 (9/3/18) 美国假期,开始日期为 2018 年 7 月 5 日,结束日期为 2018 年 9 月 5 日报告为 FALSE,而 8/31/18 到 9/5/18 报告为 TRUE。这似乎是潜在的隐藏错误。

标签: excel excel-formula excel-2013 excel-tables


【解决方案1】:

开始日期结束日期列包含计算日期的公式,而不仅仅是实际日期值。我更改了我的 Holiday 公式以包含 Value 函数,获取表列引用的值,这解决了错误。

【讨论】:

  • FWIW,下面的公式会告诉你有多少假期在日期范围内:{=(12-SUM(ABS(SIGN('SLA Holidays'!$A$2:$A$7-VALUE([@[Start Date]]))+SIGN('SLA Holidays'!$A$2:$A$7-VALUE([@[End Date]])))))/2} 神奇的数字 12 是假期表中行数的两倍。如果你想要的话,我把剩下的事情作为练习留给你。 ;-)
  • 如果您可以添加以检查假期是否在工作日,则奖励积分(如果一周中有 1 个假期,则为 1,如果是周末,则为 0)
  • 嘿。是的,不,谢谢。如果它在我的盘子里,我会以WEEKDAY($A$2:$A$7,2)&lt;6 之类的东西为起点。但是,如果多个假期恰好落在日期范围内,就会出现困难。祝你好运!
  • 你知道...我想我有问题。我简直无法抗拒。下面为您提供开始日期结束日期范围内的工作日假期总数,以获取'SLA Holidays'中的假期列表!$A$2:$ A$7 {=SUMPRODUCT(1-ABS(SIGN('SLA Holidays'!$A$2:$A$7-VALUE([@[Start Date]]))+SIGN('SLA Holidays'!$A$2:$A$7-VALUE([@[End Date]])))/2, -- (WEEKDAY('SLA Holidays'!$A$2:$A$7,2)&lt;6))} 该公式现在不再关心表格的大小。事实上,我认为可以用命名范围替换假期范围。
  • 这是使用命名范围的公式,并针对假期在开始日期或结束日期发生的问题进行了更正。 {=SUMPRODUCT(ROUND(1-ABS(SIGN(CompHolidays-VALUE([@[Start Date]]))+SIGN(CompHolidays-VALUE([@[End Date]])))/2,0), -- (WEEKDAY(CompHolidays,2)&lt;6))} ...好吧,说真的...现在停下来。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-24
  • 1970-01-01
  • 2010-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多