【虐心】统计符合条件的不重复单元格个数 | 您所在的位置:网站首页 › vba统计不重复的个数怎么算的 › 【虐心】统计符合条件的不重复单元格个数 |
昨天有个网友在公众号留言问我~ 统计符合B列条件的A列不重复的计数(多个重复算一个) 我读了两边,领悟了他的问题,就是统计符合条件的另外一列的不重复单元格个数! 这个问题有三个关键点 1、符合条件 2、另外一列 3、不重复 先说说如何解决符合条件的问题! 这个比较简单,Countif函数可以完美搞定~ ![]() =COUNTIF(B1:B9,D2) =COUNTIF(判断的列,判断条件) 好吧~感觉帮助不大,这个函数解决不了问题哇! 这个问题的关键是什么呢?是解决如何统计非重复值的问题! 物料管理小能手(统计不重复数据) 建议在阅读下面的文字前,先点击上面那一行链接,先看看那篇文章的第一部分~ 上面的文章介绍了两种统计非重复值的思路,我们接下来分享其中的一种! ![]() 我们如何来统计A列的非重复单元格个数呢? ![]() C列使用的是match函数(找什么,在哪里找,0) 返回第一个参数在第二个参数中首次出现的位数 当A列中数据重复的时候,返回的值是相同的~ D列使用的是Row函数(单元格) 返回单元格所在的行数 由1到9 返回对应的值! ![]() 如果A列中的值第一次出现的时候则C列与D列值相等,反之不等 所以我们统计C列与D列相等的单元格个数就可以知道A列的非重复值数量 ![]() 公式:{=SUM(--(MATCH(A1:A9,A1:A9,0)=ROW(A1:A9)))} 公式大括号括起来,证明编辑函数后是Ctrl+Shift+Enter键结束的,大括号是自动生成的,不是手动输入的哦! N1:MATCH(A1:A9,A1:A9,0) 返回值:{1;1;3;4;5;6;7;7;9} 返回A列中在A列第一次出现的位数 N2:ROW(A1:A9) 返回值:{1;2;3;4;5;6;7;8;9} 返回A列每个单元格的行数 N3:=连接两个函数 {TRUE;FALSE;TRUE;TRUE;TRUE;TRUE;TRUE;FALSE;TRUE} 如果相等为True反之为Flase N4:-- {1;0;1;1;1;1;1;0;1} 两个负号实现的效果就是将布尔值转化为0、1 N5:sum 7 将1进行汇总求和 好啦!今天就这样啦~ 原问题是解决一列符合某个条件另外一列的非重复值! ![]() 我们简化一下,改为B列等于山东的,A列非重复值! 那我们思考一下,现在变成B列需要判断,求A列非重复值! 那我们先创建一个辅助列,C列等于A与B列连接在一起! 然后创建个辅助列D,用A列与文本“山东”连接在一起 ![]() 假如我们用D列的每个值求在C列中出现的位置会怎样? ![]() 发现如果B列复合山东这个条件的有返回值,反之返回#N/A 那我们优化一下函数,如果没有查到,我们让他返回0 ![]() 外面嵌套一个iferror函数即可,这样如果没有就返回0! 此时如果拿这个函数和Row函数对比,相等的就计数。 是否和刚刚的某一列求不重复个数值就一样了? ![]() {=SUM(--(IFERROR(MATCH(D1:D9,C1:C9,0),0)=ROW(A1:A9)))} 但是我们使用了C列、D列两个辅助列 C列是怎么来的?是A列&B列 D列呢? 是A列&"山东" 所以我们将C列、D列替换一下 ![]() 最终版公式! {=SUM(--(IFERROR(MATCH(A1:A9&"山东",A1:A9&B1:B9,0),0)=ROW(A1:A9)))} 欢迎观看这个艺术品~ 如果你理解了某个列的非重复值统计逻辑! 加上判断其实就是将两列合并在一起,两列当做一列进行判断~ 就酱~ |
CopyRight 2018-2019 实验室设备网 版权所有 |