使用SMALL函数,可以获得一组数值中指定第几小的数值。
使用SMALL函数,可以获得一组数值中指定第几小的数值。
什么情况下使用SMALL函数?
SMALL函数数据组中第k个最小值。它能够:
获取单元格区域中第3个最小值
求n个最小值之和
返回单元格区域中的负值
动态排序单元格区域中的数值
获取单元格区域中唯一值列表
SMALL函数语法
SMALL函数有2个参数,其语法如下:
SMALL(array,k)
array: 代表要求第k个最小值点的数值数组或者数值区域。
k: 指定要求第几个最小值。
如果参数array中包含任何非数字值,则会忽略该值。如果包含的值均为错误值,则返回其中的第1个错误值。如果包含相等的数值,那么会依次显示该值。
SMALL函数陷阱
如果指定的最小值数大于数组总数,则会返回#NUM!错误。
示例1: 获取单元格区域中第3个最小值
要获取单元格区域A1:A5中第3小的值,使用公式:
=SMALL(A1:A5,3)
返回数值3,即该区域中第3小的值为3。
下面的公式获取数组中第3小值:
=SMALL({50,20,30,60,50,10},3)
返回30。
示例2: 求n个最小值之和
下图所示工作表中,命名区域Data为A1:A9。求区域Data中前3个最小值之和的公式为:
=SUM(SMALL(Data,{1,2,3}))
这是一个数组公式,因此输入完成后要按Ctrl+Shift+Enter组合键。公式依次获取Data区域中第1个、第2个、第3个最小值,然后将它们相加。
也可以使用数组公式:
=SUM(SMALL(Data,ROW(INDIRECT(“1:3”))))
相比于上面的公式,这个公式使用了ROW函数和INDIRECT函数,将更灵活。
示例3: 返回单元格区域中的负值
单元格区域A2:A10命名为“Num”。将该区域中所有负值提了出来的公式为:
=INDEX(Num,SMALL(IF(Num<0,ROW(INDIRECT(“1:”& ROWS(Num)))),ROW(INDIRECT(“1:” & ROWS(Num)))))
该公式为数组公式,因此选取与Num区域相同大小的区域,输入公式后按Ctrl+Shift+Enter组合键。
上述公式获得的结果包含#NUM!错误值,可以使用IFERROR函数消除错误值:
=IFERROR(INDEX(Num,SMALL(IF(Num<0,ROW(INDIRECT(“1:”& ROWS(Num)))),ROW(INDIRECT(“1:” &ROWS(Num))))),””)
示例4: 动态排序单元格区域中的数值
如下图所示的工作表,将单元格区域A1:A15命名为SortNum,现在要求对该区域中的数值态排序,即在该区域输入数值时,列D中的排序会自动调整。
下面的数组公式由小到大排列SortNum区域的数值:
=IFERROR(SMALL(SortNum,ROW(INDIRECT(“1:”& ROWS(SortNum)))),””)
示例5: 获取单元格区域中唯一值列表
如下图所示的工作表,单元格区域A1:A8命名为“DataValue”,可以看出,该区域中有许多重复值。下面的数组公式提取并返回该区域中唯一值列表:
=IFERROR(INDEX(DataValue,SMALL(IF(MATCH(DataValue,DataValue,0)=ROW(INDIRECT(“1:”&ROWS(DataValue))),MATCH(DataValue,DataValue,0),””),ROW(INDIRECT(“1:”& ROWS(DataValue))))),””)