发布网友 发布时间:2022-04-28 10:52
共2个回答
热心网友 时间:2023-09-29 21:05
我的【C3】单元格公式:{=IFERROR(INDEX(C$21:C$29,SMALL(IF($B$21:$B$29=$B3,ROW($1:$9),""),COUNTIF($B$2:$B3,$B3))),"")},右拉,下拉
追问麻烦解释下公式原理呗?另外,外面的大括号手输入就行?现在在外面,一会儿用电脑看看。这个公式应该是对的,我就是不会用追答
大括号是ctrl+shift+enter三键结束的来的,我从内层讲解一下:
IF($B$21:$B$29=$B3,ROW($1:$9),"")判断与查找值相符的所有数据的行号:如果在数据区域首列$B$21:$B$29的数据等于查找值$B3(绝对引用列号,防止向后填充时数据偏移),查找到,就等于1到9的行号(因为index函数引用的行号是数据本身所在的行号,不是实际行号),否则就返回空值
SMALL(IF($B$21:$B$29=$B3,ROW($1:$9),""),COUNTIF($B$2:$B3,$B3)))统计出本次查找为第几次查找并检索出该次查找对应的行号:COUNTIF($B$2:$B3,$B3)这个在small里面做索引值,small函数是查找第几小的函数,放在之前if的运算结果就是1到9的数值顺序查找。countif在这里的意思是统计本次查找是在整个查找中的第几次相同的查找,$B$2:$B3使用的是首格绝对引用向下扩展的活动区域
INDEX(C$21:C$29,SMALL(IF($B$21:$B$29=$B3,ROW($1:$9),""),COUNTIF($B$2:$B3,$B3)))根据已检索到的行号在数据区查找值:small部分已经根据在已知部分查找到对应的行号,就用index在数据里面查找对应的值,查找区域行号绝对引用,在向右填充一列,数据区相应右移一列
IFERROR(……,“”)将没有查找到返回的错误值换成空值,因为数据区只有9行,相同条目查询次数多的有6次,数据区只有3条,那么剩下的3条查询肯定会出错,所以用iferror容错
因为是数组运算,所以公式结尾ctrl+shift+enter,注意大括号不是手写的!
热心网友 时间:2023-09-29 21:06
排序一下不就行了嘛追问我这个下面 数据抓取那里的,是随机变化的