表格不规范,表妹两行泪。报销统计本是小事,但是由于报销的科目都写在了同一个单元格中,当统计的妹子需要根据填写的内容拆分出每个人的报销科目时,就悲催了。
还好这是大厂,技术大咖比比皆是,经码农小哥稍一点拨,统计这种奇葩表格也手到擒来。
案例:
某大厂按不同的加班时长,规定依次可以报销晚餐、下班车费和第二天的上班车费,午餐按规定都可以报销。详细规则就不举例了,感兴趣的同学可以搜索一下各大厂的规定,不一而足。
下图 1 是该厂员工某一天的报销科目表,要求按 B 列的描述,分别在 C 至 F 列中需要报销的单元格中打 √。效果如下图 2 所示。
解决方案:
1. 要显示 √ 号,可以通过字体设置,也可以直接复制一个 √,此处我们就直接插入符号用于复制。
有关如何通过设置字体显示 √ 的方式,请参阅 Excel 萌娃作业辅导进阶版 - 防猜答案,全部答完才阅卷。
选中任意空白单元格 --> 选择菜单栏的“插入”-->“符号”-->“符号”
2. 在弹出的对话框中找到“√”号 --> 点击“插入”
接下来在公式中需要用到“√”符号的时候,就可以从这个单元格中复制。
3. 在 C2 单元格中输入以下公式 --> 向下向右拖动复制公式:
=IF(COUNTIF($B2,"*"&INDIRECT(ADDRESS(1,COLUMN(C1),2))&"*"),"√","")
公式释义:
- ADDRESS(1,COLUMN(C1),2):
- address 函数的作用是根据指定行号和列号获得工作表中的某个单元格的地址;
- 语法为 address(行号,列号,引用类型);
- 这里的参数表示:第 1 行;第 COLUMN(C1) 列,即第 3 列;参数 2 表示绝对行号,相对列标;
- 这段公式返回的结果为“C$1”
- INDIRECT(...):引用上述单元格 C$1 的地址,获取该单元格的内容
- COUNTIF($B2,"*"&...&"*"):在上述单元格内容前后加通配符“*”,并用 countif 函数与 B2 单元格模糊匹配,根据匹配与否,会得到一个 1 或 0 的值
- 最后用 if 函数判断,为 1 就打 √,为 0 则留空
4. 辅助单元格中的“√”用完就可以删掉了,以下就是最终结果。
评论 (0)