問題來源
學習群里,有朋友提出的問題:
如下兩個數據表,一個是“全部”工作表,一個是“已對”(已經核對)工作表,如何使得“全部”工作中,每核對一條,數據會自動從“全部”工作表“自動”跑到“已對”工作表,即:

公式解析
ROWS(A:A):
整個工作表的行數,EXCEL2016默認工作表行數為1048576。此處用工作表最大行數,使得不管數據有多少行,公式都能使用。
IF(全部!$F:$F=”已對”,ROW(全部!A:A),ROWS(A:A)):
用IF函數,建立一新的數組,這一新的數組建立的規則是:
如果“全部”工作表中F列單元格內容等于“已對”,則返回該單元格所在的行,否則返回整個工作表的行數。
所以:
如果“全部”工作表中第二行數據已經核對(標題行為第一行),“已對”工作表中A2單元格的公式,此部分返回的數組是:
{1048576;2;1048576;1048576;1048576;1048576;1048576;1048576;1048576;1048576;……}
如果“全部”工作表中第五行數據已經核對(標題行為第一行),“已對”工作表中A2單元格的公式,此部分返回的數組是:A3單元格的公式,此部分返回的數組是:
{1048576;1048576;1048576;1048576;5;1048576;1048576;1048576;1048576;1048576;……}
SMALL(IF(全部!$F:$F=”已對”,ROW(全部!A:A),ROWS(A:A)),ROW(A1)):
從上一步數組中取出的ROW(A1)小的數值。
ROW(A1)是一個動態的數值,公式往下填充一行,行數加1,即當公式在A3單元格時,是ROW(A2),當公式填充到A4單元格是,是ROW(A3),當到A5單元格時,是ROW(A3)……
這樣,就在A2、A3、A4、A5……的數組中找到了第1、2、3、4小的值,即第一條、第二條、第三條、第四條……已經核對的數值。
$F:$F,F列絕對引用,因為不管公式向下、向右填充,是否核對都在F列。
INDEX(全部!A:A,SMALL(IF(全部!$F:$F=”已對”,ROW(全部!A:A),ROWS(A:A)),ROW(A1))):
當公式在A2單元格時,返回第一條“已對”數據的A列的值,當公式在A3單元格時,返回第二條“已對”數據的A列的值……
因為公式中IF部分是數組計算,所以公式以三鍵組合結束。
公式向右填充,得到“已對”數據B列值……
INDEX(全部!A:A,SMALL(IF(全部!$F:$F=”已對”,ROW(全部!A:A),ROWS(A:A)),ROW(A1)))&””:
在最后加上&””,這一步是容錯處理。用空單元格與空文本合并返回空文本的特性,將超出結果數量的部分不顯示出來。
公式雖然麻煩,但用于核對數據,絕對是一絕,試試吧!






