我已经被要求在工作中整理一种快速的方法来验证Excel中的数据列表,但是通过嵌套的IF这样做太复杂了所以我试图做通过宏观。
关于数据的背景知识:
我们开设课程,每门课程都有相应的附加功能。人们必须选择2个课程,这意味着2个相应的附加组件。
在Excel的每一行中,2个课程在F和G列中,相应的附加组件在H和I列中。
轻微的问题是,H和I列中的数据不一定在“正确的”字样中。 order - F列中课程的附加组件可能在一行的第一列中,另一行中的列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
答案 0 :(得分:2)
如果提供了 Courses 和 Add-ons 的交叉引用表,那么所需的公式根本不会令人反感。
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
等函数加倍。如果第一个版本失败,您可以简单地将控制权交给第二个版本的函数。虽然这些仍然需要加倍以考虑所有可能性,但不应该有大的计算负荷。
您是否需要额外条件以确保C列不与D列重复?
编辑:添加重复检查
检查A:B和C:D中的重复项应该不是问题,因为它们可以添加到现有的AND
函数中。这是对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")