无尘阁日记

无尘阁日记

报价单两列数据为啥不一致,由请AI找原因
2026-01-29

789aedd0c30b66a967a8b9d16d79a8e0.png我把你这个表(截图对应的 「蔬菜」sheet)按“左边公式区 vs 右边数据源区”拆开看了一遍,合计不一致的根因基本就两类

1)VLOOKUP 只按“商品名称”匹配:右侧出现“同名不同单位/规格”,就会拉错价

你左边黄色列(H列)公式是类似:

  • =VLOOKUP(C4,$J$4:$M$162,4,0)
    也就是 只用 C列「商品名称」去右侧 J 列找,找到后取 M 列价格。

这在“商品名称唯一”时没问题;一旦右侧同一个名称出现两次(单位不同、规格不同),VLOOKUP 永远取“第一次出现”的那条,就会造成金额合计对不上。

你这个「蔬菜」里就有一个明确的“同名两条”

右侧数据源里:「鲜白玉菇」出现了 2 次

  • 一条是 (价格 3.5)

  • 另一条是 (价格 8)

左侧明细里「鲜白玉菇」也有两条,而且其中一条单位是 Kg(你表里 Kg 通常是要对应到右侧“斤”的逻辑,再做 /2 换算)。

结果就是:
左侧那条 单位=Kg 的「鲜白玉菇」,H列 VLOOKUP 因为只看名称,匹配到了右侧第一条“盒 3.5”,而不是应该匹配的“斤 8”。
这一个点就足够导致你说的“蔬菜金额合计不一致”。

结论:你蔬菜合计不一致,至少有一部分就是这个“同名不同单位”导致拉价错误。

2)右侧价格存在“非数字”(例如 “-”、带文字备注):汇总时会被当文本,导致合计偏差

你提到“肉类金额”也不一致,我检查了 「猪肉」sheet,右侧数据源里确实存在 价格为 “-” 的项(比如「猪尾巴(短)」那行)。

这种情况会带来两个常见问题:

  1. VLOOKUP 拉回的是文本 “-”

  2. 你后面金额如果是 数量*单价 或做 SUM,会出现:

    • 该行金额变成 0 / 空 / 报错

    • 合计自然和你肉类那边“真实数据口径”不一致

结论:肉类合计不一致,除了“同名”问题外,也高度怀疑存在这种“价格是文本”的行,把合计搞偏了。

你该怎么修:两步就能根治(建议按这套做)

A. 把匹配键从“单字段(名称)”升级为“多字段(名称+单位,必要时再加规格)”

最稳的做法:做一个辅助键(建议左右两边都做)

1)左侧新增一列 Key(比如在B/C旁边)

=TRIM(C4)&"|"&TRIM(E4)
(名称 + 单位)

2)右侧也新增一列 Key(在右侧名称列旁边)

=TRIM(J4)&"|"&TRIM(L4)
(名称 + 单位)

3)用 Key 去查价(替换原 VLOOKUP)

=XLOOKUP(左Key, 右Key列, 右价格列, "")
如果你只能用 VLOOKUP:就让右侧 Key 列放在查找区域第一列,再 VLOOKUP。

这样「鲜白玉菇|盒」和「鲜白玉菇|斤」就不会串。

B. 价格列强制数字化 + 兜底处理(避免 “-”/空/文本 把合计弄歪)

对拉回来的单价列做一层清洗:

  • - 统一替换为 0 或空(看你业务口径)

  • 公式兜底示例:
    =IFERROR(VALUE(查回来的单价),0)

这样肉类合计不会被文本污染。

你现在立刻就能自查的“定位法”(不用改公式也能找出所有坑)

1)找右侧是否有同名

在右侧名称列做:
=COUNTIF(右侧名称列, 当前名称)>1
为 TRUE 的就是风险项(像「鲜白玉菇」这种)。

2)找单价是否为文本

在单价列做:
=ISTEXT(单价值)
为 TRUE 的基本就是 “-” 或带备注的那种。