转换考勤系统中的数据

发布时间 2023-11-26 17:21:09作者: 熬肥妖

问题:如下图转换

函数公式解决:

姓名列	=INDIRECT("原始考勤!k"&INT(ROW(A31)/31)*2+3)
日期列	=MOD(ROW(A31),31)+1
打卡时间列	=IFERROR(--MID(INDIRECT("原始考勤!r"&INT(ROW(A31)/31)*2+4&"c"&MOD(ROW(A31),31)+1,),COLUMN(A1)*5-4,5),"")

姓名列思路:

每个名字重复31次,使用Int(Row(A31)/31)

数据源在5、7、9……行,Int(...)*2+3

用Indirect间接引用

日期列思路:

循环序列数套路

时间列思路:

间接引用行与姓名列思路一致,数据源所在行为6、8、10……行,Int(...)*2+4

间接引用列是循环序列数套路

使用r1c1样式的间接引用

Mid部分将数据按5个字符进行分隔

Mid函数的结果为文本,加双负号转成数值

空文本加双负号产生的错误值由Iferror消除

公式所在单元格数字格式改成时间