利用mod函数根据年份计算生肖

小伙伴们,大家好。今天利用mod函数做几个实例,有一个典型的案例就是根据年份计算生肖。在说实例之前,先来对昨天的文章补充说明一下。我认为昨天对mod的循环效果没有展示明白。

先来看几张图片的。下图A列是1到12的序列数,BCDEF列分别是除以2,3,4,5,6求余数的结果。大家可以看到,当除数为2时,结果为1,0...1,0的循环;当除数为3时,结果是1,2,0...1,2,0的循环;以此类推。

下图A列的序列数是从0开始的,0到11。BCDEF列还是分别除以2,3,4,5,6的余数结果。可以看到,除数为2时,是0,1..0,1的循环;除数为3时,是0,1,2...0,1,2的循环;以此类推。

那么,我们只要把1到12的序列数变成0到11,余数的循环就会由从1开始变为从0开始。也就是下图的效果。将A列的序列数减1变为从0开始,那么余数的结果也会从0开始。余数从0开始了,只要再加1,就是从1开始了。所以昨天的公式中为什么要-1和+1,就是这个原因。mod循环的效果就补充说明到这里。

下面看几个例子吧。

1.计算还剩几箱几瓶

如下图所示,是各种酒的进货和卖出数量,每箱有多少瓶也告诉了,求还剩多少箱多少瓶。以葡萄酒为例说明,进货10箱,卖出5箱和12瓶,一箱是4瓶,求还剩几箱几瓶。

我的思路是先将箱数转化为瓶数,然后再计算剩余的总瓶数,最后把剩余的总瓶数装整箱,看能装几箱,装不满整箱的就算做瓶数。在F45单元格输入公式=INT(((C45-D45)*B45-E45)/B45),向下填充。(C45-D45)*B45-E45这部分是剩余的总瓶数,用它除以4(一箱的瓶数),再用int取整就是整箱数。

在G45单元格输入公式=MOD((C45-D45)*B45-E45,B45),向下填充,完成。这个公式相当于=mod(剩余的总瓶数,每箱的瓶数),得到的结果就是不满1箱的瓶数。

2.根据年份计算生肖

如下图所示,当年份改变时,生肖随着变化。那这个生肖是怎么根据年份算出来的呢?我们知道一共有12个生肖,它们是每12年循环一次。我们现在知道mod有循环的特性,所以可以用mod来完成。

首先,我们需要一个对照表,如下图左表所示。将12生肖按顺序排好,并编序号1到12。然后还需要任意12个连续的年份,如右表所示,且要知道其中1年的生肖,比如这里,我知道2020年是鼠年。

接下来我们用mod对12个年份求余数,除数为12。在E53单元格输入公式=MOD(D53,12),向下填充,得到了余数。余数的范围是0到11,但我们要的是1到12,要和左表对应,所以再加1。此时2020年(也就是鼠年)的余数为5,但左表鼠年对应的序号是1。所以还要把5调成1。

那如何将2020年对应的5调整为1呢?我们发现2016年对应的数字是1,所以只需将2020变为2016就可以了,也就是2020减4。在E53单元格输入公式=MOD(D53-4,12)+1,向下填充,此时,我们发现2020年对应的数字就是1了,和左表完全对应了。此时,只需根据数字在左表中查询对应的生肖就可以了。比如2009年对应的数字是2,2对应的生肖是牛,所以2009年是牛年。查找方式可以用lookup或index+match。在F53单元格输入公式=LOOKUP(E53,B$53:B$64,A$53:A$64),向下填充。

用lookup或index+match需要借助左表,也就是AB两列,不借助的话也可以写常量数组,但是公式看起来就比较长了。我们可以用mid函数来查找生肖。公式为=MID("鼠牛虎兔龙蛇马羊猴鸡狗猪",MOD(A51-4,12)+1,1)。把12生肖按顺序写在一起作为mid的第1参数,MOD(A51-4,12)+1这部分,也就是我们根据年份得到的序列数作为mid的第2参数,只不过把D53改为A51,1作为mid的第3参数。比如A51是2020年,那么mid的第2参数会返回1,也就是从字符串的第1位开始提取1个字符,正好就是鼠。

还有一个公式为=MID("鼠牛虎兔龙蛇马羊猴鸡狗猪",MOD(A51+8,12)+1,1),只是将-4改为+8。

3.昨天的思考题(用int和mod构造下面的序列数)

在B67单元格输入公式=MOD(INT((ROW(A1)-1)/2),3)+1,向下填充,完成。另一个公式为在C67单元格输入公式=INT(MOD(ROW(A1)-1,6)/2)+1,向下填充,完成。

下面,我演示一下第1个公式的效果。

文件链接:

https://pan.baidu.com/s/17eoDaP56cEaLLTE2ROnlRA

提取码:c2uj

(0)

相关推荐