公式如下:
=INDEX(A:A,SMALL(IF(A:A<>"",ROW(A:A),4^8),ROW(A1)))&""
在新列的第一个单元格中输入以上公式,然后Ctrl+Shift+Enter;下拉单元格,保持队形。
注意:公式输入之后不是直接回车,是按Ctrl+Shift加回车。
图例:
当然具体写法根据具体场景略有差别,公式含义:
EXCLE 之 INDEX:
INDEX( )用法有两种:
1.数组形式——INDEX(array,row_num,column_num)
数组形式通常返回数值或数值数组;
- array - 选择区域
- row_num - 选定区域(array)中第row_num行
- column_num - 选定区域(array)中第column_num列
- 最后返回:区域(array)中第row_num行第column_num列的值。
2.引用形式——INDEX(reference,row_num,column_num,area_num)。
引用形式通常返回引用。
此处使用INDEX( )的数组形式。
EXCLE 之 SMALL:
1.small函数的语法格式 : SMALL(array,k)
- array - 选择数据范围
- k - 选定范围(array)里的第k个位置(从小到大)
EXCLE 之 IF:
1.if为excle的常用函数,语法:IF(Logical_test,[value_if_ture],[value_if_false])
- Logical_test - 表达式
- [value_if_ture] - 输入为表达式结果为真时想要的值
- [value_if_false] - 输入为表达式结果为假时想要的值
即 IF(表达式,结果为真是返回值,结果为假时返回值)
分解公式:
=INDEX(A:A,SMALL(IF(A:A<>"",ROW(A:A),4^8),ROW(A1)))&""
IF(A:A<>"",ROW(A:A),4^8)
SMALL(IF(A:A<>"",ROW(A:A),4^8),ROW(A1))
INDEX(A:A,SMALL(IF(A:A<>"",ROW(A:A),4^8),ROW(A1)))
1.IF(A:A<>"",ROW(A:A),4^8)
当A列值不为空时返回此行向下的一个数组区域(array,区域将作为small函数的参数),为空时返回4^8。
另有写法IF($A$1:$A$100<>"",ROW($A$1:$A$100),4^8) ,同上。
注:4^8,4的8次方为excel2003的最大行数,以不小于数据行数为准
2.SMALL(IF(A:A<>"",ROW(A:A),4^8),ROW(A1))
如果SMALL函数接收到的时IF返回的数组(array),返回对应的行号。
3.INDEX(A:A,SMALL(IF(A:A<>"",ROW(A:A),4^8),ROW(A1)))
返回A:A中对应行号(SMALL函数的结果)里的值。