You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Excel中使用公式(非VBA)创建精简列表

解决Excel工资表提取有效数据的问题

嘿,我完全懂你的感受——花了不少功夫把计算表的复杂公式(时薪、轮班补贴、税公式这些)都搞定了,结果卡在把有金额的条目整理到工资单格式表这一步,太让人头疼了!别着急,咱们针对不同Excel版本给你两种靠谱的解决方案:


方案1:Excel 365/2021及以后版本(推荐,最简单)

FILTER函数可以一次性提取所有符合条件的行,而且支持自动溢出,不用手动下拉填充。

假设你的计算表名称是计算表,在结果表的A32单元格输入以下公式(直接回车就行,不用数组键):

=FILTER(CHOOSE({1,2,3,4,5,6},计算表!B:B,计算表!C:C,计算表!E:E,计算表!F:F,计算表!G:G,计算表!H:H),计算表!H:H<>"", "无符合条件的数据")

公式说明:

  • CHOOSE({1,2,3,4,5,6},...):按结果表的列顺序,把需要的列组合起来——对应关系是:
    1. 计算表B列 → 结果表A列(Taxable Allowances)
    2. 计算表C列 → 结果表B列(Comments/日期)
    3. 计算表E列 → 结果表C列(Qty)
    4. 计算表F列 → 结果表D列(Rate)
    5. 计算表G列 → 结果表E列(Factor)
    6. 计算表H列 → 结果表F列(Amount)
  • 计算表!H:H<>"":筛选条件——只提取计算表H列(金额列)不为空的行
  • 最后一个参数"无符合条件的数据"是当没有符合条件的行时显示的提示,可按需修改

方案2:旧版Excel(2019及以前)

如果你的Excel版本不支持FILTER,就用INDEX+SMALL+IF的数组组合公式,需要按Ctrl+Shift+Enter完成输入(这是数组公式的要求)。

在结果表的对应单元格输入以下公式,然后下拉填充到需要的行:

A32(Taxable Allowances):

=IFERROR(INDEX(计算表!$B:$B,SMALL(IF(计算表!$H:$H<>"",ROW(计算表!$H:$H)),ROW(A1))),"")

B32(Comments/日期):

=IFERROR(INDEX(计算表!$C:$C,SMALL(IF(计算表!$H:$H<>"",ROW(计算表!$H:$H)),ROW(A1))),"")

C32(Qty):

=IFERROR(INDEX(计算表!$E:$E,SMALL(IF(计算表!$H:$H<>"",ROW(计算表!$H:$H)),ROW(A1))),"")

D32(Rate):

=IFERROR(INDEX(计算表!$F:$F,SMALL(IF(计算表!$H:$H<>"",ROW(计算表!$H:$H)),ROW(A1))),"")

E32(Factor):

=IFERROR(INDEX(计算表!$G:$G,SMALL(IF(计算表!$H:$H<>"",ROW(计算表!$H:$H)),ROW(A1))),"")

F32(Amount):

=IFERROR(INDEX(计算表!$H:$H,SMALL(IF(计算表!$H:$H<>"",ROW(计算表!$H:$H)),ROW(A1))),"")

公式说明:

  • IF(计算表!$H:$H<>"",ROW(计算表!$H:$H)):找出计算表中所有金额列不为空的行号
  • SMALL(...,ROW(A1)):按顺序取出这些行号(下拉时ROW(A1)会变成ROW(A2)、ROW(A3),依次取第1、2、3个符合条件的行)
  • INDEX(...):根据行号提取对应列的数据
  • IFERROR(...):当没有更多符合条件的数据时,显示空值,避免出现错误提示

小提示

  1. 记得把公式里的计算表换成你实际的工作表名称,比如如果你的计算表叫「薪资计算」,就改成薪资计算!$B:$B
  2. 为了提升公式运行效率,建议把整列引用(比如$B:$B)改成实际的数据范围,比如$B$2:$B$27(根据你计算表的实际行数调整)
  3. 如果计算表H列的“空值”其实是空格,把条件改成计算表!$H:$H<>TRIM("")或者LEN(计算表!$H:$H)>0

试试上面的方法,应该就能完美提取你需要的精简工资单数据了!

内容的提问来源于stack exchange,提问作者OldGreyOne

火山引擎 最新活动