[英]Excel - using INDEX / MATCH to retrieve data from a table based upon multiple matches
我有一个列表名称(在侧面)和日期(在顶部),并且每个名称还有一个区域/区域的附加列,例如:
--Name--------Region-------13/12/19--------14/12/19--------15/12/19--------16/12/19-----------17/12/19
John Smith North IN IN OFF IN OFF
Jane Doe North OFF IN IN IN OFF
Bob Newhart South IN IN OFF OFF OFF
我还有一份每个人完成的工作清单,例如:
--Name--------Region-----Job#---CompletedDate-----JobType
John Smith 22 14/12/19 xx
John Smith 23 14/12/19 yy
John Smith 24 16/12/19 zz
Bob Newhart 25 14/12/19 aa
我知道如何从名称=INDEX(table[Region],MATCH(A2,table[Name],0),0)
中查找区域,我什至想出了如何查找它们是否在基于 2 路 INDEX/MATCH (例如=INDEX(Rota!B:B,MATCH(A2,Rota!A:A,0),MATCH(D2,Rota!1:1,0))
我的问题是当一个人改变区域时,例如约翰史密斯从北移到西:
--Name--------Region-------13/12/19--------14/12/19--------15/12/19--------16/12/19-----------17/12/19
John Smith North IN IN OFF
John Smith West IN OFF
Jane Doe North OFF IN IN IN OFF
Bob Newhart South IN IN OFF OFF OFF
我需要查看他们在工作完成当天所在的区域,以便我可以将每个区域完成的工作与每个人完成的工作数量分开汇总。
我猜测它类似于上面的第二个索引/匹配,但具有某种形式的“如果单元格为空白,则向下移动到同一列中其名称的下一个匹配项”。 这甚至有意义吗?
任何帮助,将不胜感激。
谢谢,艾伦
创建一个结合了人员+区域的帮助列怎么样? 例如,您将有一个(隐藏)列,其中包含John Smith~north
类的值(您需要一个可以正确处理 Jane South 的分隔符)。
此外,我认为您创建的第一个索引函数可以用 VLOOKUP 代替:
=VLOOKUP(A2,rota!$A:$E, 2, FALSE)
// look for value A2
in the first column of A:E on the Rota sheet, then
copy over the value from the 2nd
Don't approximate matches
如果日期在工作表之间完全一致(即,如果每列的日期相同),则可以使用简单的 COLUMN() 对其自身的引用重新创建第二个。
再看一看(更仔细地) - 您正在将 Excel 推向其设计用途的极限。 您可以尝试解决这个问题,例如通过将第二个 INDEX 函数包装在一个 IF 中,以检查索引的结果是否为空,如果是,则将匹配下移。 但这不会解决约翰在三个区域之间移动的例子。
从概念上讲,您正在处理三个表:1. 带有输入或输出值的名称/日期 2. 带有区域值的名称/日期 3. 带有名称值的作业/日期
因为您的 ROTA 表正在合并 1 和 2,所以您将获得一个人的多行,这给第三个表带来了麻烦。 也许在您的设计中您可以拆分这些,这样可以更轻松地使用您使用的功能来获取它们。 虽然这开始看起来很像一个数据库......
但是也许您在 ROTA 表的字段中添加了区域?
--Name----------13/12/19--------14/12/19--------15/12/19--------16/12/19-----------17/12/19
John Smith IN~N IN~N OFF~N IN~S OFF~S
这意味着对于区域,如果您在所有情况下都使用一个附加字符,您可以使用您已经使用过的函数:
=LEFT(INDEX(table[Region],MATCH(A2,table[Name],0),0), LEN(INDEX(table[Region], MATCH(A2,table[Name],0),0)) -2)
=RIGHT(INDEX(table[Region], MATCH(A2,table[Name],0),0), 1)
或者,如果您想使用分隔符(示例中的 ~)
=LEFT(INDEX(table[Region],MATCH(A2,table[Name],0),0), FIND("~", INDEX(table[Region],MATCH(A2,table[Name],0),0) -1)
=RIGHT(INDEX(table[Region],MATCH(A2,table[Name],0),0), FIND("~", INDEX(table[Region],MATCH(A2,table[Name],0),0) -1)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.