
概括
要统计唯一日期(例如“交易日”),可以使用UNIQUE 函数和COUNT 函数,或者使用基于COUNTIF 函数的公式。在所示示例中,单元格 G8 中的公式为:
=COUNT(UNIQUE(date))
其中date是命名范围B5:B16。
通用公式
=COUNT(UNIQUE(date))
解释
传统上,使用 Excel 公式统计唯一项数量一直是个棘手的问题,因为之前没有专门的 UNIQUE 函数。然而,随着Excel 365 添加了动态数组以及包括 UNIQUE 在内的几个新函数,这种情况发生了改变。
注意:在旧版本的 Excel 中,您可以使用 COUNTIF 函数或 FREQUENCY 函数来统计唯一项目,如下所述。
在所示示例中,表格中的每一行代表一笔股票交易。某些日期可能会发生多笔交易。目标是统计交易日——即发生过交易的不同日期的数量。单元格 G8 中的公式为:
=COUNT(UNIQUE(date))
从内到外,UNIQUE 函数用于从指定的日期范围中提取唯一日期列表:
UNIQUE(date) // extract unique values
结果是一个包含 5 个数字的数组,如下所示:
{44105;44109;44111;44113;44116}
每个数字代表一个 Excel 日期,没有日期格式。这 5 个日期分别是 2020 年 10 月 1 日、2020 年 10 月 5 日、2020 年 10 月 7 日、2020 年 10 月 9 日和 2020 年 10 月 12 日。
该数组直接传递给COUNT 函数:
=COUNT({44105;44109;44111;44113;44116}) // returns 5
最终结果返回数值个数,即 5。
注意:COUNT 函数统计数值,而COUNTA 函数统计数值和文本值。根据具体情况,可以使用其中一个函数。在本例中,由于日期是数值型的,因此我们使用 COUNT 函数。
使用 COUNTIF 函数
在旧版本的 Excel 中,您可以使用COUNTIF 函数来统计唯一日期,公式如下:
=SUMPRODUCT(1/COUNTIF(date,date))
从内到外,COUNTIF 函数返回一个数组,其中包含列表中每个日期的计数:
COUNTIF(date,date) // returns {2;2;3;3;3;2;2;2;2;3;3;3}
至此,我们已有:
=SUMPRODUCT(1/{2;2;3;3;3;2;2;2;2;3;3;3})
将 1 除以该数组后,我们得到一个包含小数的数组:
{0.5;0.5;0.333333333333333;0.333333333333333;0.333333333333333;0.5;0.5;0.5;0.5;0.333333333333333;0.333333333333333;0.333333333333333}
该数组直接传递给SUMPRODUCT 函数。SUMPRODUCT 函数随后对数组中的元素求和,并返回总和 5。
频率
如果您处理的是大型数据集,上述 COUNTIF 公式可能会出现性能问题。在这种情况下,您可以改用基于 FREQUENCY 函数的数组公式:
{=SUM(--(FREQUENCY(date,date)>0))}
注意:这是一个数组公式,必须使用 Ctrl + Shift + Enter 组合键输入,Excel 365 除外。
这个公式的计算速度比上面的 COUNTIF 公式更快,但它只适用于数值型数据。










