网站首页 > 技术文章 正文
如图,源数据有两张表,sheet0记录着学生的每天每次就餐消费记录,学生登记表记录着大部分学生的和餐饮相关信息的情况,但不并全面。要求筛选出每天每餐中没有消费的人员以及消费了但不在学生登记表中的人员并标记上未登记。公式如下:
=LET(
a,Sheet0!H2:H99999&","&Sheet0!G2:G99999&","&Sheet0!F2:F99999,
注释1,"#以逗号为分隔将消费记录表中的班级、姓名、编号连接起来,确保不会对同班、同名学生进行误操作",
b,学生登记!D:D&","&学生登记!E:E&","&学生登记!A:A,
注释2,"以逗号为分隔将学生登记表中的班级、姓名、编号连接起来,确保不会对同班、同名学生进行误操作",
c,FILTER(a,ISERROR(XMATCH(a,b))),
注释3,"#筛选出有过消费记录但没有登记的学生的名单",
d,IFS(MOD(Sheet0!R2:R99999,1)<0.4,"1早饭",MOD(Sheet0!R2:R99999,1)<0.7,"2午饭",1,"3晚饭"),
注释4,"根据打卡时间区分出早中晚餐并添加1、2、3数字,确保按早中晚的顺序进行排列",
e,TEXT(INT(Sheet0!R2:R99999),"mm/dd/yy"),
注释5,"将日期列数据取整,得到精确到日的数据,这样可以根据日期进行分类",
rr,PIVOTBY(Sheet0!H2:H99999,HSTACK(e,d),a,LAMBDA(x,TEXTJOIN(",",1,VSTACK(FILTER(TEXTBEFORE(TEXTAFTER(x,","),",")&"(未登记)",ISNUMBER(XMATCH(x,c)),""),FILTER(学生登记!E:E,ISERROR(XMATCH(b,x))*(学生登记!D:D=TEXTBEFORE(TAKE(x,1),",")),"")))),0,0,,0),
注释6,"将数据进行透视汇总,行值为班级名称,列值第一为日期,第二为早中晚三餐,计算对象为班级日期编号组成列。计算方法为寻找两个数据:1、没有出现在登记表中的学生姓名,2、出现的登记表中但当餐没有消费的学生姓名",
rr)
公共思路:利用piovtby公式统计结果,但用到了两级的列,同时用到了自定义的计算函数。这需要对pivotby函数的聚合有深入的了解,聚合就是将a这个变量里所有的数据按班级、日期、三餐分成一堆一堆。计算就是用一个统一的思路对每一堆函数都进行相同的数据操作。这样你就能理解TEXTBEFORE(TEXTAFTER(x,","),",")、TEXTBEFORE(TAKE(x,1),",")这两个公式的含义:X就是聚合在一起的相同班级、日期、三餐的一个名单,名单的形式是:**班,张**,213***。第一个公式是提取出里面的姓名,第二个公式是提取出里面的班级。
50勇士参战情况:一共有let、filter、iserror、xmatch、ifs、mod、text、int、pivotby、hstack、lambda、vstack、textbefore、textafter、isnumber12个函数参战。但是还有iserror,textbefore,textafter、take四个不在其中的函数,能否实现替代呢,公式进行如下修改:
=LET(
a,Sheet0!H2:H99999&","&Sheet0!G2:G99999&","&Sheet0!F2:F99999,
b,学生登记!D:D&","&学生登记!E:E&","&学生登记!A:A,
c,FILTER(a,1*ISNUMBER(XMATCH(a,b))=0),
注释3,"iserror函数用isnumber函数替代,xmatch函数返回数值,isnumber将非数字返回0",
d,IFS(MOD(Sheet0!R2:R99999,1)<0.4,"1早饭",MOD(Sheet0!R2:R99999,1)<0.7,"2午饭",1,"3晚饭"),
e,TEXT(INT(Sheet0!R2:R99999),"mm/dd/yy"),
rr,PIVOTBY(Sheet0!H2:H99999,HSTACK(e,d),a,LAMBDA(x,TEXTJOIN(",",1,VSTACK(FILTER(REGEXP(x,",\K([^,]+)(?=,)")&"(未登记)",ISNUMBER(XMATCH(x,c)),""),FILTER(学生登记!E:E,(1*ISNUMBER(XMATCH(b,x))=0)*(学生登记!D:D=@REGEXP(INDEX(x,1),"[^,]+")),"")))),0,0,,0),
注释6,"用regexp函数或者map+textsplit等方式替代textbefore\textafter函数,take函数用index函数替代",
rr)
猜你喜欢
- 2025-07-27 仅需 15 行 Python 代码,即可将视频文件转录为文本稿件
- 2025-07-27 python中必须掌握的20个核心函数—split()详解
- 2025-07-27 数据处理基石:DeepSeeK总结 50 个常用函数指南!(第一集)
- 2025-07-27 Python文本处理进阶:unicodedata模块完全解析
- 2025-07-27 15、职场人必看!VBA文本处理的N个实用技巧大放送(零基础入门)
- 2025-05-03 数字化的意义到底是什么?(数字化意味着什么)
- 2025-05-03 Excel常用技能分享与探讨(5-宏与VBA简介之VBA的函数与过程)
- 2025-05-03 Python:print()函数使用指南(python print的用法)
- 2025-05-03 ArkUI-Text/Span 详解(argparse.argumentparser)
- 2025-05-03 数据库SQL语句学习笔记(6)-使用函数处理数据
- 08-06中等生如何学好初二数学函数篇
- 08-06C#构造函数
- 08-06初中数学:一次函数学习要点和方法
- 08-06仓颉编程语言基础-数据类型—结构类型
- 08-06C++实现委托机制
- 08-06初中VS高中三角函数:从"固定镜头"到"360°全景",数学视野升级
- 08-06一文讲透PLC中Static和Temp变量的区别
- 08-06类三剑客:一招修改所有对象!类方法与静态方法的核心区别!
- 最近发表
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (84)
- 标签用于 (71)
- 主键只能有一个吗 (77)
- c#console.writeline不显示 (95)
- pythoncase语句 (88)
- es6includes (74)
- sqlset (76)
- windowsscripthost (69)
- apt-getinstall-y (100)
- node_modules怎么生成 (87)
- chromepost (71)
- flexdirection (73)
- c++int转char (80)
- mysqlany_value (79)
- static函数和普通函数 (84)
- el-date-picker开始日期早于结束日期 (70)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)