【问题标题】:How to find Curved Grade in Google Sheets?如何在 Google 表格中找到弯曲成绩?
【发布时间】:2019-11-01 02:49:15
【问题描述】:

我正在处理一个文件,其中添加了所有课程的最终成绩,每个学生都有权获得最多 5 个成绩,因为他/她的所有最终成绩都低于 及格成绩。我的问题是:是否可以在 Google 表格中通过 Formula 和/或 Script 找到新的最终成绩并增加成绩。 以下是数据示例

studentName course final final (withCurve) 数学 59 60 物理 58 60 英语 54 54 B 英语 55 55 B物理58 60 B 法语 57 60

注意:假设及格成绩为60,将5分给尽可能多的课程,也就是说给57、58比给一个55好(如果可能)

【问题讨论】:

    标签: arrays if-statement google-sheets google-sheets-formula array-formulas


    【解决方案1】:

    根据要求,及格分数为 60,奖励者仅向特定科目不及格的学生提供 5 加分,这些加分用于弥补及格价值

    所以,公式是:

    =ARRAYFORMULA(IFNA(VLOOKUP(A3:A&B3:B, QUERY(SPLIT(TRANSPOSE(SPLIT(
     QUERY(TRANSPOSE(QUERY(TRANSPOSE("♦"&QUERY(TRANSPOSE(QUERY({
     SORT(FILTER(A3:C, C3:C<60, C3:C>54), 1, 1, 3, 1), 
     SORT(FILTER(ROW(A3:A), C3:C<60, C3:C>54), 1, 0)}, 
     "select max(Col3) where Col1 is not null group by Col4 pivot Col1")), "select Col1", 0)&
     QUERY(TRANSPOSE(QUERY(QUERY({SORT(FILTER(A3:C, C3:C<60, C3:C>54), 1, 1, 3, 1), 
     SORT(FILTER(ROW(A3:A), C3:C<60, C3:C>54), 1, 0)}, 
     "select Col2,max(Col3) where Col1 is not null group by Col4,Col2 pivot Col1"), 
     "offset 1", 0)), "limit 0", 1)&"♠"&
     IFNA(REGEXREPLACE(TO_TEXT(TRANSPOSE(QUERY(QUERY({SORT(FILTER(A3:C, C3:C<60, C3:C>54), 1, 1, 3, 1), 
     SORT(FILTER(ROW(A3:A), C3:C<60, C3:C>54), 1, 0)}, 
     "select max(Col3) where Col1 is not null group by Col4 pivot Col1"), "offset 1", 0))), "^60$", )+IFNA(
     IF(IFERROR(QUERY(1*REGEXREPLACE(TO_TEXT(60-TRANSPOSE(QUERY(QUERY({SORT(FILTER(A3:C, C3:C<60, C3:C>54), 1, 1, 3, 1),
     SORT(FILTER(ROW(A3:A), C3:C<60, C3:C>54), 1, 0)}, 
     "select max(Col3) where Col1 is not null group by Col4 pivot Col1"), "offset 1", 0))), "^60$", ), 
     "select Col1+Col2+Col3+Col4+Col5 label Col1+Col2+Col3+Col4+Col5''"), 6)<=5, 
     REGEXREPLACE(TO_TEXT(60-TRANSPOSE(QUERY(QUERY({SORT(FILTER(A3:C, C3:C<60, C3:C>54), 1, 1, 3, 1), 
     SORT(FILTER(ROW(A3:A), C3:C<60, C3:C>54), 1, 0)}, 
     "select max(Col3) where Col1 is not null group by Col4 pivot Col1"), "offset 1", 0))), "^60$", ),
     IF(IFERROR(QUERY(1*REGEXREPLACE(TO_TEXT(60-TRANSPOSE(QUERY(QUERY({SORT(FILTER(A3:C, C3:C<60, C3:C>54), 1, 1, 3, 1),
     SORT(FILTER(ROW(A3:A), C3:C<60, C3:C>54), 1, 0)}, 
     "select max(Col3) where Col1 is not null group by Col4 pivot Col1"), "offset 1", 0))), "^60$", ), 
     "select Col1+Col2+Col3+Col4 label Col1+Col2+Col3+Col4''"), 6)<=5, 
     REGEXREPLACE(TO_TEXT(60-TRANSPOSE(QUERY(QUERY({SORT(FILTER(A3:C, C3:C<60, C3:C>54), 1, 1, 3, 1), 
     SORT(FILTER(ROW(A3:A), C3:C<60, C3:C>54), 1, 0)}, 
     "select max(Col3) where Col1 is not null group by Col4 pivot Col1"), "offset 1", 0))), "^60$", ), 
     IF(IFERROR(QUERY(1*REGEXREPLACE(TO_TEXT(60-TRANSPOSE(QUERY(QUERY({SORT(FILTER(A3:C, C3:C<60, C3:C>54), 1, 1, 3, 1),
     SORT(FILTER(ROW(A3:A), C3:C<60, C3:C>54), 1, 0)}, 
     "select max(Col3) where Col1 is not null group by Col4 pivot Col1"), "offset 1", 0))), "^60$", ), 
     "select Col1+Col2+Col3 label Col1+Col2+Col3''"), 6)<=5, QUERY(
     REGEXREPLACE(TO_TEXT(60-TRANSPOSE(QUERY(QUERY({SORT(FILTER(A3:C, C3:C<60, C3:C>54), 1, 1, 3, 1),
     SORT(FILTER(ROW(A3:A), C3:C<60, C3:C>54), 1, 0)}, 
     "select max(Col3) where Col1 is not null group by Col4 pivot Col1"), "offset 1", 0))), "^60$", ), 
     "select Col1,Col2,Col3"),
     IF(IFERROR(QUERY(1*REGEXREPLACE(TO_TEXT(60-TRANSPOSE(QUERY(QUERY({SORT(FILTER(A3:C, C3:C<60, C3:C>54), 1, 1, 3, 1),
     SORT(FILTER(ROW(A3:A), C3:C<60, C3:C>54), 1, 0)}, 
     "select max(Col3) where Col1 is not null group by Col4 pivot Col1"), "offset 1", 0))), "^60$", ), 
     "select Col1+Col2 label Col1+Col2''"), 6)<=5, QUERY(
     REGEXREPLACE(TO_TEXT(60-TRANSPOSE(QUERY(QUERY({SORT(FILTER(A3:C, C3:C<60, C3:C>54), 1, 1, 3, 1),
     SORT(FILTER(ROW(A3:A), C3:C<60, C3:C>54), 1, 0)}, 
     "select max(Col3) where Col1 is not null group by Col4 pivot Col1"), "offset 1", 0))), "^60$", ),
     "select Col1,Col2"), 
     IF(IFERROR(QUERY(1*REGEXREPLACE(TO_TEXT(60-TRANSPOSE(QUERY(QUERY({SORT(FILTER(A3:C, C3:C<60, C3:C>54), 1, 1, 3, 1), 
     SORT(FILTER(ROW(A3:A), C3:C<60, C3:C>54), 1, 0)}, 
     "select max(Col3) where Col1 is not null group by Col4 pivot Col1"), "offset 1", 0))), "^60$", ), 
     "select Col1 "),6)<=5, QUERY(
     REGEXREPLACE(TO_TEXT(60-TRANSPOSE(QUERY(QUERY({SORT(FILTER(A3:C, C3:C<60, C3:C>54), 1, 1, 3, 1),
     SORT(FILTER(ROW(A3:A), C3:C<60, C3:C>54), 1, 0)}, 
     "select max(Col3) where Col1 is not null group by Col4 pivot Col1"), "offset 1", 0))), "^60$", ) ,
     "select Col1"), ))))), 0), 0)),,999^99)),,999^99), "♦")), "♠"), "where Col2 !=0"), 2, 0), C3:C))
    

    spreadsheet demo

    【讨论】:

    • 太棒了,你能再帮一件事吗?如何做到这一点:如果一个学生不能通过剩余的弹跳,他/她一定不能收到它。例如,一个学生有 57 和 56,3 要添加到 57 并且由于他可以通过 2,因此,56 必须保持不变。
    【解决方案2】:

    尝试:

    =ARRAYFORMULA(IF((C2:C>56)*(C2:C<60), 60, C2:C))
    


    更新:

    =ARRAYFORMULA(VLOOKUP(A3:A&" "&B3:B, {TRANSPOSE(QUERY(TRANSPOSE(
     ARRAY_CONSTRAIN(SORT({A3:C}, 1, 1, 3, 0),999^99, 2)),,999^99)), IF(
     MMULT(--TRANSPOSE(IF((TRANSPOSE(ROW(A3:A))>=ROW(A3:A))*(A3:A=TRANSPOSE(A3:A)), 
     60-INDEX(SORT({A3:A, IF((C3:C<60)*(C3:C>54), C3:C, 0)}, 1, 1, 2, 0),,2), 0)), 
     ROW(A3:A)^0)<=5, 
     60-INDEX(SORT({A3:A, IF((C3:C<60)*(C3:C>54), C3:C, 0)}, 1, 1, 2, 0),,2)+
     INDEX(SORT({A3:A, IF((C3:C<60)*(C3:C>54), C3:C, 0)}, 1, 1, 2, 0),,2), 
     INDEX(SORT({A3:A, C3:C}, 1, 1, 2, 0),,2))}, 2, 0))
    

    spreadsheet demo

    【讨论】:

    • 谢谢,有一个问题,每个学生最多可以有5个成绩,不是每个55到59之间的成绩都改为60。如何解决这个问题?
    • 你能分享一份你的工作表副本或一些带有数据结构和所需输出示例的模型吗?
    • 请在click HERE to open下方找到包含示例数据的表格
    • 最大值是60吗?
    • 我明白了,那么只有一个问题……这 5 个奖励积分的分配……我可以想到两个选项: 1:将它们平均分配到前 5 个最高值ber person or 2:目标是最大值阈值(例如 100)并尝试最大化最高容量,然后移动到第二高并最大化它,然后是第三等等......那么你想遵循哪个逻辑?跨度>
    猜你喜欢
    • 2018-07-20
    • 2021-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-21
    • 2023-01-19
    • 1970-01-01
    • 2015-12-28
    相关资源
    最近更新 更多