使用IF语句以NAN为断点实现列分段求和及NAN值填充
基于IF函数的分段求和实现方案
假设你的数据第1行为表头,有效数据从第2行开始,A列为Name字段、B列为Sold字段,和给出的示例结构完全一致,按以下步骤操作即可:
- 第一步:插入辅助列标记分段
在C2单元格输入以下公式,下拉填充到所有数据行:=IF(ISNA(B2),A2,C1)
公式逻辑:如果当前行B列值为NAN,说明碰到了分段断点,就取当前行A列的名称作为新分段的标记;如果当前行B列是正常数值,就沿用上一行的分段标记,自动把同一段的所有行归到同一个标记下。 - 第二步:替换NAN为对应分段求和值
你可以在空白列(比如D列)D2单元格输入以下公式,下拉填充到所有数据行:=IF(ISNA(B2),SUMIF(C:C,C2,B:B),B2)
公式逻辑:如果当前行B列是NAN,就统计C列中与当前行分段标记一致的所有行的B列数值总和,也就是这个断点下方相邻段的数值和;如果当前行B列是正常数值,直接保留原值即可。
结果验证
用给出的示例数据计算后,最终B列结果如下:
| Name | Sold |
|---|---|
| ABC | 500 |
| FP | 200 |
| FP | 300 |
| XYZ | 150 |
| SC | 50 |
| SC | 100 |
注意事项
- 如果你的B列NAN是手动留的空白单元格,不是公式返回的#N/A错误值,把两个公式里的
ISNA(B2)替换成ISBLANK(B2)即可,逻辑完全不变。 - 计算完成后,可以把D列的结果复制后选择性粘贴为数值到原B列,再删除辅助列C和临时计算列D,就能得到最终的目标数据。
内容的提问来源于stack exchange,提问作者nilesh shrivastava
相关产品推荐
相关产品推荐

