在Excel中,如果你想使用`VLOOKUP`函数结合`IFERROR`函数来根据物流单号填写快递公司,你可以这样做。假设你的物流单号在A列,快递公司在B列,你想在C列根据A列的物流单号查找对应的快递公司。
以下是一个示例公式:
```excel
=IFERROR(VLOOKUP(A2,范围,2,FALSE), "未找到")
```
在这个公式中:
- `A2` 是你要查找的物流单号。
- `范围` 是包含物流单号和快递公司的数据范围,例如 `A2:B100`。
- `2` 表示返回查找范围的第二列,即快递公司。
- `FALSE` 表示精确匹配。
如果你想在C列对每一行都应用这个公式,你可以将公式拖动或复制到C列的其他单元格中。
例如,如果你在C2单元格中输入了上述公式,然后将公式向下拖动到C列的其他单元格,它将自动调整`A2`为`A3`, `A4`等,从而对每一行的物流单号进行查找。
这样,如果找到了对应的快递公司,它将显示在C列;如果没有找到,它将显示“未找到”。
相关内容:
网友求助SOS:如何根据快递匹配分类?啥意思呢?下面我们用案例模拟真实的办公场景。
如下图所示:A:B列是快递编号与对应快递的对照表。A列编号是完整快递单号的前两位。D列是完整的快递单号,我们就是想要根据D列完整的快递单号,将对应的快递公司填写在E列。

小编给到的解决方案是vlookup+mid+iferror函数组合。怎么用呢?下面我们一步一步说。总而言之,这个案例很简单。
我们输入公式:
利用MID函数提取D列单元格完整物流单号的前两位。

外面嵌套VLOOKUP函数:=VLOOKUP(MID(D2,1,2),A:B,2,0)
用MID函数提取到的完整物流单号的前两位,作为VLOOKUP函数的第一参数查找值。在A:B区域内进行查找,用精确匹配的方式,查找A:B区域的第2列“对应快递”。
但是我们发现:只有完整物流单号前两位是字母(文本)的,E列才会显示正确的快递公司查询结果。而完整物流单号全部是数字的,也就是完整物流单号前两位是数字的,E列快递公司的查询结果却显示错误值。

造成这种结果的原因是这样的:
比如MID函数提取到的D3单元格的前两位“76”=MID(D3,1,2)
与对照表中的A8单元格的“76”对比:=F3=A8
结果会返回错误值:FALSE
也就是说MID函数提取到的“76”文本型数字,而A8单元格的“76”为纯数字,两者其实不相等。所以VLOOKUP查询不到。

其中一种解决方案,就是对对照表进行操作,用“分列”的方式,将A列的“编号”的格式转换为文本格式,也就是说将VLOOKUP的查找值mid函数返回结果与查询区域的首列“编号”统一文本格式。
那么E列结果自然而然就都正确了。

但是小编提倡的是用公式一条龙解决问题,不要用公式+分列两步走战略。
我们输入公式:
利用MID函数提取D列单元格完整物流单号的前两位。

继续完善公式:=MID(D2,1,2)*1
MID(D2,1,2)*1作用:将提取的2个字符尝试转换为真正的数字。若字符是文本型数字(如 "76"),转换成功 → 返回真正的数字 76。若字符是非数字(如 "YT"),转换失败 → 返回错误值 #VALUE!。

继续完善公式:=IFERROR(MID(D2,1,2)*1,MID(D2,1,2))
IFERROR(MID(D2,1,2)*1, MID(D2,1,2))作用:根据上一步结果,返回有效值。若文本型数字转换为真正的数字成功 → 保留真正的数字(如 76)。若转换失败 → 返回原始文本(如 "YT")。
逻辑:优先尝试用真正的数字匹配(针对快递单号以数字开头的场景,如中通单号 76)。若失败则用文本匹配(针对快递单号以字母开头的场景,如圆通单号 YT)。

最后VLOOKUP函数匹配即可:=VLOOKUP(IFERROR(MID(D2,1,2)*1,MID(D2,1,2)),A:B,2,0)
VLOOKUP(..., A:B, 2, 0)作用:在 A:B 对照表中,根据前一步的值查找对应的快递公司名称。
参数解析:查找值:IFERROR(...) 的结果(真正的数字或文本)。查找区域:A:B 列(A 列为编码,B 列为快递公司名称)。返回列:第 2 列(即 B 列)。匹配模式:0 表示精确匹配。

如下图所示:A:B列是快递编号与对应快递的对照表。A列编号是完整快递单号的前两位。D列是完整的快递单号,我们就是想要根据D列完整的快递单号,将对应的快递公司填写在E列。

小编给到的解决方案是vlookup+mid+iferror函数组合。怎么用呢?下面我们一步一步说。总而言之,这个案例很简单。
我们输入公式:
=MID(D2,1,2)
利用MID函数提取D列单元格完整物流单号的前两位。
MID函数提取D2单元格中的字符串,从第1位开始,提取2位字符长度,所以“YT2553112343019”的前两位就是“YT”。

外面嵌套VLOOKUP函数:=VLOOKUP(MID(D2,1,2),A:B,2,0)
用MID函数提取到的完整物流单号的前两位,作为VLOOKUP函数的第一参数查找值。在A:B区域内进行查找,用精确匹配的方式,查找A:B区域的第2列“对应快递”。
但是我们发现:只有完整物流单号前两位是字母(文本)的,E列才会显示正确的快递公司查询结果。而完整物流单号全部是数字的,也就是完整物流单号前两位是数字的,E列快递公司的查询结果却显示错误值。

造成这种结果的原因是这样的:
MID函数提取结果返回的是文本形式存储的数据。
比如MID函数提取到的D3单元格的前两位“76”=MID(D3,1,2)
与对照表中的A8单元格的“76”对比:=F3=A8
结果会返回错误值:FALSE
也就是说MID函数提取到的“76”文本型数字,而A8单元格的“76”为纯数字,两者其实不相等。所以VLOOKUP查询不到。

其中一种解决方案,就是对对照表进行操作,用“分列”的方式,将A列的“编号”的格式转换为文本格式,也就是说将VLOOKUP的查找值mid函数返回结果与查询区域的首列“编号”统一文本格式。
那么E列结果自然而然就都正确了。

但是小编提倡的是用公式一条龙解决问题,不要用公式+分列两步走战略。
我们输入公式:
=MID(D2,1,2)
利用MID函数提取D列单元格完整物流单号的前两位。
注意:
MID函数提取到的前两位如果是数字的情况下,为文本型数字。如物流单号“76495265471561”前两位“76”为文本型数字。
继续完善公式:=MID(D2,1,2)*1
MID(D2,1,2)*1作用:将提取的2个字符尝试转换为真正的数字。若字符是文本型数字(如 "76"),转换成功 → 返回真正的数字 76。若字符是非数字(如 "YT"),转换失败 → 返回错误值 #VALUE!。

继续完善公式:=IFERROR(MID(D2,1,2)*1,MID(D2,1,2))
IFERROR(MID(D2,1,2)*1, MID(D2,1,2))作用:根据上一步结果,返回有效值。若文本型数字转换为真正的数字成功 → 保留真正的数字(如 76)。若转换失败 → 返回原始文本(如 "YT")。
逻辑:优先尝试用真正的数字匹配(针对快递单号以数字开头的场景,如中通单号 76)。若失败则用文本匹配(针对快递单号以字母开头的场景,如圆通单号 YT)。

最后VLOOKUP函数匹配即可:=VLOOKUP(IFERROR(MID(D2,1,2)*1,MID(D2,1,2)),A:B,2,0)
VLOOKUP(..., A:B, 2, 0)作用:在 A:B 对照表中,根据前一步的值查找对应的快递公司名称。
参数解析:查找值:IFERROR(...) 的结果(真正的数字或文本)。查找区域:A:B 列(A 列为编码,B 列为快递公司名称)。返回列:第 2 列(即 B 列)。匹配模式:0 表示精确匹配。
