excelperfect 本次的练习是:如下图1所示,有两列数据,要求在列B中输入数据后,自动匹配其上方最近一次出现的该数据并提取对应的列A中的数据放置到列C对应的单元格中,例如,单元格B6中输入1后,与其上方的单元格B3中的数据相同,因此取其对应的列A中的单元格A3中的数据输入到单元格C6中;同样,在单元格B11中输入数据3后,因其上方出现了三个3,取最接近的单元格B10对应的列A中的单元格A10中的数据1输入到单元格C11中。(这是最近一名网友的提问,特引于此作为一道公式练习题) 图1 要求在单元格C4中输入公式,然后拖放复制该公式至下方数据区域。 先不看答案,自已动手试一试。 解决方案 下面是我编写的一个数组公式。 在单元格C4中输入数组公式: =IFERROR(INDEX($A$1:$A4,LARGE(IF($B$3:$B3=$B4,ROW($B$3:$B3),''),1)),'') 拖至单元格C27。 解析 本题最关键的是要找到当前单元格中输入的数据在其上方单元格中出现的位置或者行号,这可以使用经典的IF/ROW/LARGE函数组合。其中,IF函数用于比较并得到相应由ROW函数得到的行号组成的数组,LARGE函数取其中最大的一个数值即为数据最近出现的行。 例如,单元格C11中的公式: =IFERROR(INDEX($A$1:$A11,LARGE(IF($B$3:$B10=$B11,ROW($B$3:$B10),''),1)),'') 其中: IF($B$3:$B10=$B11,ROW($B$3:$B10),'') 用来获取单元格B11上方区域B3:B10中与B11中的值相同的数据所在的行号,结果为: {'',4;'','','',8,'',10} 然后,使用LARGE函数获取最近相同值所在的行号值(即数组中最大值),公式中的LARGE函数解析为: LARGE({'',4;'','','',8,'',10},1) 结果为: 10 传递给INDEX函数,得到: INDEX($A$1:$A$11,10) 结果为单元格A10中的值: 1 如果找不到,则会出错,因此使用IFERROR函数来解决。 注意,公式中单元格引用使用了混合引用。 本例是一种比较典型的用法,有兴趣的朋友可以研究一下,练练手。 欢迎在下面留言,完善本文内容,让更多的人学到更完美的知识。 |
|
来自: hercules028 > 《excel》