陈姐,这道题咋弄?别整那些虚头巴脑的“起初、其次、最终”了,咱直接上干货。Excel 里的公式跟做饭差不多,有时候得先洗洗菜(整理数据),有时候得加点佐料(处理空值),但核心动作只有一个:得根据条件去干活。 上次您给我的那个工资表,我就看到几个同事没发底薪,要么奖金好点,但绩效却差,那个“贡献度”如何算?我直接用了 `IF` 嵌套。
这玩意儿就像个自动裁判,多重条件一过,直接变数。 举个例子,咱这表里有个“工龄”列。规则是:每满 5 年加 1000 块,满 10 年再加 1000 块,满 15 年再加 2000 块。
要是工龄是 0,那就是说 0。我直接在公式里写了个链式反应。先判断是不是 0,要是是,输出 0。
要是大于 0,再判断是不是 5 的倍数。
要是 5 的倍数,数字加 1000。
要是 10 的倍数,数字再加 1000。
要是 15 的倍数,数字上加 2000。 也就是 `=IF(A1=0,0,IF(A1/5=0,0,IF(A1/10=0,0,IF(A1/15=0,0,A12)))`。您看,这一堆条件里,哪一条没碰过?只有 15 的倍数这一条。剩下的 0、5、10 这些,它直接就把数字乘以 2,然后输出,保留整数。
这样一算,工龄 5 年就是 1000,10 年就是 2000,15 年就是 3000。逻辑通顺,哪位还去猜是哪位的 Bug? 再说说那个数据清洗的事儿。咱这表里大量人名字填错,有的名字中间多了空格,有的姓和名混排了。
我想算个“职位”统计,发现张三的职位是"软件工程师”,李四填的是"Software Engineer"。
这个正则表达式能搞定吗?能。我直接用 `=REGEXREPLACE(B2,"[^A-Z]","")`。意思就是,把所有非字母数字以外的东西都删掉。一操作,张三和李四的名字瞬间变同一码,检查出来更顺。 还有那个“销售额”列,有时候是商品名,有时候是数字。我直接写个 `=IFERROR(VLOOKUP(B2,A2:F100,0,0),0)`。
要是找不到,直接给个 0 回,千万别报错。
有时候用户的数据就是乱码,比如把"1000"写成"1000"(实际上是个公式),要么把"1000"写成"10 月 2 日"。用 `REGEXPREPLACE` 这种函数,把数字直接过滤掉,剩下的全是文本,统计起来就没难题。 数据源要是从网页爬下来的,有时候格式不统一,有的表头不居中,有的列宽不一样。我肯定得先 `=TRIM(B2)`。
这个函数先把双引号去掉,再把两边富余的空白抠干净利落。再配合 `=LEN(B2)` 看看长度,要是忒短了,说明是空了要么只填了个横杠。
这时候就要小心了,万一表格本身就不整个,这就是个死胡同,得换个方式。 不过啊,陈姐有时候认定,要是数据量特别大,比如几百万行,写那么多 `IF` 条件忒占篇幅,读起来费劲。
这时就得找更宏观的办法。
比如用 `SUMPRODUCT` 要么 `VLOOKUP` 配合数组公式。假设你要算每个部门的平均业绩,那会儿是列出来一个个查,目前直接让 `SUMPRODUCT((B2:B100000>0)(B2:B100000/A2:A100000))` 去算。
意思是,只要业绩大于 0,再除以对应的单位,加起来求平均。 但要是数据源本身不准,比如有的部门没数据,有的部门填了个负数,`IF` 的逻辑就乱了。
这时候就得回归到最原始的 `COUNTIF` 要么 `Filter`(要是 Excel 版本赞成)。用 `=FILTER(C2:C100000, (B2:B100000>0))` 把符合正数条件的行给筛出来,剩下的自然就是负数了。再结合 `AVERAGE` 函数,就能算出对的平均值。 实际上说到底,Excel 公式不是死板的指令,它就像个灵活的搭积木。规则一变,公式就得变。
不要迷信预写好的模板,每次都要自己琢磨条件。
要是认定忒费事,就分组建表。把相关的数据合在一起,再单独建个汇总表,这样逻辑就清楚多了。 最终想提醒一句,别急着敲完公式就关闭单元格引用。
特别是宏要么 VBA 相关的,一定要在单元格外面写好,要么用 `=OFFSET` 这种动态引用。
不然下次打开文件,这公式直接报错,还得重新写一遍。咱平时练习的时候,多动手,多试错,把那些莫名其妙的毛病记下来,下次遇到就是“老面孔”了。 这就是我给您留的公式思路,好办粗暴,直接上菜。
要是还有哪块地方认定不通顺,您直接告诉我,咱一起改改。