【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)配合使用
相关推荐
hPw0eKIqD12 小时前
使用二次封装的Excel COM 组件操作Excel\WPS ET中的区域、行和列
excel·wps
冰心孤城19 小时前
Excel: xls与xlsx格式转换排坑指南
java·前端·excel
金豆呀1 天前
WPS批量提取Word文档内容生成固定格式Excel表格
word·excel·wps
Access开发易登软件1 天前
Access 怎么做前后端分离?用 Web API 读写 SQL Server
前端·数据库·人工智能·microsoft·excel·access
红莲凪是2 天前
使用二次封装的Excel COM 组件操作Excel\WPS ET IExcelRange 高级应用
python·excel·wps
用户298698530142 天前
如何使用免费工具在线将 Excel 转换为 XML 格式
人工智能·后端·excel
开开心心就好2 天前
内存清理工具定时自动清理开机自启动
java·开发语言·elasticsearch·ocr·excel·音视频·big data
开开心心就好2 天前
电脑内存优化工具一键释放内存超简单
java·开发语言·macos·arcgis·ocr·excel·音视频
随手工具-Excel, pdf, SQL2 天前
没有 SSMS 导入向导?Excel/CSV 一键生成 SQL Server INSERT 脚本
excel·sql server·在线工具·insert·测试数据·ssms·t-sql
SunnyDays10113 天前
Python 将 Excel(XLS/XLSX)转换为 JSON:导出工作簿、工作表、单元格区域与自定义 JSON 结构
python·json·excel·excel 转 json·导出 excel 到 json·xlsx 转 json·xls 转 json