夜雨聆风学习资料网

ARTICLE · 1003120

Excel中如何快速找出两列的差异值?两个函数教会你,1秒搞定

Excel中如何快速找出两列的差异值?两个函数教会你,1秒搞定
工作中,有时需要快速找出两列数据的差异,如果一个一个比对会很慢,今天用UNIQUE函数、TOCOL函数实现动态找差异,学会了你也可以

一、 函数写法

=UNIQUE(TOCOL(B4:D100),0,1)

:提取 B4:D100 区域内所有只出现过一次的姓名(即在整个三列名单中不重复的姓名),并以一列的形式输出。

二、函数拆解(从内到外)

1. TOCOL(B4:D100)

功能:将指定的二维区域(多行多列)转换为一列(纵向数组)。

语法:TOCOL(array, [ignore], [scan_by_col])

array:要转换的区域,此处为 B4:D100。

ignore:可选,指定是否忽略空值或错误。默认 0 表示不忽略任何值(空单元格也会保留)。

scan_by_col:可选,FALSE(默认)表示按行扫描(先从上到下读完第1列,再读第2列……);TRUE 表示按列扫描。

执行结果:

TOCOL(B4:D100) 会将 B4:D100 中 所有单元格(包括空单元格)按 行优先 顺序合并成一个 一维纵向数组

例如,前几个元素依次为:

空单元格也会被纳入数组,成为空字符串 ""。

2. UNIQUE( 上一步结果, 0, 1 )

功能:从数组中提取唯一值,并可根据参数控制是否只保留出现一次的值。

语法:UNIQUE(array, [by_col], [exactly_once])

array:要处理的数组,这里就是 TOCOL 返回的一列。

by_col:0(或 FALSE)表示按行比较(因为是一列,所以行/列无差别)。

exactly_once:1(或 TRUE)表示只返回在数组中恰好出现一次的元素。

执行过程:

首先,UNIQUE 会统计上一步数组(291个元素)中每个不同值出现的次数。

然后,筛选出出现次数 = 1 的值。

最后,将这些值按它们在数组中首次出现的顺序排列,输出为一列。

三、结合你的数据推演结果

从截图可见,三列姓名存在大量重复(如“王浩”同时出现在 B4、C4、B5、C7……等),而有些姓名只出现在某一列

所以,公式最终会返回那些只在三个名单列中出现一次的姓名,大概率就是那些只属于“未签到名单”(D列)且未在其他列出现的少数人,以及可能个别在“应签到”或“已签到”中独有的。

四、关键注意事项

⚠️ 空值处理

TOCOL 默认不忽略空单元格,所以数组中包含大量空字符串 ""。

空字符串在整个区域中出现次数远大于1(因为区域很大但数据只填到约22行),所以 UNIQUE 的 exactly_once=1 会自动排除空值(因为空值出现多次),结果中不会出现空白行。

但如果区域中空值恰好只出现一次(几乎不可能),则可能会被输出。通常建议显式忽略空值以提高性能,写作:

=UNIQUE(TOCOL(B4:D100, 1), 0, 1)

其中 1 表示忽略空单元格。

⚠️ 动态溢出

公式只需写在 G4 一个单元格,结果会自动“溢出”到下方若干行(行数等于符合条件的姓名个数)。

如果下方已有数据,会报 #SPILL! 错误,需先清空。

五、总结一句话

这个公式的作用是:把 B、C、D 三列的所有名单摊成一列,然后找出其中只出现一次的姓名,通常用于筛选出“仅在某个名单中出现、未在其他名单中重复”的人员(比如只未签到的人,或只应签到的人)。

它的精妙之处在于 两层数组操作:TOCOL 负责降维,UNIQUE 负责筛选,一步到位生成动态报表。

相关学习资料