Excel公式需求:按Project_Id首行Success值批量设置Output列
正确Excel公式解决方案
需求说明
同一Project_Id(A列)分组下,取该组Success列(B列)首个出现的单元格值,将该组所有Output列(C列)单元格设为对应值:
- 若首个Success值为1,该组所有Output单元格设为1
- 若首个Success值为0,该组所有Output单元格设为0
之前公式的问题
- 公式
IF((COUNTIFS($A:$1:A1,A1,$B$1:B1,0)),0,1):逻辑错误,只要范围内存在0就返回0,未遵循“取首个值”的要求 - 公式
=IF(MIN(IF($A$2:$A$9=A2,$B$2:$B$9))=1,1,0):用MIN取组内最小值,无法定位首个值,导致应返回1的场景失效
正确公式方案
方案1:Excel 365/2021(支持动态数组)
在C2单元格输入以下公式,公式会自动溢出填充到下方单元格:
=XLOOKUP(A2,$A$2:$A$9,$B$2:$B$9,,0,1)
原理:XLOOKUP的第6参数设为1,表示匹配当前Project_Id的首次出现项,直接提取对应位置的Success值作为Output。
方案2:旧版Excel(无动态数组)
在C2单元格输入以下公式,按Ctrl+Shift+Enter确认(数组公式),然后下拉填充到所有行:
=INDEX($B$2:$B$9,MATCH(A2,$A$2:$A$9,0))
原理:MATCH找到当前Project_Id在A列首次出现的位置,INDEX提取该位置对应的B列值,即该组的首个Success值。
验证示例
| Project_Id | Success | output(公式返回值) |
|---|---|---|
| 1 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 0 | 1 |
| 2 | 0 | 0 |
| 2 | 1 | 0 |
| 2 | 1 | 0 |
| 2 | 1 | 0 |
| 2 | 1 | 0 |
| 2 | 1 | 0 |
内容的提问来源于stack exchange,提问作者Glss1
相关产品推荐
相关产品推荐

