经常用UNIQUE去重、FILTER筛选函数的朋友,大概率都遇到过一个头疼问题:
动态数组公式运算后,想直接统计有效结果个数,要么报错、要么会把空值、无效值统计进去,自带的COUNT、COUNTA函数根本适配不了嵌套数组场景!
今天给大家分享一个万能适配的VBA自定义函数CountResult,专门解决动态数组结果统计难题,完美兼容UNIQUE、FILTER等所有新版数组公式,简单一行代码,搞定所有非空数据统计,办公效率直接翻倍!
一、函数核心功能详解
万能嵌套:可直接嵌套 UNIQUE、FILTER、TEXTSPLIT 等所有动态数组公式;
双场景适配:同时支持【单元格区域】和【内存动态数组】两种统计对象;
精准去空:自动过滤所有空值、无效空白结果,只统计有效数据;
极简调用:语法简单,无需复杂设置,和原生函数用法完全一致。
Excel/WPS原生的COUNTA、COUNT函数,针对单元格区域统计很稳定,但面对内存动态数组(UNIQUE去重结果、FILTER筛选结果、数组运算结果)时,存在两大致命问题:
1. 无法直接嵌套动态数组公式,直接套用会出现计算错误、结果为空;
2. 无法精准过滤空值、无效结果,统计数据存在偏差。
1. 函数语法
=CountResult(需要统计的区域/数组公式)
2. 参数说明
Arr:必填参数,可以是普通单元格区域(如A:A、B2:B100),也可以是任意动态数组公式(UNIQUE、FILTER等)。
给大家整理了日常办公最常用的3个场景,覆盖去重统计、条件筛选统计、常规区域统计,直接复制公式即可使用!
案例1:统计单列不重复数据总数(嵌套UNIQUE)
场景:统计B列所有不重复内容的数量,自动忽略空白单元格
=CountResult(UNIQUE(B:B))
效果:UNIQUE先完成单列数据去重,CountResult自动统计去重后的有效非空数据个数,完美解决原生函数统计空值、重复计数问题。
案例2:统计满足条件的筛选数据总数(嵌套FILTER)
场景:统计C列数值大于0的对应A列有效数据数量(条件筛选统计)
=CountResult(FILTER(A:A,C:C>0))
效果:FILTER筛选出符合条件的数据,CountResult精准剔除筛选后的空白无效值,只统计真实有效结果。
案例3:常规单元格区域非空统计
场景:基础用法,统计A2:A100区域内所有非空单元格数量
效果:完全替代COUNTA函数,兼容性更强,后续替换为数组公式无需修改函数结构。
Function CountResult(Arr As Variant) As Long ' 统计动态数组返回的非空结果个数,可直接嵌套任意动态数组公式 If IsObject(Arr) Then If TypeOf Arr Is Range Then CountResult = Application.CountA(Arr) Exit Function End If End If CountResult = Application.CountA(Arr)End Function
- 打开 Excel,按
Alt+F11 打开 VBA 编辑器;