Theo使用Excel工作表来跟踪其公司中的预订。数据仅包含三列。第一个是人名,第二个是预订的第一周号(1-52),第三个是预订的最后一周号。

人们可以保留多个星期(即,开始的周为15,结束的周为19)。 Theo需要一种输入周号的方法,然后使用公式确定与该周号关联的名称(A列)。数据不会以任何特定顺序排序,并且公司不会允许Theo使用宏来获取结果(它必须是一个公式)。

Theo的情况听起来很简单,但是在设计解决方案时充满了陷阱。查看潜在数据(如下图所示)可快速说明为什么会出现这种情况。 (请参见图1。)

image

图1. Theo问题的潜在数据。

请注意,数据(如Theo所说)不是按任何特定顺序排列的。

同样要注意的是,有些星期没有保留(例如第5或6周),有些星期有多个人(例如第11或16周),还有有人保留的周,但有一周该数字未显示在B或C列中(例如第12周或第17周)。

在开始研究潜在的解决方案之前,让我们假设您要了解的一周是单元格E1。您应该将此范围命名为“查询”。此外,将包含人员姓名(在此示例中,单元格A2:A10)的范围命名为ResNames,将起始周(B2:B10)命名为StartWeeks,将结束周(C2:C10)命名为EndWeeks。最后,为整个表(A2:C10)定义一个名称,例如MyData。这种命名虽然不是绝对必要的,但会使理解公式变得更加容易。

一种可能的解决方案是添加通常称为“帮助列”的内容。将以下内容添加到单元格D2:

=IF(AND(Query>=B2,Query<=C2),"RESERVED","")

向下复制公式,以获取与表中名称相同数量的单元格。 (例如,将其向下复制到单元格D10中。)将星期几放在单元格E1中时,任何涉及该星期几的预订的右侧都会出现“ RESERVED”字样。也很容易看出该周是否保留了多个人,或者该周没有保留任何人。您甚至可以应用自动过滤器,然后选择仅在D列中显示单词为“ RESERVED”的记录。

如果需要,您可以放弃帮助器列,并考虑使用条件格式来显示谁保留了期望的一周。

只需在A列中选择名称,然后添加使用以下公式的条件格式设置规则:

=AND(Query>=B2,Query<=C2)

ExcelTips的其他问题中已经详细介绍了如何输入条件格式设置规则。)设置规则,以使其更改应用于单元格的底纹(图案),您将很容易就能看到哪些保留项适用于您感兴趣的一周。

另一种方法是使用数组公式。选择比您期望的重叠保留数量更多的单元格,然后通过按Ctrl + Shift + Enter在这些单元格中输入以下内容:

=IFERROR(INDEX(ResNames,LARGE((StartWeeks<=Query)(EndWeeks>=Query)(ROW(ResNames)),ROW()-1)-1),"")

在选择单元格数量时,您希望该数组公式占据,例如,查看第11周可能保留的人数。在本技巧所示的示例中,该人数为2。选择比该数目更多的单元格,然后将数组公式放入这些单元格中。

如果您希望同一周可能有20个人预订,那么您将希望选择更多的单元格,例如20或30。只需选择这些单元格,将公式放在“公式”栏中,然后按Ctrl + Shift + Enter。

最后,您确实应该考虑修改数据的布局方式。

您可以创建一个工作表,该工作表在A列中有星期编号(1到52或53),然后在B列中放置姓名。如果某人被保留两周,则其姓名将在B栏中出现两次,一次在每个他们保留了两个星期。

使用这种格式的数据,您可以轻松地扫描数据,以查看哪些星期可用,哪些星期使用以及谁使用。

如果要进行某种查找,可以很容易地使用基于星期数的VLOOKUP函数,因为它是数据的第一列(按排序顺序)。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(11078)适用于Microsoft Excel 2007、2010、2013、2016、2019和Office 365中的Excel。您可以在此处为Excel的较早菜单界面找到此技巧的版本:

链接:/ excel-Determining_a_Name_for_a_Week_Number [确定星期编号的名称]。