Excel求助:如何将原表中司机为NS的行提取至新工作表?
嗨,我来帮你解决这个Excel数据提取的问题!根据你描述的场景——从原表(表头在A4:M4,超1000行数据)里提取司机姓名为NS或新工作表A1单元格内容的行,下面给你两种实用方案,适配不同版本的Excel:
提取指定司机的行数据
先明确你的数据结构:原表表头在第4行,Driver列对应C列(对应你给出的数据示例)。
方案1:用FILTER函数(Excel 365/2021及以后版本)
这是最简洁的方案,专门为筛选数据设计,比INDEX/MATCH组合好用得多。
假设你要在新工作表的A2单元格开始输出结果,直接输入以下公式:
=FILTER(原表!A4:M1004, (原表!C4:C1004=A1)+(原表!C4:C1004="NS"), "无匹配数据")
公式说明:
原表!A4:M1004:替换成你原表实际的完整数据区域(这里按1000行数据估算,你可以根据实际行数调整)(原表!C4:C1004=A1)+(原表!C4:C1004="NS"):+代表逻辑「或」,只要Driver列等于新表A1的内容,或者等于NS,就会被筛选出来"无匹配数据":可选参数,当没有符合条件的行时显示提示文本,你可以按需修改或删除
输入公式后,Excel会自动溢出显示所有符合条件的行(连表头都会带上)。如果不需要表头,把原表数据区域改成原表!A5:M1004即可,表头可以手动复制原表A4:M4到新表A1:M1。
方案2:用INDEX+SMALL+IF数组公式(旧版Excel,无FILTER函数)
如果你用的是旧版Excel(比如2019及更早版本),可以用这个数组公式,输入后需要按Ctrl+Shift+Enter确认(注意:新版Excel自动支持数组,不用按组合键,但旧版必须按)。
在新工作表的A2单元格输入以下公式:
=IFERROR(INDEX(原表!A$4:M$1004, SMALL(IF((原表!C$4:C$1004=A$1)+(原表!C$4:C$1004="NS"), ROW(原表!A$4:A$1004)-ROW(原表!A$4)+1), ROW(A1)), COLUMN(A1)), "")
然后横向拖动填充到M列,再纵向拖动填充直到出现空白单元格即可。
公式说明:
IF((原表!C$4:C$1004=A$1)+(原表!C$4:C$1004="NS"), ROW(原表!A$4:A$1004)-ROW(原表!A$4)+1):找出所有符合条件的行在原数据区域内的相对行号SMALL(..., ROW(A1)):依次提取第1、2、3...个符合条件的行号INDEX(原表!A$4:M$1004, ..., COLUMN(A1)):根据行号和列号提取对应单元格的数据IFERROR(..., ""):当没有更多符合条件的数据时显示空白,避免出现错误值
为什么你的INDEX/MATCH组合没成功?
INDEX/MATCH通常用来提取单个值,要提取整行所有数据的话,需要配合数组逻辑,而且处理「或」条件时比较繁琐——你需要用数组形式的MATCH来找到所有符合条件的行号,再结合SMALL函数逐个提取,不如上面两种方案直接高效。
内容的提问来源于stack exchange,提问作者andrewTPT
相关产品推荐
相关产品推荐

