excel实现打卡相册积分制
我在自己一个学习群里设定了一个打卡相册制度,这篇博客记录一下如何使用 sumif 函数来实现计算打卡相册的积分。这里其实我用的是 wps 表格,但是函数一样,所以我就分类在 excel 里面。
规则说明
群员可以申请建立打卡相册,需要自己下载群文件中的登记表填写相关信息,然后就可以创建群相册,在群相册描述里面写上打卡内容。
相册状态
- 相册状态:正在进行、放弃、失败、归档
- 如果连续三天未打卡,管理员就删除相册,并在登记表内将相册状态设置为“失败”。
- 对于有期限的相册,比如打卡目标是“两周读完《xxx》”,那么在结束日期时,可以将其状态设置为“归档”。相册资源回收(删除或改作他用),避免资源闲置。若持续时间大于等于一百天,则可以选择保留相册。(可以给其他群员作榜样)
- 对于没有期限的相册,比如“每天背单词”,那么在创建时间满三十天后就可以选择“归档”(三十天应该够养成一个小习惯了)
- 相册删除后,相册记录还会保留在登记表里面
积分计算
创建相册不需要积分,但是“放弃”或“失败”每个会扣除 5 积分
一个成员的打卡相册总积分=他所有相册的积分之和
单个相册的积分:
- 若相册状态是“正在进行”,则
积分=持续天数1*正调整参数=正调整参数*(当前日期-创建日期)
- 若相册状态是“归档”,则
积分=正调整参数*持续天数2=正调整参数*(结束日期-创建日期)
,目前参数为 0.5 - 若相册状态是“放弃”或“失败”,则
积分=负调整参数
,也就是扣除积分,目前参数为-5,即扣除 5 积分
- 若相册状态是“正在进行”,则
相册字段
字段 | 描述 |
---|---|
相册 ID | 这个手动赋值为:最大的相册 ID+1 |
申请人昵称 | 可以写真名或者自己的群名片昵称,只要大家能通过这个知道是谁即可 |
相册名称 | 无特别要求,不过最好写明昵称和目的,例如:憧憬少的英语流利说 APP 打卡 |
相册目标描述 | 描述你要通过这个打卡相册达到的目标,例如:每天读口语 10 分钟 |
如何判断目标完成 | 上传到打卡相册的图片应当满足怎样的要求,例如:每天在相册内上传一张可以表明读了 10 分钟的截图 |
相册状态 | 目前用到的状态:正在进行,放弃,失败,归档(仅留表中记录,相册本身删除,若打卡满 100 天可选择保留) |
创建日期 | 用于计算持续天数的字段 |
结束日期 | 归档日期,或有期相册结束日期。 |
持续天数 | 除了正在进行状态,其他状态都停止增加持续天数 |
相册类型 | 目前的类型:无期(未规定期限,满 30 天可以选择归档),有期(规定了完成期限,若期限内完成则归档,未完成则为失败) |
打卡相册积分 | 利用表格的自动填充功能复制上一个相册的公式 |
编写公式
计算相册持续天数
相册持续天数有两种情况,一种是“正在进行”,一种是其他状态,只有“正在进行”的打卡相册会继续计算天数。
也就是说:
- “正在进行”的相册的
持续天数=今天日期-创建日期
- 其他状态相册的
持续天数=结束日期-创建日期
因此需要一个 IF 判断。
IF 函数的语法是:
1 | IF(条件,条件为真时的返回值,条件为假时的返回值) |
公式如下(中文处替换为对应的单元格)
1 | =IF(相册状态="正在进行",TODAY()-创建日期,结束日期-创建日期) |
计算打卡相册积分
根据上述规则,我们需要用 IF 函数判断一下相册状态。
这里还用到了一个函数OR
excel 里面的与或非不是用逻辑运算符的,而是用函数。
公式如下:
1 | =IF(相册状态="正在进行",1,0)*(积分规则!$C$2)*持续天数+IF(相册状态="归档",1,0)*(积分规则!$C$2)*持续天数+IF(OR(相册状态="失败",相册状态="放弃"),1,0)*(积分规则!$D$2)*(-1) |
其中,积分规则!$C$2
代表的是我在另一个名为“积分规则”的表中的 C2 格中设置的一个正调整参数。积分规则!$D$2
同理。
计算个人总积分
一个成员可以有多个相册,因此需要将他所有的相册的积分相加。
相加可以使用SUM
函数,来将已知区域求和。
例如现在的情况是这样的:
申请人昵称 | 相册名称 | 打卡相册积分 |
---|---|---|
憧憬少 | 憧憬少的英语流利说打卡 | 18 |
简白 | 简白的英语打卡 | 12 |
咸鱼米 | 米米的啃书打卡 | 12 |
咸鱼米 | 米米的每日练习 | 5 |
H.U.S.T. | H.U.S.T.的小说练笔 | 3 |
米米有两个相册,她的积分就是 12+5=17,相加的格子不确定,要如何用公式计算她的积分呢?
我查到了SUMIF
这个函数,也就是“条件相加”,格式如下:
1 | SUMIF(条件区域,求和条件,[实际求和区域]) |
条件区域:也就是要按条件计算的单元格区域。不太好理解,我的理解是,这个函数对于“条件区域”内符合条件的单元格进行求和。
求和条件:定义进行求和的单元格需要满足的条件。例如:32、”>32”、B5、”32”、”苹果” 或 TODAY ()。任何文本条件或任何含有逻辑或数学符号的条件都必须使用双引号 (“) 括起来。 如果条件为数字,则无需使用双引号。
实际求和区域:如果省略,则将条件区域当作实际求和区域。
在这里,条件区域是“申请人昵称”,实际求和区域是“打卡相册积分”,求和条件是要计算积分的成员昵称。这样我们就可以将某个成员的所有相册数据所在的那几行给筛选出来,再将这几行的打卡相册积分相加,得到这个成员的总积分了。
某成员打卡相册总积分计算公式:
1 | =SUMIF(打卡相册登记表!B:B,某成员昵称,打卡相册登记表!K:K) |
这里的B:B
和K:K
就分别对应了“申请人昵称”和“打卡相册积分”这两列。
excel实现打卡相册积分制