=MOD(A2,B2) 返回 A2 除以 B2 后的余数:=MOD(17,5) 是 2,因为 17 里面有三个 5,还剩 2。=ABS(A2) 返回去掉符号的数字,所以 -42 变成 42。
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Number | Divisor | MOD | Times it fits |
| 2 | 17 | 5 | 2 | 3 |
| 3 | 20 | 5 | 0 | 4 |
| 4 | 7 | 2 | 1 | 3 |
| 5 | 100 | 7 | 2 | 14 |
| 6 | -3 | 2 | 1 | -1 |
| 7 | 3 | -2 | -1 | -1 |
D 列显示的是除法的另一半:QUOTIENT 返回除数能整除的次数,所以 17 等于 3 乘以 5 再加 2。把 B2 改成 0,MOD 会返回 #DIV/0!,和除以零时一样。
MOD 语法
=MOD(number, divisor)
MOD 也适用于小数:=MOD(7.5,2) 是 1.5,=MOD(A2,1) 只返回数字的小数部分,例如从 3.75 得到 0.75。对于带时间的日期,=MOD(A2,1) 保留时间、去掉日期。
负数的 MOD
上面表格的第 6 行和第 7 行展示了 Excel 的规则:结果的符号与除数相同。=MOD(-3,2) 是 1 而不是 -1,=MOD(3,-2) 是 -1。Excel 按 number - divisor * INT(number / divisor) 计算 MOD,而 INT 总是向下取整。
这是电子表格和代码不一致的地方。在 JavaScript、Java、C 和 C# 中 -3 % 2 是 -1;Python 的 -3 % 2 是 1,与 Excel 相同。Google 表格与 Excel 一致。如果需要结果与被除数同号,用 =A2-B2*TRUNC(A2/B2)。
奇数还是偶数,以及隔行着色
当 MOD(number,2) 为 0 时,这个数是偶数。由此可以得到“Even”或“Odd”标签,搭配 ROW 还能得到隔行着色的规则。Excel 也有 ISEVEN 和 ISODD,它们直接返回 TRUE 或 FALSE。
| A | B | C | |
|---|---|---|---|
| 1 | Order | Qty | Even or odd |
| 2 | 1001 | 4 | Even |
| 3 | 1002 | 7 | Odd |
| 4 | 1003 | 10 | Even |
| 5 | 1004 | 3 | Odd |
| 6 | 1005 | 8 | Even |
| 7 | 1006 | 5 | Odd |
条件格式规则 =MOD(ROW($A2),2)=0 突出显示第 2、4、6 行,也就是行号为偶数的行。在 Excel 中,它位于“开始 > 条件格式 > 新建规则 > 使用公式确定要设置格式的单元格”,在那里更短的 =MOD(ROW(),2)=0 也可以。把 2 改成 3,就会每隔三行着色一次。
每隔 N 行:每三个值求一次和
MOD(ROW()-ROW(first),n)=0 对区域的第一行为 TRUE,之后每隔 n 行为 TRUE。放进 SUMPRODUCT 中,就能从一列中每三个值挑出一个,例如每个季度的最后一个月。
| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | Month | Sales | Every 3rd | ||
| 2 | Jan | 120 | 310 | ||
| 3 | Feb | 135 | |||
| 4 | Mar | 150 | |||
| 5 | Apr | 110 | |||
| 6 | May | 125 | |||
| 7 | Jun | 160 |
各行的偏移量是 0 到 5,=2 保留偏移量 2 和 5:3 月和 6 月,150 加 160。把 =2 改成 =0,就会取 1 月和 4 月。
把分钟换算成小时和分钟
MOD 和整数除法可以把一个总数拆分成不同单位:小时和剩余的分钟、周和剩余的天数、箱数和零散的件数。
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Minutes | Hours | Minutes left | Label |
| 2 | 135 | 2 | 15 | 2 h 15 min |
| 3 | 59 | 0 | 59 | 0 h 59 min |
| 4 | 240 | 4 | 0 | 4 h 0 min |
| 5 | 1000 | 16 | 40 | 16 h 40 min |
1000 分钟是 16 小时 40 分钟。对于真正的时间值(8:30、17:45)以及跨越午夜的班次,标准公式是 =MOD(end-start,1);见 时间计算。
ABS:两个数之差
=ABS(number) 去掉负号。它的主要用途是在不关心哪个值更大时求差值的大小:每次预测与实际结果相差多少,或者某个测量值是否在允许误差之内。
| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | Week | Forecast | Actual | Off by | Within 10? |
| 2 | W1 | 120 | 112 | 8 | TRUE |
| 3 | W2 | 95 | 109 | 14 | FALSE |
| 4 | W3 | 140 | 138 | 2 | TRUE |
| 5 | W4 | 80 | 93 | 13 | FALSE |
| 6 | W5 | 110 | 104 | 6 | TRUE |
W1 的 B2-C2 是 8,W2 是 -14;ABS 把两者都变成距离。要把这些距离加起来,=SUMPRODUCT(ABS(B2:B6-C2:C6)) 在所有 Excel 版本中都能用;这里得到 43,即 D 列的合计。再除以个数,就是平均绝对误差。
动手试试:MOD 和 ABS
| A | B | C | |
|---|---|---|---|
| 1 | Eggs | Per carton | Left over |
| 2 | 350 | 12 |
轮到你了: 在 C2 中计算:把 A2 中的鸡蛋装进容量为 B2 的整盒之后,还剩多少个鸡蛋。
| A | B | C | D | |
|---|---|---|---|---|
| 1 | City | Morning | Evening | Change |
| 2 | Oslo | 14 | 6 |
轮到你了: 在 D2 中显示 B2 和 C2 之间温度变化了多少度,无论哪个读数更高,都用正数表示。
MOD、QUOTIENT 与 INT 的对比
| 你想要的 | 公式 | 17 和 5 的结果 | -17 和 5 的结果 |
|---|---|---|---|
| 余数 | =MOD(A2,B2) | 2 | 3 |
| 整除次数,向零取整 | =QUOTIENT(A2,B2) | 3 | -3 |
| 整除次数,向下取整 | =INT(A2/B2) | 3 | -4 |
| 精确除法 | =A2/B2 | 3.4 | -3.4 |
对于正数,QUOTIENT 与 INT(A2/B2) 结果一致,而且 B2*INT(A2/B2)+MOD(A2,B2) 总能还原出原来的数。遇到负数时,只有 INT 这一组能加回原数:-4 乘以 5 再加 3 等于 -17。在负数上把 QUOTIENT 和 MOD 混用,常常导致排班或分配时差一的错误。
常见问题
Excel 中的 MOD 有什么用?
它返回除法的余数:=MOD(17,5) 是 2,因为 17 里面有三个 5,还剩 2。如果能整除,MOD 返回 0。
怎样在 Excel 中判断一个数是不是偶数?
用 =MOD(A2,2)=0,偶数时为 TRUE,或者用 =ISEVEN(A2)。要显示文字标签:=IF(MOD(A2,2)=0,"Even","Odd")。
为什么负数的 MOD 结果是正数?
Excel 的 MOD 结果与除数的符号相同:=MOD(-3,2) 是 1,=MOD(3,-2) 是 -1。很多编程语言中 -3 % 2 的结果是 -1,所以结果可能与代码不同。
怎样在 Excel 中求绝对值?
用 =ABS(A2):-42 变成 42,42 仍然是 42。要得到不带符号的差值大小,用 =ABS(B2-C2)。
怎样在 Excel 中对绝对值求和?
用 =SUMPRODUCT(ABS(A2:A7)),它在所有版本中都能使用。在 Excel 365 和 2021 中,=SUM(ABS(A2:A7)) 也可以。