EXCEL动态获取数据范围并整列自动填充公式及添加空值判断
最终数据效果

计算过程:
last_amt= MATCH找到F列最后一行是7last_rate= MATCH找到H列最后一行是8last_row= MAX(7,8) = 8- 创建范围:F4:F8 和 H4:H8
- 逐行计算:
- 行4:100/(1+0.13)=88.50
- 行5:200/(1+0.10)=181.82
- 行6:150(税率0,直接返回)
- 行7:300(税率空,直接返回)
- 行8:金额空,返回空
公式结构分析
=LET(
//MATCH会返回F列中最后一个数值型单元格的位置(行号)(如果有文本,建议使用VLOOKUP)
last_amt, IFERROR(MATCH(9E+307, F:F), 3),
//MATCH会返回H列中最后一个数值型单元格的位置(行号)
last_rate, IFERROR(MATCH(9E+307, H:H), 3),
//取F列和H列最后行号的较大值
last_row, MAX(last_amt, last_rate),
IF(last_row <= 3, "",
LET(
//定义行变量,获取金额数组
amount, F4:INDEX(F:F, last_row),
//定义行变量,获取税率数组
tax_rate, H4:INDEX(H:H, last_row),
//使用map函数逐行计算数据
MAP(amount, tax_rate,
LAMBDA(a, r,
IF(a = "", "",
IF(OR(r = 0, r = ""), ROUND(a, 2),
ROUND(a / (1 + r), 2)
)
)
)
)
)
)
)
可直接使用的公式
=LET(
last_amt, IFERROR(MATCH(9E+307, F:F), 3),
last_rate, IFERROR(MATCH(9E+307, H:H), 3),
last_row, MAX(last_amt, last_rate),
IF(last_row <= 3, "",
LET(
amount, F4:INDEX(F:F, last_row),
tax_rate, H4:INDEX(H:H, last_row),
MAP(amount, tax_rate,
LAMBDA(a, r,
IF(a = "", "",
IF(OR(r = 0, r = ""), ROUND(a, 2),
ROUND(a / (1 + r), 2)
)
)
)
)
)
)
)
步骤分解
第一步:定义变量 last_amt
excel
last_amt, IFERROR(MATCH(9E+307, F:F), 3)
- MATCH(9E+307, F:F) :查找F列中最后一个数值的位置
9E+307≈ 9×10³⁰⁷,是Excel能处理的最大数值之一- MATCH在数值列中查找这个超大数,会返回最后一个数值的行号
- IFERROR(..., 3):如果F列全空或没有数值,返回3(默认从第4行开始)
结果 :last_amt = F列最后一个数值的行号,如果全空则为3
第二步:定义变量 last_rate
excel
last_rate, IFERROR(MATCH(9E+307, H:H), 3)
- 同上,查找H列最后一个数值的行号
- 如果H列全空,返回3
第三步:定义变量 last_row
excel
last_row, MAX(last_amt, last_rate)
- 取F列和H列最后行号的较大值
- 确保涵盖两列的数据范围
第四步:判断是否有数据
excel
IF(last_row <= 3, "", ...)
- 如果
last_row ≤ 3,说明两列都没有有效数据 - 返回空字符串
"" - 否则执行后面的计算
第五步:内部LET定义数据范围
excel
LET(
amount, F4:INDEX(F:F, last_row),
tax_rate, H4:INDEX(H:H, last_row),
...
)
- F4:INDEX(F:F, last_row) :
- 创建一个动态范围:从F4到F列的第
last_row行 - 例如:如果
last_row=10,则为F4:F10
- 创建一个动态范围:从F4到F列的第
- H4:INDEX(H:H, last_row) :同理创建H4:H
last_row的范围
第六步:使用MAP逐行计算
excel
MAP(amount, tax_rate,
LAMBDA(a, r,
IF(a = "", "",
IF(OR(r = 0, r = ""), ROUND(a, 2),
ROUND(a / (1 + r), 2)
)
)
)
)
逻辑判断流程:
IF 金额为空 → 返回空
ELSE IF 税率为0或空 → 返回金额(保留2位小数)
ELSE → 计算 金额/(1+税率)(保留2位小数)
具体计算:
- a = ""(金额为空):直接返回空字符串
- r = 0 或 r = "" (税率为0或空):返回
ROUND(a, 2) - 其他情况 :计算不含税金额
- 公式:
a / (1 + r) - 含税金额 ÷ (1 + 税率) = 不含税金额
- 结果四舍五入到2位小数
- 公式:
公式特点
- 动态范围:自动适应数据长度
- 容错处理:使用IFERROR处理空列
- 逻辑完整 :
- 金额为空 → 结果为空
- 税率为0或空 → 不扣税
- 正常税率 → 计算不含税金额
- 批量计算:一次性计算所有行
- 精度控制:结果保留2位小数
这个公式会返回一个动态数组,自动填充到对应行。
============================================================
MAP函数用法
Excel中的MAP函数用于将数组中的每个值映射到新值,返回一个与原始数组大小相同的结果数组。
基本语法
=MAP(array1, [array2, ...], lambda_or_array<#>, ...)
- array1:必需,要映射的数组
- array2, ...:可选,其他数组
- lambda_or_array<#>:LAMBDA函数或数组引用
使用示例
示例1:将数字乘以2
=MAP(A1:A5, LAMBDA(x, x*2))
示例2:将文本转换为大写
=MAP(B1:B5, LAMBDA(x, UPPER(x)))
示例3:多数组运算
=MAP(A1:A5, B1:B5, LAMBDA(x,y, x+y))
注意事项
- MAP函数是动态数组函数,会自动溢出到相邻单元格
- 需要Excel 365或Excel 2021版本支持
- 如果原始数组是单列,结果也会是单列
- 可以与其他动态数组函数(如FILTER、SORT)配合使用