将一个列表中的项目与第二个列表中的相应项目进行比较

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")