
假设你表1的某个值在A1,表2与表1A1单元格相同的值在B列,你要引用的结果在C列,则在表1输入以下数组公式=INDIRECT("SHEET2!"&ADDRESS(SMALL(IF(Sheet2!B:B=$A$1,ROW(Sheet2!B:B),""),ROW(1:1)),3,4))并同时按CTRL,SHIFT,ENTER三个键结束,然后下拉公式就可以了
C4单元格输入以下数组公式,按Ctrl+Shift+Enter组合键,然后向下填充公式
=INDEX(B:B,SMALL(IF(MATCH(B$4:B$1000,B$4:B$1000,)=ROW($4:$1000)-3,ROW($4:$1000),4^8),ROW(A1)))&""
公式中首先要保持所有的维度一致,保持引用区域的行绝对引用状态,然后如果首行与第一行相隔多少行,就减去多少行。
Excel中用index、small和If函数组合提取数据,一般得用数组公式,也就是Ctrl+Shift+Enter三键结束,否则容易出错。
软件版本:Office2013
举例说明如下:
利用公式提取A列中的不重复数据:
输入公式如下:
如果是Enter键结束数组公式,往下拖动填充公式时,就会出现错误:
用Ctrl+Shift+Enter,往下填充时就会提取正确的内容:
解释公式很费事的哦!
原公式=INDEX(表一!$B:$B,SMALL(IF(表一!$A$2:$A$101=$A2,ROW($1:$100),4^8),COLUMN(A:A)))&""
从里到外分拆:
1、ROW()——行号函数,引用$1:$100即从第一行到第100行。用“$”为绝对引用,表格向下填充时,所引用的区域位置绝对不变。
2、COLUMN()——列号函数。引用A列返回1、B列返回2、……
3、IF()——条件判断函数。语法IF(条件,符合条件返回值,否则返回值)。
IF(表一!$A$2:$A$101=$A2,ROW($1:$100),4^8)——当表一的A2:A101=A2时,依次返回1起的行号。否则,返回4^8,即2003版本的最下面行号,其实也就是要返回空值(一种习惯写法)。
4、SMALL()——最小值位数。返回赋予参数的第几个最小值。
SMALL(IF(表一!$A$2:$A$101=$A2,ROW($1:$100),4^8),COLUMN(A:A))——按IF()返回的符合条件的行号从小到大排序。
5、INDEX()——索引函数。语法(引用区域,行号,列号,引用区域号)。
=INDEX(表一!$B:$B,SMALL(IF(表一!$A$2:$A$101=$A2,ROW($1:$100),4^8),COLUMN(A:A)))
引用表一的B列,返回的行号为SMALL()函数求得的大小序号ROW($1:$100),并按COLUMN(A:A)依次返回B列的第几行。
6、最后的&"",是怕向右填充到B列没有符合条件的对应数据时会返回0,加""则返回空文本。
http://zhidaobaiducom/question/511496068html
(('2014年考核'!$A$1:$A$20=A4)('2014年考核'!$C$1:$C$20=P2),ROW($2:$20)
$A$1:$A$20和$C$1:$C$20与$2:$20区域不匹配
前者是20个单元格区域,后者是19个单元格区域
ROW(单位机构信息表!$B$1:$B$1000)是返回对应的数字单元格的行号的意思。
那后边的2^16是一个相当大的数,做什么用的可以不管,只需要知道它比引用区域的行号要大得多就行了。
SMALL函数在这里是取IF函数中所有符合条件的行号中第k小的一个数据,不是排序。
ROW($A4)是SMALL函数的第2个参数,指定取第4ROW($A4)小的行号。
感觉你写的很复杂 也很乱! 你可以先做下数据处理先! 看起来好看点,你这样太乱了!你可以先把A-E列处理下 让它具有唯一性! 那样再排序! 排好序了 你在用函数把数据拆分开来就能达到你的效果了! 你这样整感觉又乱又麻烦! 希望能帮到你!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)