如何在Excel工作表中提取每组的前2行数据?
Excel提取每组前2行数据的公式方案
原始数据
| 列1 | 列2 |
|---|---|
| Apple | A102012 |
| Apple | A102013 |
| Apple | A102014 |
| Banana | A102015 |
| Banana | A102016 |
| Banana | A102017 |
| Coconut | A102017 |
预期结果
| 列1 | 列2 |
|---|---|
| Apple | A102012 |
| Apple | A102013 |
| Banana | A102015 |
| Banana | A102016 |
| Coconut | A102017 |
方案1:适用于Excel 365/2021(支持动态数组)
假设数据区域为A2:B8,表头在A1:B1,在空白单元格(比如D2)输入以下公式,回车后会自动溢出所有符合条件的行:
=FILTER(A2:B8, COUNTIFS(A2:A8, A2:A8, ROW(A2:A8), "<="&ROW(A2:A8))<=2)
公式逻辑:
COUNTIFS(...):计算当前行在对应分组内的顺序编号(比如Apple的第三行编号为3)<=2:仅保留分组内编号≤2的行FILTER:提取所有符合条件的整行数据
方案2:适用于旧版Excel(无动态数组支持)
步骤1:标记分组序号
在C2单元格输入公式,下拉填充到数据最后一行:
=COUNTIF($A$2:A2, A2)
该公式会给每个分组的行依次标记1、2、3...的序号。
步骤2:筛选提取
直接筛选C列中值≤2的行,复制粘贴到目标区域即可。
如果想用公式直接提取,可在D2单元格输入数组公式(输入后按Ctrl+Shift+Enter确认),再下拉填充:
=INDEX(A:A, SMALL(IF(COUNTIF($A$2:$A$8, $A$2:$A$8)>=ROW(A1), IF(COUNTIF($A$2:A2, A2)<=2, ROW($A$2:$A$8))), ROW(A1)))
(提取列2数据时,将公式中的A:A改为B:B即可)
内容的提问来源于stack exchange,提问作者NevetsKuro
相关产品推荐
相关产品推荐

