Excel:查找指定区域内-1的所有实例并返回对应首行值
提取表格中值为-1的单元格对应A列与首行值的公式方案
已实现的A列值提取
你现用的公式可以正确返回对应-1单元格的A列内容:
=IFERROR(INDEX($A$2:$A$8,SMALL(IF($B$2:$G$8=-1,ROW($B$2:$G$8)-1),ROW(1:1))),"")
核心逻辑是用IF定位所有值为-1的单元格行号,SMALL按顺序提取行号偏移量,最后通过INDEX匹配A列数据,IFERROR处理无结果的情况。
提取对应首行值的公式
要匹配-1单元格对应的首行(第1行)标题,用列号匹配逻辑即可,公式如下:
=IFERROR(INDEX($B$1:$G$1,SMALL(IF($B$2:$G$8=-1,COLUMN($B$2:$G$8)-COLUMN($B$1)+1),ROW(1:1))),"")
公式拆解:
IF($B$2:$G$8=-1,COLUMN($B$2:$G$8)-COLUMN($B$1)+1):定位值为-1的单元格,计算其在首行区域(B1:G1)内的列位置(避免硬编码减1,适配不同起始列)SMALL(...,ROW(1:1)):按顺序提取符合条件的列位置INDEX($B$1:$G$1,...):根据列位置匹配首行标题IFERROR:无更多结果时返回空值
动态数组简化方案(Excel 365/2021)
如果你的Excel支持动态数组,无需下拉填充,可一次性生成所有结果:
提取所有A列对应值:
=FILTER($A$2:$A$8,$B$2:$G$8=-1,"")
提取所有首行对应值:
=FILTER(TRANSPOSE($B$1:$G$1),TRANSPOSE($B$2:$G$8)=-1,"")
或者直接生成两列结果:
=HSTACK(TOCOL(IF($B$2:$G$8=-1,$A$2:$A$8,""),3),TOCOL(IF($B$2:$G$8=-1,$B$1:$G$1,""),3))
这个公式会自动遍历表格,把所有值为-1的单元格对应的A列值和首行标题整理成两列。
示例输出
假设原始表格:
| A | Q1 | Q2 | Q3 |
|---|---|---|---|
| 产品A | 10 | -1 | 15 |
| 产品B | -1 | 20 | 5 |
| 产品C | 8 | 12 | -1 |
最终结果会是:
| A列值 | 首行值 |
|---|---|
| 产品A | Q2 |
| 产品B | Q1 |
| 产品C | Q3 |
内容的提问来源于stack exchange,提问作者coduer
相关产品推荐
相关产品推荐

