将一个列表中的项目与第二个列表中的相应项目进行比较
我已经被问及在工作中一个快速的方法来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起可用)的使用使VLOOKUP
function变得轻而易举。 如果第一个失败,您可以简单地将控制权交给第二个版本的函数。 当然,为了解决所有可能性,这些仍然需要翻倍,但是不应该有很大的计算负担。
你是否需要额外的条件来确保C列不是D列的重复?
编辑:添加检查重复
在A:B和C:D中检查重复项不应该是一个问题,因为它们可以被添加到现有的AND
function中。这是对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")