Excel 双减号(--)完全指南:6 个实用公式案例

大部分用 Excel 的人根本不知道双减号这个东西,但它可以修坏掉的公式、把文字转成数字,甚至让你做到一些平常在 Excel 里面做不到的计算。本文用 6 个从简单到进阶的例子,带你彻底搞懂双减号。

一、双减号到底在干嘛?

双减号的原理其实很简单:第一个负号把值变成负的,第二个负号再把它转回来。经过这两次运算之后,对 Excel 来说这个值就变成了真正的数字。

它最常用在两个场景:

  • 把 TRUE/FALSE 转成 1/0 — 这样才能拿去做加总、计数等计算
  • 把「看起来是数字的文字」转成真正的数字 — 比如从外部系统导入的资料,格式看起来对但其实 Excel 当成文字处理

二、范例一:把 TRUE/FALSE 变成数字

假设旁边有一组数字,我们想知道里面有几个大于 10 的。直接打等号,全部选起来,加上大于 10 的条件,按 ENTER — 跑出来的结果全部是 TRUE 跟 FALSE。这样没办法直接对它们做加总,因为它们现在是文字,不是数字。

这时候双减号就派上用场了。打等号加两个减号,选取这些值,按 ENTER,FALSE 变成了 0,TRUE 变成了 1。

懂这个逻辑之后,我们就可以把它包进公式里:

Excel
=SUMPRODUCT(--(A1:A10>10))

SUMPRODUCT 会把双减号转换出来的 1 跟 0 全部加起来,得到大于 10 的个数。

补充:技术上你也可以用 SUM 来做,把 SUMPRODUCT 换成 SUM 也会得到一样的答案。但要注意,这只有比较新版的 Excel 才支持。

你可能会想说,这不就用 COUNTIF 就好了吗?没错,这个简单的例子确实可以。但现在你已经懂双减号的语法了,接下来看更实际的应用。

三、范例二:文字转数字

这边有一些产品价格,但点进去看会发现它们是手动把钱号打上去的,所以不是单纯改格式就能解决的问题。

先用 TEXTAFTER 这个函数清掉钱号:

Excel
=TEXTAFTER(A1:A5, "$")

现在看起来干干净净了,但如果直接对这些值做 SUM,结果是 0。换 MAX 试试,一样是 0。为什么?因为这些值虽然看起来是数字,但 Excel 其实是把它们当成文字的。

这时候加上双减号:

Excel
=SUM(--TEXTAFTER(A1:A5, "$"))

=MAX(--TEXTAFTER(A1:A5, "$"))

这次就有正确的答案了。双减号强制把文字转成了真正的数字。

注意:TEXTAFTER 是比较新的函数,需要 Microsoft 365 或 Excel 2021 以上版本才有。

四、范例三:算出有几天是周末

这边有一组日期,我们要算出里面有几天是周末。先用 WEEKDAY 函数,把整个范围选起来,return type 设成 2(从星期一开始算):

Excel
=WEEKDAY(A1:A10, 2)

跑出来的数字里,6 跟 7 就是周末。加上大于 5 的条件,但又是一样的问题,跑出来是 TRUE 跟 FALSE。

所以在最前面加上双减号,开括号把整个条件包住:

Excel
=SUMPRODUCT(--(WEEKDAY(A1:A10, 2)>5))

SUMPRODUCT 把 0 跟 1 全部加起来,就得到了周末的天数。

五、范例四:资料清理 — 统计特定长度的号码

这边有一些电话号码,我们要算出几个是 9 位数的。先用 LEN 看每个号码有几个字符,有的是 10 码,有的是 9 码,长度不一。

要找出哪些刚好是 9 码的,在 LEN 前面加上双减号,后面加等于 9 的条件,用括号包起来:

Excel
=SUMPRODUCT(--(LEN(A1:A10)=9))

9 码的会变成 1,其他的是 0,SUMPRODUCT 加起来就是总数。

小技巧:这个公式很灵活,你可以改成不等于 9、大于某个数、小于某个数,随你调整。

六、范例五:多条件判断

假设有一群员工要通过考试,考试分成理论跟实操两个部分。我们要算的是理论跟实操都过的有几个人。

两个条件分别是:理论那栏等于 TRUE,实操那栏也等于 TRUE。把每个条件分别用括号包起来,加上 SUMPRODUCT:

Excel
=SUMPRODUCT(--(B2:B10=TRUE), --(C2:C10=TRUE))

如果不加双减号,结果会是 0,因为 SUMPRODUCT 没办法处理文字值。在每个条件前面各加一个双减号,就能正确算出两边都过的人数。

七、范例六:进阶 SUMPRODUCT 计算

最后来看最进阶的例子。这边有员工资料,包括部门、有没有在周末工作、加班时数还有加班费率。我们要算出业务部门(Sales)在周末工作的员工,加班总共要花多少钱。

第一个条件:部门等于 Sales。第二个条件:周末那栏等于 TRUE。但这次我们不只是要算有几笔对得上,还要算实际的金额。所以在 SUMPRODUCT 里面还要再乘上加班时数和加班费率:

Excel
=SUMPRODUCT(--(A2:A10="Sales"), --(B2:B10=TRUE), C2:C10, D2:D10)

双减号把部门和周末两个条件都转成了 0/1,然后 SUMPRODUCT 把满足条件的行对应的加班时数乘以费率,全部加起来,就得到了业务部门周末加班的总费用。

八、总结

场景 公式范例 说明
TRUE/FALSE 转数字 =SUMPRODUCT(--(A1:A10>10)) 条件判断后计数
文字转数字 =SUM(--TEXTAFTER(A1:A5,"$")) 清理后强制转换
日期判断 =SUMPRODUCT(--(WEEKDAY(...)>5)) 配合 WEEKDAY 算周末
长度筛选 =SUMPRODUCT(--(LEN(...)=9)) 统计特定长度资料
多条件判断 =SUMPRODUCT(--(条件1), --(条件2)) 每个条件各加双减号
多条件运算 =SUMPRODUCT(--(条件1), --(条件2), 数值1, 数值2) 条件筛选后做乘法加总

双减号在 Excel 里面真的超好用,观念就一个:把 TRUE/FALSE 或文字转成数字,这样你才拿得去做计算。从简单的计数到比较复杂的多条件运算,搞懂这招的话,你公式能做的事情会多很多。