转换考勤系统中的数据
问题:如下图转换
函数公式解决:
姓名列 =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消除
公式所在单元格数字格式改成时间