|
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件 ★ 免费下载 ★ ★ 使用帮助★
方法二:直接使用数组函数提取法(index,indirect,offset等)(征用此楼)
本帖最后由 apirl2008 于 2012-12-14 22:00 编辑
这里就以index函数讲一下吧
在C2单元格内写入
- =INDEX($A$1:$A$17,SMALL(IF(MATCH($A$2:$A$16,$A$1:$A$16,)=ROW($A$2:$A$16),ROW($A$2:$A$16),17),ROW(A1)))
复制代码 三键结束(在编辑状态时,同时按下键盘上的ctrl,shift,enter三个键)
- MATCH($A$2:$A$16,$A$1:$A$16,)
复制代码 目的:将原数据源中的数据进行标记上位置序号,只要是相同的数据将得到相同的序号
- MATCH($A$2:$A$16,$A$1:$A$16,)=ROW($A$2:$A$16)
复制代码 用到的序号与行号进行比较,(ROW函数将会得到一个行序列号),第一次出现的值是与ROW序列号是一致的,第二次出现的序号就会与ROW序列号不同,所以将会得到一个
- {TRUE;TRUE;TRUE;FALSE;TRUE;FALSE;FALSE;FALSE;FALSE;TRUE;FALSE;FALSE;TRUE;FALSE;FALSE}
复制代码
- IF(MATCH($A$2:$A$16,$A$1:$A$16,)=ROW($A$2:$A$16),ROW($A$2:$A$16),17)
复制代码 无处不在的if函数啊,很神奇的将TURE与FALSE进行区分,只要是TURE那么得到的值就会是ROW序列号,FALSE得到的值就是17(这里的17指的是数据源后第一个空白的行号)
- SMALL(IF(MATCH($A$2:$A$16,$A$1:$A$16,)=ROW($A$2:$A$16),ROW($A$2:$A$16),17),ROW(A1))
复制代码 small函数将得到的值进行从小至大排序并提取ROW()小的值。
- =INDEX($A$1:$A$17,SMALL(IF(MATCH($A$2:$A$16,$A$1:$A$16,)=ROW($A$2:$A$16),ROW($A$2:$A$16),17),ROW(A1)))
复制代码 完成提取。
另再给几个数组函数进行参考
- =INDIRECT("a"&SMALL(IF(COUNTIF($C$1:C1,$A$2:$A$16),4^8,ROW($2:$16)),ROW($A$1)))&""
复制代码- =INDEX($A$1:$A$16,MIN(IF(COUNTIF($D$1:D1,$A$2:$A$16),4^8,ROW($2:$16))))&""
复制代码- =OFFSET($A$1,SMALL(IF(MATCH($A$2:$A$16,$A$1:$A$16,)=ROW($A$2:$A$16),ROW($A$1:$A$15),16),ROW($A1)),,,)
复制代码
好处:自动化的提取,随着数据源的变化而变化
坏处:在应对大量的数据的时候,容易假死
|
评分
-
2
查看全部评分
-
|