【=IF(H3="","",INDEX(A:A,SMALL(IF($D$3:$F$7=H3,ROW($3:$7),66536),COUNTIF(H$3:H3,H3))))】贵请解释下
66536可能是手误了,应该是65536,也就是2003版Excel的最后一行的行号。具体用在哪里已经忘了,不过就公式本身而言可以试着解释下:
=IF(H3="","",INDEX(A:A,SMALL(IF($D$3:$F$7=H3,ROW($3:$7),66536),COUNTIF(H$3:H3,H3))))
看上去似乎公式应该位于第3行,以本行的H列的值作为参照值,IF函数保证了当H3是空白时,公式所在位置也是空白,主要焦点着重于H3有数据的时候,也就是IF函数在H3有数据的时候,返回的第三个参数:
INDEX(A:A,SMALL(IF($D$3:$F$7=H3,ROW($3:$7),66536),COUNTIF(H$3:H3,H3)))
Index函数表示到A列去取值,所取的值的行号由其第二个参数决定:
SMALL(IF($D$3:$F$7=H3,ROW($3:$7),66536),COUNTIF(H$3:H3,H3))
Small函数在一个序列的数字中,取出第N小的数值,这里分成两部分说明:
a)IF($D$3:$F$7=H3,ROW($3:$7),65536)
(注:整个公式应该要求的是数组公式的输入方式,主要作用就在这里的IF函数,普通输入方式下IF函数只执行一次,数组公式输入的情况下,原本是一个变量的位置,如果现在是数组了,就会把数组中的所有内容逐次代入从而执行多次)
一个IF函数来判断一个固定区域$D$3:$F$7中的每个单元格的值是否与H3相同,
相同-->就把这个单元格所在的行号返回;
不同-->把最大行号返回
这样在数组公式的情况下,这个IF公式就返回了这样一个序列,,这个序列中要么是【在固定区域$D$3:$F$7中的<与本行H3相同值的>单元格】的行号,要么就是65536
b)COUNTIF(H$3:H3,H3)
统计出本行的这个H3的值,从第3行开始到本行出现的次数(这里有个小技巧就是,适当地使用绝对引用和相对引用,使得当公式下拉后,countif统计的范围始终是第3行至本行)
a+b)作为Small的两个部分,前一部分得到了一个包含需要的行号和不需要的65536,而后一部分则规定了取第几小的哪一个数字(行号),结合起来后就返回了交给Index的【当前行应该在<A:A中取哪一个>单元格】的行号
以上,请对照你的数据和数据摆放方式来鉴定和理解。若有不明白的,请(指定段落编号和章节号)进行追问