用 Excel 套路公式计算一个月内最长连续工作天数

deer332025-06-29技术文章28

很多同学会觉得 Excel 单个案例讲解有些碎片化,初学者未必能完全理解和掌握。不少同学都希望有一套完整的图文教学,从最基础的概念开始,一步步由简入繁、从入门到精通,系统化地讲解 Excel 的各个知识点。

现在终于有了,以下专栏,从最基础的操作和概念讲起,用生动、有趣的案例带大家逐一掌握 Excel 的操作技巧、快捷键大全、函数公式、数据透视表、图表、打印技巧等……学完全本,你也能成为 Excel 高手。

解答网友问题:如何计算每个员工某月的最大连续工作天数。


案例:


下图 1 中的空单元格表示这一天是工作日,计算每个员工的最长连续工作天数,效果如下图 2 所示。


解决方案:


这个之前我教过,查找连续出现最多次数的题是有专门套路公式的,大家只需记住了每次往里套条件就行。


1. 在 B33 单元格中输入以下公式 --> 如果是365 版本就直接回车,低版本的话按 Ctrl+Shift+Enter:

=MAX(FREQUENCY(IF(B2:B32="",ROW(B2:B32)),IF(B2:B32<>"",ROW(B2:B32))))


2. 向右拖动,复制公式。


公式释义:

  • 先来讲套路公式什么:=MAX(FREQUENCY(IF(符合条件,相应行号),IF(不符合条件,相应行号)))
  • IF(B2:B32="",ROW(B2:B32)):“符合条件”就是 B2:B32 区域都为空值,后面行号用 row 函数提取就行;
  • IF(B2:B32<>"",ROW(B2:B32)):“不符合条件”就是 B2:B32 区域不为空,后面行号一样;
  • 看完套路公式,再来讲原理:
  • IF(B2:B32="",ROW(B2:B32)):生成一组数组 ,B2:B32 区域内的值若为空就返回该单元格的行号,否则返回 false 值;
  • IF(B2:B32<>"",ROW(B2:B32)):正相反,返回 B2:B32 区域内非空单元格的行号;
  • FREQUENCY(...,...):
    • frequency 函数的语法为 FREQUENCY(要查找的区域, 条件区域),作用是计算第二个参数中的数值在第一个参数中出现的频率;
    • frequency 的结果是模糊匹配,计算出小于等于第二个参数的个数;
    • 现在再来理解套路公式就懂了,计算 B2:B32 中比非空单元格行号小的空单元格数;说白话就是一旦有休假,就统计上一次休假后到该日期前的连续工作天数;
  • MAX(...):最后用 max 函数计算出所有连续天数中最大的那个。