【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)配合使用
相关推荐
岁月@可回首21 小时前
两个excel中寻找相同关键词下的内容,将一个需要的内容复制到另一个excel
excel
云纳星辰怀自在21 小时前
基于VBA调用API在Excel中自动生成音标和翻译
excel·单词自动生成音标·excel自动翻译
daols881 天前
vue2 表格如何使用 vxe-table 带列头复制单元格内容同步到 excel 中
vue.js·excel·vxe-table
JSON_L1 天前
Fastadmin Excel 导入实现
php·excel·fastadmin
E_ICEBLUE2 天前
Excel vs CSV:在系统数据处理中该如何选择?
java·excel·csv·格式转换
weixin_318088112 天前
Power query代替PowerBI加载数据到excel
excel·powerbi·power query
weixin_419349792 天前
excel批量把自身加上链接,这一列本身就是网址
excel
meng半颗糖2 天前
vue3+typeScript 在线预览 excel,word,pdf
typescript·word·excel
开开心心_Every2 天前
时间自动校准工具:一键同步网络服务器时间
游戏·随机森林·微信·pdf·逻辑回归·excel·语音识别
清山博客2 天前
EXCEL根据身份证号计算出生日期和截止某日的年龄
excel