公式:
=P8+VLOOKUP($A8,INDIRECT("'"&$B$1&"'!$A:$AH"),17,0)
一、这个公式到底在算什么?
把它拆成两块就清楚了:
scss
= P8 + VLOOKUP(查找值, 查找区域, 返回列, 精确匹配)
| 部分 | 作用 |
|---|---|
P8 |
当前工作表的某个基础数值 |
VLOOKUP(...) |
根据 A8 的值,去另一个工作表里查找对应数据 |
+ |
把两部分加起来,得到最终结果 |
二、VLOOKUP 的参数逐个拆解
1. 查找值:$A8
- 在当前表第
A列第8行取一个值。 $A表示列固定,8表示行会随公式下拉而变化。- 比如下拉一行会变成
$A9、再下是$A10。
2. 查找区域:
bash
INDIRECT("'"&$B$1&"'!$A:$AH")
这是整个公式最灵活的部分。
INDIRECT 的作用
INDIRECT 把一段文本变成真正的 Excel 引用。
比如 B1 单元格里写的是 Sheet2,那么:
bash
INDIRECT("'"&$B$1&"'!$A:$AH")
实际等价于:
bash
'Sheet2'!$A:$AH
也就是说,查找哪个工作表,是由 B1 的内容动态决定的。
为什么要加单引号 '?
如果工作表名里包含空格、特殊符号,或者和区域地址连在一起,Excel 要求用单引号包裹工作表名。
比如:
bash
'2026 年数据'!$A:$AH
加单引号是最稳妥的写法,所有表名都兼容。
$B$1 的 $ 含义
$B$1 是绝对引用 ,无论公式复制到哪里,都锁定在 B1 单元格。
这样整条公式向下填充时,查找的表名不会跟着变。
3. 返回列:17
VLOOKUP 的第三个参数表示返回查找区域中的第几列。
区域是从 A 列到 AH 列,第 1 列是 A,第 17 列对应:
A(1)、B(2)、C(3)、D(4)、E(5)、F(6)、G(7)、H(8)、I(9)、J(10)、K(11)、L(12)、M(13)、N(14)、O(15)、P(16)、Q(17)
所以返回的是目标表中 Q 列的值。
4. 匹配方式:0
0 表示精确匹配 。如果 A8 的值在目标表 A 列里找不到,公式会返回 #N/A。
如果想模糊匹配,可以改成 1,但通常数据查找用 0 更安全。
三、整个公式的执行流程
- 读取当前表
P8单元格的值。 - 读取
B1单元格里的工作表名称。 - 用
INDIRECT把表名和区域拼接成跨表引用。 - 在目标表的
A列里找A8的值。 - 找到后,返回同一行里第 17 列(即
Q列)的值。 - 最后把
P8和查找到的值相加。
四、实际例子
假设:
- 当前表是
汇总表。 B1单元格的内容是销售数据。A8的值是S001。P8的值是100。
在 销售数据 表中:
| A列(编号) | B列 | ... | Q列(金额) |
|---|---|---|---|
| S001 | ... | ... | 500 |
那么公式计算过程就是:
bash
= 100 + VLOOKUP("S001", '销售数据'!$A:$AH, 17, 0)
= 100 + 500
= 600