求Excel公式:按Column D值差≥2分组,每组行数可调整
Excel分组公式实现方案
原始数据
| Column A | Column B | Column C | Column D |
|---|---|---|---|
| Text1 | Text1 | Text1 | 189.21 |
| Text2 | Text2 | Text2 | 180.20 |
| Text3 | Text3 | Text3 | 236.67 |
| Text4 | Text4 | Text4 | 204.23 |
| Text5 | Text5 | Text5 | 205.21 |
| Text6 | Text6 | Text6 | 209.20 |
需求
用Excel公式实现数据分组,满足以下规则:
- 每组默认3行(可自定义行数)
- 同组内Column D任意两个值的差值≥2
- 数据不重复,分组方式不限
示例分组
分组1
| Column A | Column B | Column C | Column D |
|---|---|---|---|
| Text1 | Text1 | Text1 | 189.21 |
| Text2 | Text2 | Text2 | 180.20 |
| Text4 | Text4 | Text4 | 204.23 |
分组2
| Column A | Column B | Column C | Column D |
|---|---|---|---|
| Text3 | Text3 | Text3 | 236.67 |
| Text5 | Text5 | Text5 | 205.21 |
| Text6 | Text6 | Text6 | 209.20 |
实现方案
动态数组版本(Excel 365/2021)
在数据旁插入辅助列(比如E列),E2单元格输入以下公式后下拉填充至所有行:
=LET( currentVal, D2, groupSize, 3, // 可修改为每组需要的行数 minDiff, 2, // 可修改为要求的最小差值 usedVals, FILTER(D$2:D$7, E$1:E1 <> ""), usedGroups, FILTER(E$1:E1, E$1:E1 <> ""), availableGroups, UNIQUE(usedGroups), validGroups, FILTER( availableGroups, COUNTIFS(usedGroups, availableGroups) < groupSize, MIN(ABS(currentVal - FILTER(usedVals, usedGroups = availableGroups))) >= minDiff ), IF(COUNTA(validGroups) > 0, INDEX(validGroups, 1), MAX(usedGroups, 0) + 1) )
公式会自动为每行分配合规的组号,之后通过筛选辅助列的组号即可提取对应分组。
旧版Excel兼容方案
若你的Excel不支持动态数组,可按以下步骤操作:
- 先对D列排序(可选,能减少组内冲突概率)
- E2单元格输入
1 - E3单元格输入公式后下拉填充:
=IF( AND(COUNTIF(E$1:E2, E2) < 3, MIN(ABS(D3 - D$2:D2)) >= 2), E2, MAX(E$1:E2) + 1 )
此方案逻辑简洁,适合数据量较小的场景,若出现个别不符合规则的情况可手动调整组号。
内容的提问来源于stack exchange,提问作者AdamW
相关产品推荐
相关产品推荐

