使用公式將工作表內一列中的重復項依次移到一行中。具體如下圖所示,要將工作表:

公式思路
將列A中的值與“數據”工作表列A中的值相比較,如果相等則獲取“數據”工作表中該值所在行的行號,然后根據獲取的行號在“數據”工作表列B中找到相應的值并放置在本單元格中,如果沒找到則為空。
公式解析
數據!$A$2:$A$7=$A2將單元格A2的值與“數據”工作表列A的值比較,因為前3行都相等,因此結果為:{TRUE;TRUE;TRUE;FALSE;FALSE;FALSE}。
ROW(數據!$A$2:$A$7)-ROW(數據!$A$2)+1獲取一個值為1至6的數組:{1;2;3;4;5;6}。
IF(數據!$A$2:$A$7=$A2,ROW(數據!$A$2:$A$7)-ROW(數據!$A$2)+1)的結果為數組{1;2;3;FALSE;FALSE;FALSE}。
COLUMNS($B2:B2)返回當前單元格與B2單元格相間隔的列數,因為當前單元格就在B2,因此返回1。該數值用來作為SMALL函數的參數,獲取第k個最小值,即需要第幾人數據,從而獲取列A值在“數據”工作表中對應的行號。本例中為SMALL({1;2;3;FALSE;FALSE;FALSE},1)。返回第1個最小值,即1。
然后,該值用作INDEX函數的參數:INDEX(數據!$B$2:$B$7,1),獲取“數據”工作表列B中相應行的數據,即“數據”工作表單元格B2中的數據。
IFERROR函數用來在沒有找到數據時給單元格填充空值,而不是顯示錯誤值。
小結
個人覺得這個例子對于理解數組公式特別有用,值得反復練習與琢磨。
舉一反三,本示例也可以用作查找重復值的參考方法。






