Excel 的反向查找中的多重响应
Multiple Responses in Excel's Reverse Lookup
我正在尝试在他们向我提供可用时间后制定可用工作人员的时间表。我想要一个列表,其中包含所有说他们可以在特定日期工作的人。
理想情况下,我会创建如下所示的某种列表:
实际上,我正在尝试为我的游泳队安排志愿者,而不是员工,但想法是一样的。他们填写的表格也可能有空白点(未在上面的数据 table 中显示,但可能存在)并且第一列中的日期也将出现乱序。我可以手动修复这两个问题,但如果有一个不需要我填写空白或对日期进行排序的解决方案,那将是理想的。我在 Win10 PC 上使用 Excel 2019。
从 I2 开始,您将拥有
=IFERROR(INDEX($B:$G,AGGREGATE(15,6,COLUMN($B:$G)
/(INDEX($B:$G,MATCH(I,$A:$A,0),0)="yes"),ROWS(:1))-COLUMN($A:$A)),"")
所以你在 B2:G7 中找到正确的行,方法是对 A 列中的日期进行匹配,然后找到第一、第二、第三...列中有一个 Yes,最后从第一行获取匹配的名称。
您可以通过使用评估公式单步执行公式来查看发生了什么:
(1) 通过 index/match
在 B2:G7 中找到正确的行
它正在将日期(存储为数字,43466)与 A 列中的日期列表进行匹配。匹配位置为 1,这给出了行,Index 函数中的列参数为 0,因此您得到整行。
(2) 找出哪些单元格包含'yes'
数组中包含 yes 的值将被替换为 true,不包含的值将被设置为 false。
(3) 做除法
这是整件事的症结所在。聚合要做的是忽略#div/0 条目(因为我们使用了选项 6)并计算出对应于 'yes' 的最低(最小)列,即 2。它是最低的因为 rows($1:1) 刚好等于 1 所以你得到 'first smallest'.
(4) 调整列,使其相对于 B2:G7 的第一列。您可以只减去 1,但我正在尝试这样做,以便在您在范围左侧插入一列时它仍然有效。
5) 然后剩下的就是索引到 B1:G1
中的名称列表
与阿尔伯特结束。
随着公式的下拉,行 ($1:1) 变为行 ($1:2) 等,所以您得到第二小的列,其中有一个是,所以您得到第二个名称。最终,当没有更多匹配的名称时,它会出错,因此 IFERROR 开始发挥作用,您会得到一个空白单元格。
我正在尝试在他们向我提供可用时间后制定可用工作人员的时间表。我想要一个列表,其中包含所有说他们可以在特定日期工作的人。
理想情况下,我会创建如下所示的某种列表:
实际上,我正在尝试为我的游泳队安排志愿者,而不是员工,但想法是一样的。他们填写的表格也可能有空白点(未在上面的数据 table 中显示,但可能存在)并且第一列中的日期也将出现乱序。我可以手动修复这两个问题,但如果有一个不需要我填写空白或对日期进行排序的解决方案,那将是理想的。我在 Win10 PC 上使用 Excel 2019。
从 I2 开始,您将拥有
=IFERROR(INDEX($B:$G,AGGREGATE(15,6,COLUMN($B:$G)
/(INDEX($B:$G,MATCH(I,$A:$A,0),0)="yes"),ROWS(:1))-COLUMN($A:$A)),"")
所以你在 B2:G7 中找到正确的行,方法是对 A 列中的日期进行匹配,然后找到第一、第二、第三...列中有一个 Yes,最后从第一行获取匹配的名称。
您可以通过使用评估公式单步执行公式来查看发生了什么:
(1) 通过 index/match
在 B2:G7 中找到正确的行它正在将日期(存储为数字,43466)与 A 列中的日期列表进行匹配。匹配位置为 1,这给出了行,Index 函数中的列参数为 0,因此您得到整行。
(2) 找出哪些单元格包含'yes'
数组中包含 yes 的值将被替换为 true,不包含的值将被设置为 false。
(3) 做除法
这是整件事的症结所在。聚合要做的是忽略#div/0 条目(因为我们使用了选项 6)并计算出对应于 'yes' 的最低(最小)列,即 2。它是最低的因为 rows($1:1) 刚好等于 1 所以你得到 'first smallest'.
(4) 调整列,使其相对于 B2:G7 的第一列。您可以只减去 1,但我正在尝试这样做,以便在您在范围左侧插入一列时它仍然有效。
5) 然后剩下的就是索引到 B1:G1
中的名称列表与阿尔伯特结束。
随着公式的下拉,行 ($1:1) 变为行 ($1:2) 等,所以您得到第二小的列,其中有一个是,所以您得到第二个名称。最终,当没有更多匹配的名称时,它会出错,因此 IFERROR 开始发挥作用,您会得到一个空白单元格。