将一个列表中的项目与第二个列表中的相应项目进行比较
Comparing items in one list with corresponding items in a second list
我在工作中被要求组合一种快速方法来验证 Excel 中的数据列表,但是通过嵌套 IF 来完成它有点太复杂了,所以我试图通过宏来完成。
数据背景介绍:
我们开设课程,每门课程都有相应的附加课程,他们也必须参加。人们必须选择2门课程,所以这意味着2个相应的附加组件。
在 Excel 的每一行中,2 个课程在 F 和 G 列中,相应的插件在 H 和 I 列中。
小问题是 H 列和 I 列中的数据不一定按 'correct' 顺序排列 - F 列中课程的附加组件可能在第一列的一行中,并且在另一个的 H 列中(与 G 列的附加组件相同)
第二个 table sheet 列出了哪些附加组件适用于哪些课程(A 列有课程,B 列有匹配的附加组件)。
突出显示哪些行正确哪些行不正确的best/easiest方法是什么?
如果需要,我可以将文件的一小部分匿名样本上传到 Dropbox,但数据的快速布局如下:
| 1st Course Choice | 2nd Course Choice | 1st Add-on | 2nd Add-on | Result
---------------------------------------------------------------------------
| Subject 1 | Subject 2 | Add-on 1 | Add-on 2 | Correct
| Subject 2 | Subject 1 | Add-on 1 | Add-on 2 | Correct
| Subject 3 | Subject 9 | Add-on 9 | Add-on 3 | Correct
| Subject 5 | Subject 4 | Add-on 1 | Add-on 2 | Error
| Subject 8 | Subject 2 | Add-on 7 | Add-on 8 | Error
如果 课程 和 [=42 的 cross-reference table,则根本不需要公式 off-putting =] 已提供。
E2中的标准公式是,
=IF(AND(OR(C2=IFERROR(VLOOKUP(A2, $G:$H, 2, FALSE), IFERROR(VLOOKUP(B2, $G:$H, 2, FALSE), NA())), D2=IFERROR(VLOOKUP(A2, $G:$H, 2, FALSE), IFERROR(VLOOKUP(B2, $G:$H, 2, FALSE), NA()))), OR(C2=IFERROR(VLOOKUP(B2, $G:$H, 2, FALSE), IFERROR(VLOOKUP(B2, $G:$H, 2, FALSE), NA())), D2=IFERROR(VLOOKUP(B2, $G:$H, 2, FALSE), IFERROR(VLOOKUP(B2, $G:$H, 2, FALSE), NA())))), "Correct", "Error")
根据需要填写。 IFERROR
(自 Excel 2007 年起可用)的使用使 VLOOKUP
等函数的加倍变得轻而易举。如果第一个版本失败,您可以简单地将控制权移交给该函数的第二个版本。当然这些仍然必须加倍以考虑所有可能性,但不应该有很大的计算量。
您是否需要额外的条件来确保 C 列不是 D 列的重复项?
编辑: 添加重复检查
检查 A:B 和 C:D 中的重复项根本不是问题,因为它们可以添加到现有的 AND
函数中。这是对A:B 和 C:D.
=IF(AND(A2<>B2, C2<>D2, OR(C2=IFERROR(VLOOKUP(A2, $G:$H, 2, FALSE), IFERROR(VLOOKUP(B2, $G:$H, 2, FALSE), NA())), D2=IFERROR(VLOOKUP(A2, $G:$H, 2, FALSE), IFERROR(VLOOKUP(B2, $G:$H, 2, FALSE), NA()))), OR(C2=IFERROR(VLOOKUP(B2, $G:$H, 2, FALSE), IFERROR(VLOOKUP(B2, $G:$H, 2, FALSE), NA())), D2=IFERROR(VLOOKUP(B2, $G:$H, 2, FALSE), IFERROR(VLOOKUP(B2, $G:$H, 2, FALSE), NA())))), "Correct", "Error")
我在工作中被要求组合一种快速方法来验证 Excel 中的数据列表,但是通过嵌套 IF 来完成它有点太复杂了,所以我试图通过宏来完成。
数据背景介绍:
我们开设课程,每门课程都有相应的附加课程,他们也必须参加。人们必须选择2门课程,所以这意味着2个相应的附加组件。
在 Excel 的每一行中,2 个课程在 F 和 G 列中,相应的插件在 H 和 I 列中。
小问题是 H 列和 I 列中的数据不一定按 'correct' 顺序排列 - F 列中课程的附加组件可能在第一列的一行中,并且在另一个的 H 列中(与 G 列的附加组件相同)
第二个 table sheet 列出了哪些附加组件适用于哪些课程(A 列有课程,B 列有匹配的附加组件)。
突出显示哪些行正确哪些行不正确的best/easiest方法是什么?
如果需要,我可以将文件的一小部分匿名样本上传到 Dropbox,但数据的快速布局如下:
| 1st Course Choice | 2nd Course Choice | 1st Add-on | 2nd Add-on | Result
---------------------------------------------------------------------------
| Subject 1 | Subject 2 | Add-on 1 | Add-on 2 | Correct
| Subject 2 | Subject 1 | Add-on 1 | Add-on 2 | Correct
| Subject 3 | Subject 9 | Add-on 9 | Add-on 3 | Correct
| Subject 5 | Subject 4 | Add-on 1 | Add-on 2 | Error
| Subject 8 | Subject 2 | Add-on 7 | Add-on 8 | Error
如果 课程 和 [=42 的 cross-reference table,则根本不需要公式 off-putting =] 已提供。
E2中的标准公式是,
=IF(AND(OR(C2=IFERROR(VLOOKUP(A2, $G:$H, 2, FALSE), IFERROR(VLOOKUP(B2, $G:$H, 2, FALSE), NA())), D2=IFERROR(VLOOKUP(A2, $G:$H, 2, FALSE), IFERROR(VLOOKUP(B2, $G:$H, 2, FALSE), NA()))), OR(C2=IFERROR(VLOOKUP(B2, $G:$H, 2, FALSE), IFERROR(VLOOKUP(B2, $G:$H, 2, FALSE), NA())), D2=IFERROR(VLOOKUP(B2, $G:$H, 2, FALSE), IFERROR(VLOOKUP(B2, $G:$H, 2, FALSE), NA())))), "Correct", "Error")
根据需要填写。 IFERROR
(自 Excel 2007 年起可用)的使用使 VLOOKUP
等函数的加倍变得轻而易举。如果第一个版本失败,您可以简单地将控制权移交给该函数的第二个版本。当然这些仍然必须加倍以考虑所有可能性,但不应该有很大的计算量。
您是否需要额外的条件来确保 C 列不是 D 列的重复项?
编辑: 添加重复检查
检查 A:B 和 C:D 中的重复项根本不是问题,因为它们可以添加到现有的 AND
函数中。这是对A:B 和 C:D.
=IF(AND(A2<>B2, C2<>D2, OR(C2=IFERROR(VLOOKUP(A2, $G:$H, 2, FALSE), IFERROR(VLOOKUP(B2, $G:$H, 2, FALSE), NA())), D2=IFERROR(VLOOKUP(A2, $G:$H, 2, FALSE), IFERROR(VLOOKUP(B2, $G:$H, 2, FALSE), NA()))), OR(C2=IFERROR(VLOOKUP(B2, $G:$H, 2, FALSE), IFERROR(VLOOKUP(B2, $G:$H, 2, FALSE), NA())), D2=IFERROR(VLOOKUP(B2, $G:$H, 2, FALSE), IFERROR(VLOOKUP(B2, $G:$H, 2, FALSE), NA())))), "Correct", "Error")