能否用单个公式实现表格上方值填充与特定行筛选?
需求与解决方案
问题描述
我有一个包含group、sub、spec列及12个月数值列的表格,需要完成两项操作:
- 将
group、sub列的空白单元格填充为上方最近的有效值 - 筛选出仅
spec列有内容的行
请问有没有能同时实现这两个需求的单个公式?
给定数据
| group | sub | spec | sum | mon1 | mon2 | mon3 |
|---|---|---|---|---|---|---|
| a | 3 | 3 | 3 | |||
| b | 2 | 3 | 3 | |||
| c | 5 | 1 | 2 | 2 | ||
| c1 | 6 | 3 | 2 | 1 | ||
| b1 | 3 | 4 | 5 | |||
| c2 | 5 | 2 | 1 | 2 | ||
| a1 | 5 | 5 | 5 | |||
| b2 | 2 | 3 | 4 | |||
| c3 | 9 | 2 | 3 | 4 | ||
| c4 | 6 | 2 | 2 | 2 | ||
| c5 | 4 | 1 | 2 | 1 |
期望输出
| group | sub | spec | sum | mon1 | mon2 | mon3 |
|---|---|---|---|---|---|---|
| a | b | c | 5 | 1 | 2 | 2 |
| a | b | c1 | 6 | 3 | 2 | 1 |
| a | b1 | c2 | 5 | 2 | 1 | 2 |
| a1 | b2 | c3 | 9 | 2 | 3 | 4 |
| a1 | b2 | c4 | 6 | 2 | 2 | 2 |
| a1 | b2 | c5 | 4 | 1 | 2 | 1 |
解决方案(Excel动态数组公式)
可以用Excel动态数组函数组合实现,单个公式即可完成两项需求。假设数据在A1:G11区域(表头在第1行),在空白单元格输入以下公式:
=FILTER( HSTACK( SCAN("",A2:A11,LAMBDA(a,b,IF(b<>"",b,a))), SCAN("",B2:B11,LAMBDA(a,b,IF(b<>"",b,a))), C2:G11 ), C2:C11<>"" )
公式解析
SCAN("",A2:A11,LAMBDA(a,b,IF(b<>"",b,a))):遍历group列,将空白单元格替换为上方最近的有效值- 第二个
SCAN函数同理处理sub列 HSTACK:将处理后的group、sub列与原表格的spec到数值列合并为新数组FILTER:筛选出spec列(对应新数组第3列)不为空的行
如果是不支持动态数组的旧版Excel,无法用单个公式实现,需分两步操作:先通过填充公式补全空白单元格,再手动筛选spec列非空的行。
内容的提问来源于stack exchange,提问作者Sherkh
相关产品推荐
相关产品推荐

