Exce对处理数据非常友好,但在一些复杂表单中,比如序号多次起始的表格中,如何实现检查序号是否正确?今天我们尝试用最简单的IF函数进行验证。
首先我们尽可能多的考虑所有出现的错误:
1、序号非1增长
2、序号非1起始
我们需要用上Excel里面的函数,首先分析表格,我们做一个最简单的比较。“如果本行序号-上一行序号=1”则“序号正确”。下面书写函数,从第一个需要比较的序号开始写:
Excel函数①
从结果中可以看出,序号错误和序号跳跃、序号交换都能被查出来(根据逻辑,序号重复也能被验证出来),但是出现了以下几个问题:
1.序号1全部不显示;
2.分公司名称不用比较但也被显示出来了;
3.序号非1开始无法验证。
下面首先解决序号1全部不显示的问题,通过我们可以看出来,由于分公司名称列A3不是数值,通过A4-A3=1的方法无法进行数值运算,解决方法是作运算前使用ISNUMBER()函数对A3(即上一行数据)进行判断
总体逻辑为:判断上一行是否为数值→是,则比较大小,否则输出序号1
=IF(ISNUMBER(A3),IF(A4-A3=1,"正确","错误"),1)
现在可以正确筛选出分公司序号第一个人员,我们可以进一步优化,当A3(上一行数据)不是数字的时候,我们进一步判断是否为1,为1则为正确,不为1则为错误(输出:非零开始),解决3.序号非1开始无法验证的问题。同时我们对函数①②中的错误输出进行精准化定位,区分报错情况。Excel函数③:
=IF(ISNUMBER(A3),IF(A4-A3=1,"正确","数据非+1增长"),IF(A4=1,"正确","非零开始"))
到现在为止,我们已经对所有情况进行了核验,只需要对照修改即可完成序号核验,虽然分公司名称列无法计算出现报错,但不影响功能实现,如果有强迫症的话,再嵌套一层判断,A3(上一行)为数值且A4(本行数据)为数值,则进行计算,否则输出“分公司名称栏”。此步不建议,因为代码讲究简洁,嵌套太多层IF函数,不光使代码看着繁琐,同时也耗费更多算力。
=IF(ISNUMBER(A3),IF(ISNUMBER(A4),IF(A4-A3=1,"正确","数据非+1增长"),"分公司名称栏"),IF(A4=1,"正确","非零开始"))