ExcelSmall函數(shù)的基本使用方法及與Index、IF、Match、Row組合與實(shí)現(xiàn)篩選不重復(fù)值

在 Excel 中,Small函數(shù)用于返回?cái)?shù)組或引用單元格中從小到大排序的指定數(shù)值,例如第一個(gè)最小值、第二個(gè)最小值等。它只有兩個(gè)參數(shù),一個(gè)是 Array,另一個(gè)是 k,其中 k 不能小于等于 0 且不能大于數(shù)組元素總個(gè)數(shù),否則會(huì)返回錯(cuò)誤。

Small函數(shù)常與 Index、IF、Match、Row 函數(shù)組合,一方面實(shí)現(xiàn)一對多查找,另一方面實(shí)現(xiàn)篩選重復(fù)值,這兩個(gè)方面的應(yīng)用十分廣泛。下面先看Small函數(shù)的基本用法,再看與各函數(shù)組合的擴(kuò)展應(yīng)用。

一、Excel Small函數(shù)語法

1、表達(dá)式:SMALL(Array,k)

中文表達(dá)式:SMALL(數(shù)組或引用單元格區(qū)域, 返回位置[從小到大])

2、說明:

如果 Array 為空和 k 小于等于 0 或 k 大于 Array 中數(shù)值個(gè)數(shù),Small 都返回?cái)?shù)字錯(cuò)誤值 #NUM!。

二、Excel Small函數(shù)的使用方法及實(shí)例

(一)Array 中有重復(fù)值的實(shí)例

1、雙擊 C8 單元格,把公式 =SMALL(C2:C7,3) 復(fù)制到 C8,按回車,返回第三個(gè)最小值 3.5;雙擊 C8,把 3 改為 4,按回車,返回第四個(gè)最小值 5;再次雙擊 C8,把 4 改為 5,按回車,返回第五個(gè)最小值 5;操作過程步驟,如圖1所示:

圖1

2、公式說明:

A、公式 =SMALL(C2:C7,3) 中,C2:C7 為查找區(qū)域,3 為返回位置;公式的意思是在 C2 至 C7 中返回第三個(gè)最值,C2:C7 不用排序。

B、公式 =SMALL(C2:C7,4) 和 =SMALL(C2:C7,5) 都返回 5,說明Small函數(shù)把重復(fù)值排到兩個(gè)不同的位置,如例中的 5,一個(gè)排在第四位,另一個(gè)排在第五位。

(二)返回?cái)?shù)字錯(cuò)誤值 #NUM! 的實(shí)例

1、雙擊 D8 單元格,把公式 =SMALL(D2:D7,0) 復(fù)制到 D8,按回車,返回?cái)?shù)字錯(cuò)誤值 #NUM!;雙擊 D8,把 0 改為 7,按回車,同樣返回#NUM!;操作過程步驟,如圖2所示:

圖2

2、公式 =SMALL(D2:D7,0) 在 D2:D7 中返回第 0 個(gè)最小值,由于 K 必須大于 0,所以返回 #NUM!錯(cuò)誤;而公式 =SMALL(D2:D7,7) 返回第七個(gè)最小值,由于 D2:D7 中只有 6 個(gè)值,而 K 必須小于等于 6,所以也返回 #NUM!錯(cuò)誤。

三、Excel Small函數(shù)的擴(kuò)展使用實(shí)例

(一)Index + Small + IF + Row函數(shù)組合實(shí)現(xiàn)一對多查找

Index + Small + IF + Row 組合的詳細(xì)解析,在《Excel Index函數(shù)的使用方法及與Match、Small、If配合返回行列對應(yīng)的多個(gè)值和一對多、多對多查找》一文中已經(jīng)介紹,查看請點(diǎn)擊書名號中的文章標(biāo)題。

(二)Index + Small + IF + Match + Row函數(shù)組合實(shí)現(xiàn)篩選不重復(fù)值(唯一值)

1、雙擊 E2 單元格,把公式 =IFERROR(INDEX(B:B,SMALL(IF(MATCH(B$$2:B$$8,B$$2:B$$8,)=ROW($$1:$$7),ROW($$2:$$8)),ROW(A1))), ) 復(fù)制到E2,按 Ctrl + Shift + 回車,返回“銷售部”;把鼠標(biāo)移到 E2 右下角的單元格填充柄上,鼠標(biāo)變?yōu)榧犹枺?)后,按住左鍵,往下拖一直拖到出現(xiàn)空單元格,則篩選出 B 列“部門”的所有不重復(fù)值;選中 E2,往右拖,返回 C 列的第一個(gè)不重復(fù)值“員工”,再往下拖,也一直拖到出現(xiàn)空單元格,則返回 C 列的所有不重復(fù)值;操作過程步驟,如圖3所示:

圖3

2、公式 =IFERROR(INDEX(B:B,SMALL(IF(MATCH(B$$2:B$$8,B$$2:B$$8,)=ROW($$1:$$7),ROW($$2:$$8)),ROW(A1))), ) 說明:

A、B$$2 中的 $$ 表示對行的絕對引用,往下拖時(shí),2 不會(huì)變?yōu)?3、4 等;B$$2:B$$8 以數(shù)組形式返回 B2 至 B8 中的所有部門,即 { 銷售部 行政部 銷售部 財(cái)務(wù)部 行政部 銷售部 財(cái)務(wù)部 }。

B、MATCH(B$$2:B$$8,B$$2:B$$8,) 執(zhí)行時(shí),第一次取出 B2(即“銷售部”),然后返回“銷售部”在 B2:B8 中的位置 1;第二次取出 B(jk是什么意思是什么?JK是“じょしこうこうせい ”(女子高校生)羅馬音 jyoshi koukousei 的簡寫(取其中“J”和“K”),通常指日本女高中生;JK也是ACGN次文化中的萌屬性之一。)3(即“行政部”),也返回在 B2:B8 中的位置 2;其它的以此類推,最后返回?cái)?shù)組 {1;2;1;4;2;1;4};這里最主要的是相同的值返回一樣的序號。

C、$$1:$$7 用于返回 1 到 7 的數(shù)組,即 {1;2;3;4;5;6;7};ROW($$1:$$7) 用于返回 1 到 7 行的行號,即{1;2;3;4;5;6;7}。ROW($$2:$$8) 用于返回 2 到 8 行的行號,即{2;3;4;5;6;7;8}。

D、則 IF(MATCH(B$$2:B$$8,B$$2:B$$8,)=ROW($$1:$$7),ROW($$2:$$8)) 變?yōu)?IF({1;2;1;4;2;1;4}={1;2;3;4;5;6;7},{2;3;4;5;6;7;8}) ,接著從= 左邊的數(shù)組中取出第一個(gè)元素 1,再從 = 右邊的數(shù)組中取出第一個(gè)元素 1,它們相等,所以返回 True;第二次從 = 左邊的數(shù)組中取出第二個(gè)元素 2 和從 = 右邊的數(shù)組中取出第二個(gè)元素 2,它們也相等,所以也返回 True;其它的以此類推,最后返回?cái)?shù)組{TRUE;TRUE;FALSE;TRUE;FALSE;FALSE;FALSE};這一步主要是過濾掉重復(fù)數(shù)值,只留下重復(fù)“部門”的第一個(gè)部門,為 True 的將留下。

E、則 IF({1;2;1;4;2;1;4}={1;2;3;4;5;6;7},{2;3;4;5;6;7;8}) 變?yōu)?IF({TRUE;TRUE;FALSE;TRUE;FALSE;FALSE;FALSE},

{2;3;4;5;6;7;8}),接著從條件的數(shù)組中取出第一個(gè)元素 TRUE,它為真,所以返回 If 的第二個(gè)參數(shù)(即“數(shù)字?jǐn)?shù)組”)中對應(yīng)元素 2;第二次取出第二個(gè)元素 TRUE,返回?cái)?shù)字?jǐn)?shù)組中對應(yīng)元素 3;第三次取出 FALSE,它為假,所以返回 If 的第三個(gè)參數(shù),由于這里省略了,默認(rèn)返回 FALSE;最后返回 {2;3;FALSE;5;FALSE;FALSE;FALSE}。

F、ROW(A1) 用于返回 A1 的行號 1;則 SMALL(IF(MATCH(B$$2:B$$8,B$$2:B$$8,)=ROW($$1:$$7),ROW($$2:$$8)),ROW(A1)) 變?yōu)?SMALL({2;3;FALSE;5;FALSE;FALSE;FALSE},1),接著在數(shù)組中返回第一個(gè)最小值 2。

G、則公式變?yōu)?=IFERROR(INDEX(B:B,2), ),B:B 表示引用 B 列;接著用Index函數(shù)返回 B 列第二行的值“銷售部”;IfError 是錯(cuò)誤判斷函數(shù),在前面篇章已多次介紹。

3、公式 =IFERROR(INDEX(B:B,SMALL(IF(MATCH(B$$2:B$$8,B$$2:B$$8,)=ROW($$1:$$7),ROW($$2:$$8)),ROW(A1))), ) 還有以下兩種寫法:

=IFERROR(INDEX(B:B,SMALL(IF(MATCH(B$$2:B$$8,B$$2:B$$8,)=ROW(B$$1:B$$7),ROW(B$$2:B$$8)),ROW(A1))), )

=IFERROR(INDEX(B:B,SMALL(IF(MATCH(B$$2:B$$8,B$$2:B$$8,)=ROW(B$$2:B$$8)-1,ROW(B$$2:B$$8)),ROW(A1))), )