如何在Excel中高效处理时间和日期数据?-实用技巧与方法解析
142
2023-10-19
【摘要】 本书摘自《Excel财务日常数据与实例讲解》一书中第3章,第1.6节,作者是韩小良、贾春雷。
3.1.6 把多行变为一行
前面介绍的是把一行变为多行,那么反过来,要把多行变为一行怎么办?这样的问题解 决方法有很多,要依据具体情况选择不同的方法。
1.利用函数处理
在很多情况下,数据处理需要使用函数,针对不同的表格,选择合适的函数创建高效处 理公式。
案例3-10
图3-94所示是一个从指纹打卡机导出的考勤数据,每个人的签到时间和签退时间是分 几行保存的,有的人某天只有一次打卡,有的人一天有多次打卡,很不规范,无法对考勤数 据进行统计分析。
现在的任务是,要把这些数据整理为每个人的签到时间和签退时间保存在同一行的两列 单元格中,如图3-95所示。步 ① 利用分列工具将D 列 和 E 列的文本型日期和文本型时间转换为数值型日期和数 值型时间,这样才能判断大小。
以 D 列日期为例,转换数值型时间的方法如下:选中D 列,选择“数据”→ “分列”命令, 打开“文本分列向导-第1步,共3步”对话框,单击右下角的“完成”按钮即可,如图3-96所示。
② 做辅助列,在F 列 和G 列使用COUNTIFS 函数统计每个人每天的总刷卡次数和是第几次刷卡,公式如下。单元格 F2:
=COUNTIFS($C$2:C20,C2,$D$2:D20,D2)
这里假设每个人每天刷卡总次数不超过20次。取一个较小的区域而不是取整列,是为 了提高计算速度。
单元格 G2:
=COUNTIFS($C$2:C2,C2,SD$2:D2,D2)
③ 做辅助列,在H 列 和I 列取出每个人每天的最早刷卡时间和最晚刷卡时间。如果仅仅刷卡一次,就取这个时间。单元格的公式如下。
单元格 H2:
=IF($G2=1,MIN(OFFSET(SE2,,,$F2,1)),"")
单元格I2:
=IF(SG2=1,MAX(OFFSET($E2,,,SF2,1),"")
④ 做辅助列,根据上面取出的最早刷卡时间和最晚刷卡时间,根据公司制定的标准 判断出是签到时间还是签退时间,是未签到还是未签退。公式如下。
单元格 J2:
=IF(G2=1,IF(H2<14>
单元格 K2:
=IF(G2=1,IF(I2>=14/24,I2,"未签退"),"")
这样,就得到了图3-97所示的结果。
骤 ⑤为了节省计算量,将F 列 至K 列的计算公式选择粘贴成数值。
6 在H 列筛选出所有的空值,然后将这些空值所在行全部删除。
步骤⑦把 E 列 至I 列删除,就得到每个人每天的打卡处理情况。
案例3-11
下面的例子是分行保存的发票号,现在需要将同一天的发票号保存到一个单元格,用逗 号隔开,如图3-98和图3-99所示。
这个问题使用函数是最简单的。
做辅助列,在单元格C2 输入下面的公式,然后往下复制,就得到连在一起的号码。
=IF(COUNTIF($A$2:A2,A2)=1,
TEXTJOIN(",",,
OFFSET(SB$1,MATCH(A2,SAS2:SA$15,0),,COUNTIF(SAS2:$A$15,A2),1)),
"")
然后将辅助列的公式转换为数值,筛选出空值并予以删除,这就得到了需要的结果,如 图3- 100所示。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们 18664393530@aliyun.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~