你手上那张表,大概是这么来的:别人做好的月报模板,区域那一列为了好看,把同一个区域合并成一格;表头分了两行,第一行写“1月”“2月”,第二行写“销售额”“利润”;中间还夹着一行“小计”。
你把它拿来想做个汇总,公式写下去结果对不上,透视表干脆弹出“字段名无效”。问题不在公式,而在这张表的 形状。
规范的表格长什么样
先看一张能跑起来的表,假设是一份订单明细:
- 第一行是表头,每一列一个名字:日期、区域、产品、数量、单价。
- 第 2 行往下,每一行是一笔订单,五列填满,中间没有空行。
- “区域”这一列从上到下写的都是区域名,没有一格是空的。
三条要求可以概括成一句话:表头只有一行,一行是一条记录,一列是一个字段。“字段”就是指这一列装的是什么信息——日期、区域、数量。整列都在回答同一个问题,数据类型也一致。
为什么必须是这个形状
这不是洁癖,是后面所有工具的入口条件。
第一,函数的参数是一整列。 你写 =SUMIF(B:B,"华东",D:D),意思是“在 B 列里找华东,把对应行的 D 列加起来”。这个式子偷偷假设了两件事:B 列只装区域、每一行都有区域值。现在看一张合并过的表:区域列把 5 行合并成一个“华东”。合并单元格有个关键特性——只有左上角那一格真的存着内容,被合并掉的格子其实是空的5。所以这 5 行里,只有第 1 行的 B 列是“华东”,后面 4 行是空白。SUMIF 找不到它们,结果就少算了 4 行的数量,而且不会报错,只是悄悄地少。
第二,透视表只有一条硬规则:数据源第一行必须是每一列的表头2。表头空着、或者被合并单元格盖住,透视表就读不出字段名,弹出“字段名无效”3。同样地,数据中间只要有空行,透视表就只认第一段;有小计行,它会把小计当成一条独立记录再加一遍,合计直接翻倍。还有一点不显眼:被合并盖住的位置本来就是空白,透视表会把这些行归进一个叫“(空白)”的分组,本来属于华东的 4 笔订单全跑到那里去了。
第三,自动化要的是“下次不用重做”。 把区域变成 Excel 表格(Ctrl+T)之后,你在表格下面再加一行,表格自动变大,公式 =SUM(订单表[数量]) 自动跟上,透视表刷新就带上新数据。这种表格内部不允许有合并单元格。同理,Power Query——Excel 里用来记录并重放数据清洗步骤的工具——也是一步步按列名操作的,表头多一行,每来一批新数据都得手工再调一遍。
三种旧表怎么改
一、类别列被合并了
目的是把“华东”补到它盖住的那几行上去,让每一行都自己带着区域名。做法分四步:
- 先取消合并。 选中这一列,开始 → “合并后居中”旁边的下拉箭头 → 取消单元格合并。值会留在最上面那一格,其余位置变成空白,这一步本身不会丢东西。
- 只选中空格。 选中这一列有数据的那一段(比如 A2:A13),开始 → 查找和选择 → 定位条件(或者按 F5 再点“定位条件”)→ 选“空值” → 确定。现在被选中的只剩这一段里的空格。
- 一次填满。 不要点鼠标,直接敲一个
=,再按一次方向键 ↑。这时公式栏里是=A2这种指向上方一格的形式。接着按Ctrl+Enter:它和普通回车不一样,普通回车只写进当前一格,Ctrl+Enter会把同一个公式 同时写进所有被选中的单元格,而相对引用会按各自的位置自动调整,于是每个空格都取到自己上面那一格的值4。原来有几段合并、每段几行都没关系,上一格补好之后,紧跟着的下一格取到的就是补好的值,一格一格接下去。 - 固化成值。 把这一列复制,选择性粘贴为“值”。因为刚才补进去的是公式,一排序、一删行,引用就会错位,补好的内容会跟着乱掉。
还有两个边界。如果这一列里本来就有该空缺的格子(比如“备注”允许不填),不要整列这么处理,只处理合并造成的那部分。反过来,如果原来合并进去的几个格子本来就装着不同的值,那一合成就只剩下左上角那个了——这种情况得回头找原始数据核对,不是填空能补回来的。
二、表头占了两行
Excel 的字段名是一个单元格里的一段文字,不能横跨两行。所以“1月”在第一行、“销售额”在第二行这种结构,必须压成一行,名字拼成“1月销售额”。手动做就是:在表头上方插一行,把每一列的完整名字写全,再删掉原来那两行。
如果领导就是要求上面显示成两行,也有办法:在同一个单元格里按 Alt+Enter 手动换行,把“1月”和“销售额”放进一个格子。显示上是两行,实际还是一个单元格、一个字段名,透视表照样认2。用空格拼成“1月 销售额”也行。
数据每月都来一批的话,这套动作可以交给 Power Query 记成步骤,以后新文件直接刷新,不用再手工做一遍。
三、中间的小计行、空行、总计行
这些行和别的行不一样:它们没有日期、没有产品,只有几个合计数。它们是 半条记录,放在明细区里会同时破坏前面两条规则。做法是全部删掉,只保留明细。合计交给透视表或另开的报表区域去做,不要混进数据源。
改完立刻做一件事
选中整个数据区,按 Ctrl+T 变成 Excel 表格,给它起个名字(比如“订单表”),之后建透视表或写公式都以它为数据源。往表格下面粘新数据,它会自己长大,透视表点一下刷新就带上新内容。这才是“下次不用重做”的起点。
最后划一条边界:还有一类不规范不是靠填空能修的——把 1 月、2 月、3 月横着摆在列上,每列一个月份。那不是“缺了值”,而是“该竖着放的信息躺下了”。这种情况要先把方向正过来,属于另一种改造,值得单独讲。