【EXCEL动态获取数据范围并整列自动填充公式】

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

最终数据效果

计算过程

  1. last_amt = MATCH找到F列最后一行是7
  2. last_rate = MATCH找到H列最后一行是8
  3. last_row = MAX(7,8) = 8
  4. 创建范围:F4:F8 和 H4:H8
  5. 逐行计算:
    • 行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
  • H4:INDEX(H:H, last_row) :同理创建H4:Hlast_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位小数)

具体计算

  1. a = ""(金额为空):直接返回空字符串
  2. r = 0 或 r = "" (税率为0或空):返回ROUND(a, 2)
  3. 其他情况 :计算不含税金额
    • 公式:a / (1 + r)
    • 含税金额 ÷ (1 + 税率) = 不含税金额
    • 结果四舍五入到2位小数

公式特点

  1. 动态范围:自动适应数据长度
  2. 容错处理:使用IFERROR处理空列
  3. 逻辑完整
    • 金额为空 → 结果为空
    • 税率为0或空 → 不扣税
    • 正常税率 → 计算不含税金额
  4. 批量计算:一次性计算所有行
  5. 精度控制:结果保留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))

注意事项

  1. MAP函数是动态数组函数,会自动溢出到相邻单元格
  2. 需要Excel 365或Excel 2021版本支持
  3. 如果原始数组是单列,结果也会是单列
  4. 可以与其他动态数组函数(如FILTER、SORT)配合使用
相关推荐
zhangjin12224 小时前
kettle插件-excel插件,kettle读取excel动态表头,kettle根据列名读取excel
excel·kettle·kettle excel插件·kettle 动态excel
远洪19 小时前
excel 找出两列不同的数据
excel
pcplayer20 小时前
非常好用的 Excel 读写控件
excel·delphi·office
Navicat中国1 天前
使用 Navicat 导入向导导入 Excel 数据时,系统提示导入成功,表中也能看到数据,但行数统计显示为 0,这是什么原因?
数据库·excel·导入
穿着内裤的外星人1 天前
触控精灵远程读写Excel步骤配置
excel
是孑然呀1 天前
【小记】excel vlookup一对多(第二篇)
excel
开开心心就好1 天前
专为视障人士设计的免费辅助工具
windows·计算机视觉·计算机外设·excel·散列表·推荐算法·csdn开发云
transformer_WSZ1 天前
excel两列数据绘制折线图
excel·折线图
蒋胜山2 天前
Excel 练习题(5)
经验分享·excel
Data-Miner2 天前
数以轻舟聚焦Excel-Agent场景:当AI做表工具学会说人话
人工智能·excel