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

我已经被问及在工作中一个快速的方法来validationExcel中的数据列表,但是通过嵌套的IF做一些太复杂的事情,所以我试图通过一个macros来实现。

有关数据的背景位:

我们开办课程,每门课程都有相应的插件。 人们必须select2个课程,这意味着2个相应的附加组件。

在Excel中的每一行中,2个课程在F和G列,相应的插件在H和I列。

问题是H和I列中的数据不一定是“正确的”顺序 – 列F中的课程的附加内容可能在列I中的一行中,列H中的另一个(和与G列的附加组件相同)

第二张表格中列出哪些附加项对于哪些课程是正确的(列A具有课程并且列B具有匹配的附加项)。

什么是最好的/最简单的方法来突出哪些行是正确的,哪些不是?

如果需要,我可以上传一个小的匿名文件样本到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 

如果提供课程附加组件的交叉引用表,则所需的公式完全不可取消。

在这里输入图像说明

E2中的标准公式是,

 =IF(AND(OR(C2=IFERROR(VLOOKUP(A2, $G$2:$H$10, 2, FALSE), IFERROR(VLOOKUP(B2, $G$2:$H$10, 2, FALSE), NA())), D2=IFERROR(VLOOKUP(A2, $G$2:$H$10, 2, FALSE), IFERROR(VLOOKUP(B2, $G$2:$H$10, 2, FALSE), NA()))), OR(C2=IFERROR(VLOOKUP(B2, $G$2:$H$10, 2, FALSE), IFERROR(VLOOKUP(B2, $G$2:$H$10, 2, FALSE), NA())), D2=IFERROR(VLOOKUP(B2, $G$2:$H$10, 2, FALSE), IFERROR(VLOOKUP(B2, $G$2:$H$10, 2, FALSE), NA())))), "Correct", "Error") 

根据需要填写。 IFERROR (自Excel 2007起可用)的使用使VLOOKUPfunction变得轻而易举。 如果第一个失败,您可以简单地将控制权交给第二个版本的函数。 当然,为了解决所有可能性,这些仍然需要翻倍,但是不应该有很大的计算负担。

你是否需要额外的条件来确保C列不是D列的重复?

编辑:添加检查重复

在A:B和C:D中检查重复项不应该是一个问题,因为它们可以被添加到现有的ANDfunction中。这是对A:B和C:D的修改。

 =IF(AND(A2<>B2, C2<>D2, OR(C2=IFERROR(VLOOKUP(A2, $G$2:$H$10, 2, FALSE), IFERROR(VLOOKUP(B2, $G$2:$H$10, 2, FALSE), NA())), D2=IFERROR(VLOOKUP(A2, $G$2:$H$10, 2, FALSE), IFERROR(VLOOKUP(B2, $G$2:$H$10, 2, FALSE), NA()))), OR(C2=IFERROR(VLOOKUP(B2, $G$2:$H$10, 2, FALSE), IFERROR(VLOOKUP(B2, $G$2:$H$10, 2, FALSE), NA())), D2=IFERROR(VLOOKUP(B2, $G$2:$H$10, 2, FALSE), IFERROR(VLOOKUP(B2, $G$2:$H$10, 2, FALSE), NA())))), "Correct", "Error")