函数50勇士大战动态增减的操行评分问题

360影视 动漫周边 2025-04-29 04:27 2

摘要:如图,源文件为学生每次违规的记录,要求按如下规则求出最后的记录是第几次有效记录:满三次违纪,学校停宿,停宿后次数归零,再从第1次开始记录,距前次违纪超过21天,减一次,距前次违纪超过42天,减二次。公式如下:

如图,源文件为学生每次违规的记录,要求按如下规则求出最后的记录是第几次有效记录:满三次违纪,学校停宿,停宿后次数归零,再从第1次开始记录,距前次违纪超过21天,减一次,距前次违纪超过42天,减二次。公式如下:

=DROP(REDUCE("",A2:A40,LAMBDA(x,y,LET(

a,FILTER(学生操行!C:C,(学生操行!A:A=y)*(LEFT(学生操行!D:D,4)=LEFT(C1,4))),

注释1,"提取相同违纪类别和学号的时间记录",

rr,REDUCE(10000,a,LAMBDA(m,n,LET(

注释2,"对提取出的日期进行循环",

b,XMATCH(n,a),

注释3,"匹配循环到的日期在整个记录中的位置",

c,INDEX(a,b-1),

注释4,"提取本次循环的上一个日期,方便与当前日期作减法",

d,INDEX(m,ROWS(m)),

注释5,"提取出累积器中最后一行的数据,也就是上一次循环产生的有效次数",

e,IFS((b=1)+(d=3),1,n-c>42,MAX(1,d-2),n-c>21,MAX(1,d-1),TRUE,d+1),

注释6,"条件判断当前循环日期的正确有效次数",

VSTACK(m,r)))),

rrr,VSTACK(x,IFERROR(TAKE(rr,-1),0)),

注释7,"匹处理因为没有数据面产生的错误,方便进行调试",

rrr))),1)

公式的核心为对规则条件的判断逻辑应该怎么写,同时对累积器m的调用也很重要。

(首次记录) || (当前评分为3), 重置为1分,时间差 >42天, 评分-2(最低1分),时间差 >21天, 评分-1,其他情况, 评分+1

参战情况:共有13个函数参与:REDUCE, LAMBDA, LET, FILTER, LEFT, XMATCH, INDEX, ROWS, IFS, MAX, VSTACK, IFERROR, TAKE。

在日常使用逻辑类函数时通常先想到if函数,因为一般都接触的早,而且逻辑和人的思维方式差不多,但多层嵌套太难理解,但ifs函数其实更简洁。

来源:天宇教育

相关推荐