Excel中返回值重复时如何获取列下一行值?船员排班去重需求
船员排班表去重解决方案
基础去重:获取符合条件的唯一船员列表
直接用UNIQUE函数包裹原有FILTER公式,自动剔除重复出现的船员姓名:
=@IFERROR(UNIQUE(FILTER('data-sheet'!B3:B36;ISNUMBER(SEARCH(T35;'data-sheet'!K3:K36)+SEARCH(O15;'data-sheet'!M3:M36)))); "No match found")
这个公式会返回所有满足团队(T35)和操作技能(O15)要求的船员,且每个姓名仅显示一次。
进阶:跨岗位排除已分配船员
如果要确保同一船员不会被分配到多个不同岗位,需要在筛选时排除已经被其他岗位选中的人员。假设第一个岗位的分配结果在X15单元格,第二个岗位的筛选公式可以调整为:
=@IFERROR(UNIQUE(FILTER( 'data-sheet'!B3:B36; ISNUMBER(SEARCH(T36;'data-sheet'!K3:K36)+SEARCH(O16;'data-sheet'!M3:M36)) * NOT(ISNUMBER(MATCH('data-sheet'!B3:B36; $X$15; 0))) )); "No match found")
关键逻辑说明:
NOT(ISNUMBER(MATCH('data-sheet'!B3:B36; $X$15; 0))):检查当前船员是否已经出现在已分配的单元格中,若已存在则排除- 若已分配的船员分布在多个单元格(如
X15:X20),直接将$X$15替换为该范围即可
注意事项
- 确认
data-sheet中的船员姓名无拼写不一致问题(如大小写、多余空格),否则UNIQUE和MATCH会将其识别为不同条目 - 若需要动态适配新增的分配岗位,可以使用命名范围或
INDIRECT函数来引用已分配区域
内容的提问来源于stack exchange,提问作者Lehnskov
相关产品推荐
相关产品推荐

