Excel技术问询:从F列提取符合条件的未重复数据至D列
解决方案:从F列提取符合条件的数据到D列
针对你的需求,下面提供两种符合你描述逻辑的Excel公式实现方式,均支持自动跳过已在D列出现过前10位的内容:
方法一:优先匹配末尾条件,再跳过已添加项
从最后插入数据的行开始,先筛选出末尾10位为xxx或yyy的项,再跳过前10位已在D列出现过的内容,返回第一个符合要求的结果。
在D1单元格输入以下公式(Excel 365/2021直接回车,旧版Excel需按Ctrl+Shift+Enter作为数组公式输入):
=INDEX(F:F,SMALL(IF((OR(RIGHT(F:F,10)="xxx",RIGHT(F:F,10)="yyy"))*(COUNTIF(D$1:D1,LEFT(F:F,10))=0)*(F:F<>""),ROW(F:F),""),1))
公式说明:
OR(RIGHT(F:F,10)="xxx",RIGHT(F:F,10)="yyy"):校验F列内容末尾10位是否符合要求COUNTIF(D$1:D1,LEFT(F:F,10))=0:确保当前项的前10位未在D列已输入的内容中出现F:F<>"":排除F列的空白行SMALL(...,1):从符合所有条件的行号中取最小的(即第一个匹配项)- 下拉D列公式时,
D$1:D1会自动扩展为D$1:D2、D$1:D3,实现动态校验已插入的内容
方法二:先排除已使用项,再校验末尾条件
从最后插入数据的行开始,先筛选出前10位未在D列出现过的项,再校验其末尾是否符合xxx或yyy要求,返回第一个匹配结果。
在D1单元格输入以下公式(同样注意数组公式的输入方式):
=INDEX(F:F,SMALL(IF((COUNTIF(D$1:D1,LEFT(F:F,10))=0)*(OR(RIGHT(F:F,10)="xxx",RIGHT(F:F,10)="yyy"))*(F:F<>""),ROW(F:F),""),1))
公式说明:
- 核心逻辑与方法一一致,仅调整了条件判断的顺序,先排除已使用的前10位,再校验末尾格式
- 实际效果与方法一相同,可根据你的习惯选择
注意事项
- 如果F列数据范围固定(比如F1:F1000),建议将公式中的
F:F替换为具体范围,提升计算效率 - 若所有符合条件的内容都已提取到D列,公式会返回
#NUM!,可嵌套IFERROR处理为空白:=IFERROR(INDEX(F:F,SMALL(IF((OR(RIGHT(F:F,10)="xxx",RIGHT(F:F,10)="yyy"))*(COUNTIF(D$1:D1,LEFT(F:F,10))=0)*(F:F<>""),ROW(F:F),""),1)),"")
内容的提问来源于stack exchange,提问作者James
相关产品推荐
相关产品推荐

