在往期文章
我们提到如何查找出现次数最多的文本。
有小伙伴问:如何根据条件,查询出现次数最多的数值。
本文以产品价格查询为例,和大家分享如何解决这类难题。
一、案例
如下图所示,A1:B3为产品价格表,每种产品有多个价格。要求获取每个产品出现次数最多的价格。
例如产品“A-1”的单价有2.5(出现3次)、3(出现1次),则产品“A-1”出现次数最多的单价为2.5。

二、计算步骤
在单元格E2输入公式
=INDEX($B$2:$B$16,MODE(IF($A$2:$A$16=D2,MATCH($B$2:$B$16,$B$2:$B$16,0))))
按Ctrl+Shift+Enter结束公式输入,拖动填充柄向下复制公式。

公式解析:
(1)MATCH函数用于返回查找值在数组中的相对位置,如果查找值不止出现一次,返回第一次出现的位置。
MATCH($B$2:$B$16,$B$2:$B$16,0)返回B2:B16中每个价格在B2:B16单元格区域出现的相对位置,返回值为{1;2;3;2;5;1;2;8;3;8;11;3;8;14;3}。
(2)IF($A$2:$A$16=D2,MATCH($B$2:$B$16,$B$2:$B$16,0)),即
IF($A$2:$A$16=D2,{1;2;3;2;5;1;2;8;3;8;11;3;8;14;3})。
当A2:A16单元格内文本为“A-1”,则返回{1;2;3;2;5;1;2;8;3;8;11;3;8;14;3}对应位置的数值,否则返回FALSE。IF函数返回的结果为{FALSE;2;FALSE;2;FALSE;1;2;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE}
(3)MODE返回一组数值中出现次数最多的数。
MODE(IF($A$2:$A$16=D2,MATCH($B$2:$B$16,$B$2:$B$16,0)))即
MODE({FALSE;2;FALSE;2;FALSE;1;2;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE}),出现次数最多的数值是“2”,因此MODE函数返回的结果为“2”。
(4)INDEX函数返回指定行列交叉处单元格的值。
INDEX($B$2:$B$16,MODE(IF($A$2:$A$16=D2,MATCH($B$2:$B$16,$B$2:$B$16,0))))即INDEX($B$2:$B$16,2),返回B2:B16单元格区域第2行的数值,即“2.5”。