Excel 把这函数由纵向变成横向。 INDEX(...,SMALL(IF(...,ROW(...)-MIN(ROW(...))+1,""),ROWS($1:1)))

感谢你的回答,很好用,谢谢! 但是实际表格要更复杂的,基础表格数据并不是单纯的在第1和第2行,要index的值也不是刚好在条件行的下一行,而是中间还隔了几行其他数据。烦请您在简单的给我讲解一下此公式的原理,我好修改。谢谢!您之前的解答如下:=INDEX(2:2,SMALL(IF($A1:$O1="衬衫",COLUMN($A:$O),4^4),COLUMN(A:A)))这里面我最不明白的就是4^4是什么意思?4的4次方?而且是if false的时候。。。我的实际表格是: E F G H I J K6 1 1 3 5 1 2 17 13 25 16 19 23 21 9我同样是要向右列出所有第6行=1的时候,第7行对应的值。您的这个公式可能简化了一些东西。麻烦了!原来的问题是这个样子的:A1=商品,B1=销量A2=衬衫,B2=13A3=裤子,B3=17A4=衬衫,B4=11。。。A15= ...C1=INDEX($B$2:$B$15,SMALL(IF($A$2:$A$15="衬衫",ROW($A$2:$A$15)-MIN(ROW($A$2:$A$15))+1,""),ROWS($1:1)))我ctrl+shit+回车,然后往下拖,C1=13,C2=11(第二次遇到“衬衫”B列里的值),你懂的。现在我的实际情况是我基础数据表格是横向的,如下:A1=商品,B1=衬衫,C1=裤子,D1=衬衫。。。O1=衬衫A2=销量,B2=13, C2=17, D2=11 。。。 O2=16A3=改好的公式就=13了,往右一拖B3就=11了。。。B*=16。
2026年09月27日 04:32
有1个网友回答
网友(1):

嗨!是这个问题吧
http://zhidao.baidu.com/question/476188770.html

数组公式,解释很费事,给你个通用公式(常见的是“列”排列):
=INDEX(要返回的列区域,SMALL(IF(条件,ROW($1:$100),4^8),ROW(1:1)))&""
按IF判断,如果符合条件,就按序返回行号(ROW),否则就返回最下面行号(4^8=65536,即2003版本最下面的一行,其实就是空行)。
而返回的行号,按照SMALL规定,从小到大(下拉时按行号ROW)先后返回。
INDEX规定了要返回列区域,即返回上面函数所返回的行号对应的单元格内容。

你的要求的以“行”排列的,我的公式:
=INDEX(2:2,SMALL(IF($A1:$O1="衬衫",COLUMN($A:$O),4^4),COLUMN(A:A)))
4^4=256,即最右边的IV列(2003版本),其实也就是返回空值。
2:2——就是要返回数据所在的行号,COLUMN()——列号。

而你的实际表格是:
E F G H I J K
6 1 1 3 5 1 2 1
7 13 25 16 19 23 21 9
同样是要向右列出所有第6行=1的时候,第7行对应的值。
请修改我的公式中当的引用就行:
=INDEX(7:7,SMALL(IF($E6:$K6=1,COLUMN($E:$K),4^4),COLUMN(A:A)))

我的公式没有简化的哦,符合我上面给你的通用公式。而那是你那个问题里面另外两个网友的公式“多”些内容而已。

话外:
1、通用公式最后的“&""”是避免当没有匹配数据时返回错误值而设置,但看你要返回的是数值,增加“&""”后返回的数值会变成文本,可借用判断式:=IF(COLUMN(A:A)>COUNTIF( $E6:$K6,1),"",原公式)。

2、我之前的公式不就是你现在要的结果吗(A3输入公式)? 哈哈!
你的提问:
现在我的实际情况是我基础数据表格是横向的,如下:
A1=商品,B1=衬衫,C1=裤子,D1=衬衫。。。O1=衬衫
A2=销量,B2=13, C2=17, D2=11 。。。 O2=16
A3=改好的公式就=13了,往右一拖B3就=11了。。。B*=16。