45周 考勤整理专题 -1

古哥计划
古哥计划

优秀创作者

45-1 考勤日期标准化 - 题目

📌 知识点总结:考勤日期标准化处理

在处理打卡时间记录时,为实现高效的数据整理与分析,需先对原始数据中的日期信息进行标准化处理。以下是关键操作思路与技术要点:


1. 统一日期格式是考勤数据处理的基础

原始打卡记录中常以文本形式存储日期(如“10-01”、“10-31”),无法直接参与计算。必须将其转换为标准的 Excel 日期格式,以便后续统计、筛选和计算。


2. 从标题栏提取关键时间信息

打卡时间记录工作表中的单元格 B2 包含重要时间信息:

text编辑

统计时间:10-01 ~ 10-31     制表时间:2025-11-01 08:51(UTC+8)

其中:

  • “10-01” 表示起始日(10月1日)

  • “10-31” 表示结束日(10月31日)

  • “2025” 是年份信息

可通过以下方式提取:

  • 使用 MID() 提取月份(第6~7位):MID(B2,6,2) → "10"

  • 使用 REGEXP()TEXTSPLIT() 提取年份(从“制表时间”部分):REGEXP(B2,"\d{4}") → "2025"

💡 提示:该格式为某打卡机后台导出的固定模板,不可更改,因此需通过公式自动解析。

3. 构建连续日期序列

根据统计周期(本例为10月1日至10月31日),生成完整的日期序列:

=SEQUENCE(COLUMNS(C4:.ZZ4), , DATE(2025, @REGEXP(B2, "\d+"), 1))
=TOCOL(DATE(MID(B2,29,4), MID(B2,6,2), REGEXP(C4:AG4, "[0-9]+")))
🔍 解析:
COLUMNS(C4:.ZZ4) 自动判断列宽(共31列),对应31天
DATE(年, 月, 日) 构造具体日期
REGEXP(C4:AG4, "[0-9]+") 提取每列中数字部分作为“日”

4. 文本转日期的多种方法对比

可采用多种方式将文本型日期转换为标准日期:

方法

公式示例

特点

文本拼接 + TEXT

TEXT(2025&"/"&MID(B2,6,2)&"/"&TEXTSPLIT(C4:.ZZ4,CHAR(10)),"YYYY/MM/DD")

需结合 TEXTSPLIT 分割换行符

直接构造 DATE 函数

DATE(年, 月, 日)

最稳定、推荐使用

⚠️ 注意:TEXT 返回的是文本,需用 -- 强制转为数值(即日期):

5. 动态适配不同月份长度

由于每月天数不同(如2月28/29天、10月31天等),应基于实际列数动态生成日期序列:

  • 利用 COLUMNS(C4:.ZZ4) 动态获取日期范围宽度

  • 避免硬编码天数,提高通用性


🧩 实际应用建议

  • 在“日期”工作表的 A2 单元格输入公式,自动生成 2025 年 10 月 1 日 至 31 日 的完整日期序列。

  • 所有公式均依赖于 打卡时间记录!B2 中的时间信息,确保其不被修改。

  • 推荐使用 DATE + REGEXP + TOCOL 组合方案,兼顾准确性与兼容性。


🎯 总结口诀

“提取年月日,构造日期列;
拼接转标准,减负成实数;
动态定宽度,通用才可靠。”

此方法适用于各类打卡系统导出的非结构化时间数据,具有良好的扩展性和自动化能力,是考勤数据分析的重要前置步骤。

45-2 按日期天数重复姓名 - 题目

📌 知识点总结:二维打卡数据 → 一维结构化转换(横向扩展为纵向重复)

在处理考勤类表格时,原始数据常以“人员 × 日期”的二维形式呈现。为了便于后续统计分析(如按天汇总、计算迟到早退、生成报表等),需将该二维表转化为一维长表结构,即每个员工每天的数据单独成行。

以下公式展示了多种实现方式,并提炼出核心思路与技巧。


1. 核心思想:按列重复展开 —— “重复次数”是关键

将二维表转换为一维表的本质是:

对每一行员工信息,根据其对应的日期列数(即统计天数)进行重复复制。

例如:

  • 员工“刘备”有31天打卡记录 → 其序号和姓名需要重复31次

  • 每次重复对应一天的打卡数据

因此,“重复次数” = COLUMNS(C4:AG4),即日期列的数量(本例中为31列)。


2. 方法一:使用 REPTARRAY + SORT 实现快速展开

A2 = SORT(REPTARRAY(打卡时间记录!A5:.B500, COLUMNS(打卡时间记录!C4:.AG500)))
🔍 解析:
REPTARRAY(区域, 次数):将 A5:B500 区域中的每一行重复指定次数(这里是31次)
SORT():用于去除可能因数组顺序导致的乱序问题,确保输出有序

优点:

  • 语法简洁,直观易懂

  • 自动完成行列展开,无需复杂嵌套

⚠️ 注意:

  • 要求 REPTARRAY 是可用函数(WPS/Excel 365 支持)

  • 若不支持,可用其他方法替代


3. 方法二:分列判断 + TOCOL + HSTACK(逐列提取)

A2 = LET(a, 打卡时间记录!C5:.AG500,
        HSTACK(
            TOCOL(IF(a > 0, 打卡时间记录!A5:.A500)),
            TOCOL(IF(a > 0, 打卡时间记录!B5:.B500))
        ))
🔍 解析:
a > 0:判断是否有打卡记录(非空且数值大于0)
IF(a > 0, 序号):仅当有打卡时才返回序号,否则为空
TOCOL(...):将每列结果转为一维列向量
HSTACK(...):合并两个列向量为一个两列表

优点:

  • 不依赖特殊函数,兼容性好

  • 可灵活控制是否包含“没上班”状态

缺点:

  • 需要分别处理“序号”和“姓名”列

  • 处理多列数据时需多次调用 TOCOL,效率较低

  • 无法直接处理“没上班”文本(需额外判断)


4. 方法三:利用 REDUCE + VSTACK 迭代构建(动态堆叠)

A2 = LET(序号姓名, 打卡时间记录!A5:.B500,
         序号, TAKE(序号姓名,,1),
         次数, COUNTA(打卡时间记录!C4:AG4),
         LET(brr, REDUCE("", 序号,
             LAMBDA(X,Y,
                 VSTACK(X,
                     REPTARRAY(INDEX(序号姓名,Y,{1,2}), 次数)
                 )
             )),
         DROP(brr,1)))
🔍 解析:
使用 REDUCE 对每一行员工进行迭代处理
REPTARRAY(INDEX(...), 次数):提取当前行并重复指定次数
VSTACK 将各行结果垂直堆叠
最后 DROP(brr,1) 去除首行空值

优点:

  • 完全基于标准函数,兼容性强

  • 可扩展性强,适合复杂逻辑

  • 易于调试和理解流程


5. 方法四:使用 MAKEARRAY 构造索引矩阵(数学建模法)

A2 = LET(序号姓名, 打卡时间记录!A5:.B500,
         序号行数, ROWS(TAKE(序号姓名,,1)),
         次数, COUNTA(打卡时间记录!C4:AG4),
         总重复行数, 序号行数 * 次数,
         MAKEARRAY(总重复行数, 2,
             LAMBDA(行, 列,
                 LET(序号行, CEILING(行 / 次数, 1),
                     INDEX(序号姓名, 序号行, 列)
                 )
             )
         ))
🔍 解析:
MAKEARRAY(n,m,...):创建 n×m 的数组
CEILING(行 / 次数, 1):确定当前行属于第几个原始员工
INDEX(...):从原表中取对应值

优点:

  • 数学模型清晰,性能稳定

  • 无循环结构,适合大数据集

  • 可轻松扩展至更多字段


6. 方法五:结合 SEQUENCEIF 实现条件重复

A2 = LET(序号姓名, 打卡时间记录!A5:.B500,
         序号, TAKE(序号姓名,,1),
         次数, COUNTA(打卡时间记录!C4:AG4),
         LET(brr, REDUCE("", 序号,
             LAMBDA(X,Y,
                 LET(当前行, INDEX(序号姓名,Y,{1,2}),
                     VSTACK(X,
                         IF(SEQUENCE(次数), 当前行)
                     )
                 )
             )),
         DROP(brr,1)))
🔍 解析:
SEQUENCE(次数) 生成 1~31 的序列
IF(..., 当前行):将当前行重复31次
通过 REDUCE 逐行累加

优点:

  • 控制粒度细,可加入条件判断(如只保留有效打卡)

  • 易于扩展到带条件的重复逻辑


🔧 核心知识点提炼

编号

知识点

说明

1

重复次数 = 列宽

COLUMNS(C4:AG4) 是决定重复次数的关键参数

2

二维转一维的核心是“重复”

每个员工的信息需重复“天数”次

3

ROWS, COLUMNS, SEQUENCE 是基础

用于生成索引数组,支撑 INDEXMAKEARRAY

4

REPTARRAY 是高效神器

直接实现“重复展开”,简化代码

5

REDUCE + VSTACK 是迭代利器

适用于无法使用 REPTARRAY 的环境

6

MAKEARRAY 是数学建模首选

通过索引映射构建新表,性能最优

7

TOCOL + HSTACK 适合分列处理

但需注意单列处理的局限性


🎯 实际应用建议

  1. 优先推荐使用 REPTARRAY 方法(若支持)

简洁高效,适合日常使用。

  1. 若需兼容旧版 Excel 或 WPS,推荐使用 MAKEARRAYREDUCE 方法

更稳定、可控。

  1. 预留足够行数裁剪范围(如1000行)

防止数据溢出或公式失效。

  1. 约束条件明确

  • 按日期重复对应数据

  • 保持序号与姓名一致

  • 预留足够空间(建议 ≥1000行)


🧩 示例效果说明

在新工作表 A2 输入任意上述公式后,结果如下:

共 6 名员工 × 31 天 = 186 行数据,形成可用于后续分析的一维长表。

📚 小结口诀

“重复次数定行数,
一行变多靠展开;
REPTARRAY最省事,
MAKEARRAY更精准;
二维变一维,
数据才好算!”

此系列操作是数据清洗与结构化处理的重要环节,广泛应用于人事考勤、销售日报、项目进度跟踪等领域。掌握这些技巧,能大幅提升工作效率与数据分析能力。

广东省
浏览 21
收藏
点赞
分享
+1
+1
全部评论