两个Excel表格的比较
今天同事问我,有两个Excel表格,格式内容都差不多,但其中一个的条目比另一个多,现在要找出有差别的那些项,问我有啥简便方法。我想了想,好像没有唉,只能手工核对喽,一千多条记录,对起来也蛮累人的。
后来想想,没道理要这么麻烦的,应该有方法可以快速查找,可以前没用过,上网查查吧。一查还真有,就是利用Excel里自带的函数实现,网上那位给出的公式是这样的:
=IF(ISERROR(MATCH(B,Sheet1!B:B,0)),"false",INDIRECT("Sheet1!D"&MATCH(B,Sheet1!B:B,0)))
看了半天也没看懂,他说是看Excel的帮助的,那我们也去看看帮助吧。
原来都是些函数,IF函数的格式是IF(logical_test,[value_if_true], [value_if_false]),相当于IF语句,根据逻辑值再做操作。
ISERROR函数是一个判断函数,格式是ISERROR(value),当value为任意错误值(#N/A、#VALUE!、#REF!、#DIV/0!、#NUM!、#NAME? 或 #NULL!)时,返回值为TRUE,否则为FALSE。
MATCH函数是用来查找具体数值的,格式为MATCH(lookup_value,lookup_array,match_type),也就是要到”lookup_array”指定的范围内去查找”lookup_value”的数值,match_type是查找方式,可以取-1,0或1。如果为0,表示要查找和”lookup_value”相等的值。如果找到,则返回目标值的位置(而非数值本身);如果找不到,返回错误值#N/A。
INDIRECT函数是对单元格的引用,格式是INDIRECT(ref_text,a1),其中ref_text是要引用的单元格位置,比如A1;a1为一逻辑值,指明引用的类型。
这样说很难理解,举些小例子:
①MATCH函数
A B
1 Product Count
2 Bananas 25
3 Oranges 38
4 Apples 40
5 Pears 41
=MATCH(41,B2:B5,0) 返回值为41在B列内的位置:4(注意不是B4)
=MATCH(39,B2:B5,0) 由于没有匹配的值,返回#N/A。
②ISERROR函数
ISERROR(4)=FALSE
ISERROR(#N/A)=TRUE
③INDIRECT函数
A B
1 数据 数据
2 B2 1,333
3 B3 45
4 George 10
5 5 62
=INDIRECT($A$2) 单元格A2中的引用值(即B2的值)1,333
=INDIRECT($A$4) 如果单元格B4有定义名”George”则返回B4的值10
=INDIRECT(“B”&$A$5) 单元格A5的值赋予函数,即返回值为B5的值62
好了,回过头来看看给出的公式,总的是一个IF语句,对条件做一个判断,如果为真,则输出”false”;如果为假,则输出引用的单元格的内容。而这个判断语句就是要对两个sheet做比较,找出不同点。如果在另一个表格内找到了相同内容,返回值是一个数值,这时ISERROR函数会返回FALSE值,IF语句即执行INDIRECT函数,填写相关的单元格内容;如果在另一个表格内未找到相同内容,则返回值是#N/A,这时ISERROR函数会返回TRUE,IF语句即输出”false”。
作者原来的用途是要查找两个表格的相同点,然后把相同部分的内容贴到另一张表格内,而我同事只要找出不同点,所以我也就偷懒啦,只取一部分,即:
=ISERROR(MATCH(B,sheet1!B:B,0))
这样只做比较,返回TRUE或FALSE值,然后再排一下序,就可以找到不同的那些项啦^_^
注意函数里的参数,”B”代表单元格的位置,如果你是在B1单元格里填写该函数,这里就是B1;”sheet1”是同一个Excel表格里另一个sheet的名称,如果是不同的Excel表格,格式为[table]sheet1;B:B表示整个B列。当然,最方便的方法就是用鼠标点,会自动生成这些格式的。
像我今天用的最终公式就是这个:
=ISERROR(MATCH(C1,数据1513!H:H,0))