如何用Excel公式从其他工作表提取符合状态优先级的筛选数据?
数据表筛选提取方案
筛选规则
- 同一ID同时存在「未开始」和「已归档」状态时,优先保留「未开始」对应的整行数据
- 仅存在「已归档」状态的ID,直接保留该行数据
原始数据表(中文翻译)
| ID | 任务名称 | 状态 | 其他列 |
|---|---|---|---|
| 1 | 任务1 | 已归档 | 随机文本 |
| 2 | 任务2 | 未开始 | 随机文本 |
| 2 | 任务2 | 已归档 | 随机文本 |
| 3 | 任务3 | 未开始 | 随机文本 |
| 4 | 任务4 | 已归档 | 随机文本 |
| 5 | 任务5 | 已归档 | 随机文本 |
| 5 | 任务5 | 未开始 | 随机文本 |
实现方法
方法一:Excel公式法
在原始数据表新增辅助列(如E列),标记需保留的行:
在E2单元格输入以下公式,下拉填充至所有行:=IF(COUNTIF($A:$A,A2)=1,TRUE,IF(C2="未开始",TRUE,FALSE))逻辑:ID仅出现一次则标记为保留;ID重复时,仅「未开始」状态的行标记为保留。
在最终数据表提取数据:
在最终数据表A2单元格输入公式,直接提取符合条件的整行:=FILTER(原始数据表!A:D,原始数据表!E:E=TRUE)注:旧版Excel不支持
FILTER的话,可使用高级筛选功能,以辅助列为条件筛选。
方法二:Power Query高效提取(适合大数据量)
- 选中原始数据表,点击「数据」→「从表格/区域」,将数据导入Power Query编辑器。
- 按ID分组:点击「转换」→「分组依据」,分组列选「ID」,新列名设为「保留行」,操作选「所有行」。
- 添加自定义列筛选优先级:点击「添加列」→「自定义列」,输入公式:
= if List.Contains([保留行][状态], "未开始") then Table.SelectRows([保留行], each [状态] = "未开始") else [保留行] - 展开自定义列,删除冗余列后,点击「关闭并上载」,结果将自动加载到最终数据表。
最终提取结果
| ID | 任务名称 | 状态 | 其他列 |
|---|---|---|---|
| 1 | 任务1 | 已归档 | 随机文本 |
| 2 | 任务2 | 未开始 | 随机文本 |
| 3 | 任务3 | 未开始 | 随机文本 |
| 4 | 任务4 | 已归档 | 随机文本 |
| 5 | 任务5 | 未开始 | 随机文本 |
内容的提问来源于stack exchange,提问作者Tracey
相关产品推荐
相关产品推荐

