excel函數怎么移除單元格后的值?excel函數獲取單元格區域中移除空單元格后的值,如下圖1所示,列C中有很多空單元格,使用公式將其整理,移除空單元格并將值放置在列D中。
圖1
自已動手試一試。
公式
在單元格D2中,輸入數組公式:
=IFERROR(OFFSET($C$2,SMALL(IF((List)>1,ROW(List),””),ROW(E1))-2,0),””)
下拉至單元格出現空為止。
公式中的List為名稱,引用列C中的單元格區域C2:C10000。
公式解析
主要看公式中的:
OFFSET($C$2,SMALL(IF((List)>1,ROW(List),””),ROW(E1))-2,0)
OFFSET函數的語法為:
OFFSET(reference, rows, cols, [height],[width])
與公式相對應:
參數reference的值為:$C$2
參數rows的值為:SMALL(IF((List)>1,ROW(List),””),ROW(E1))-2
參數cols的值為:0
也就是說,OFFSET函數返回以單元格C2為起點向下SMALL(IF((List)>1,ROW(List),””),ROW(E1))-2行的單元格區域。
重點看看:
SMALL(IF((List)>1,ROW(List),””),ROW(E1))-2
我們要從IF((List)>1,ROW(List),””)中獲取第ROW(E1)小的值,而ROW(E1)=1,即最小的值。
對于IF((List)>1,ROW(List),””)來說,因為List是一個9999行1列的區域,所以
(List)>1
解析為由TRUE/FALSE值組成的9999行1列的數組。列C中單元格的值大于1,返回TRUE,否則返回FALSE,在工作表中演示如下圖2所示。
圖2
而ROW(List)則是由第2行至第10000行的行號組成的數組。
那么,IF語句生成的數組由列C中含有值對應的行號和空組成,即:
{2;””;””;””;6;7;8;””;””;””;””;13;14;15;…}
相應地在工作表中演示如下圖3所示。
圖3
將上述生成的數組代入SMALL函數中:
SMALL(IF((List)>1,ROW(List),””),ROW(E1))
即:
SMALL({2;””;””;””;6;7;8;””;””;””;””;13;14;15;…},1)
得到:
2
將公式向下拉時,ROW(E1)將自動更新為ROW(E2)、ROW(E3)、…等,即返回值2、3、…,獲取數組中第2小的值、第3小的值、…
相應地在工作表中演示如下圖4所示。
圖4
這樣,在單元格D2中的公式最終等價為:
OFFSET($C$2, 2-2,0)
得到單元格C2中的值。
在單元格D3中的公式最終等價為:
OFFSET($C$2, 6-2,0)
得到單元格C6中的值。
在單元格D4中的公式最終等價為:
OFFSET($C$2, 7-2,0)
得到單元格C7中的值。
依此類推。