如果查找列未知,则查找数组最大值的单元格位置
Find the cell location of the maximum value of an array if the lookup column is uknown
我正在尝试获取 excel 电子表格(见下文)中最大值的位置。
Date Tommy Jamie Clara
01/2013 1.51% -6.96% 0.38%
02/2013 1.75% -6.96% -0.49%
03/2013 2.22% -6.96% 0.59%
04/2013 1.90% -5.48% -1.16%
05/2013 2.03% -5.48% 0.23%
06/2013 1.90% -5.48% -0.47%
07/2013 2.51% -0.90% -0.65%
08/2013 3.06% -0.90% 1.54%
然而,这种情况下的问题是行号和列号均未知。到目前为止,我已经尝试了以下方法:
=CELL("address",INDEX($B:$D, MATCH(MAX($B:$D),$B:$D,0),3))
但意识到 MATCH 函数将只接受一个列,因此此处 MATCH 函数的第二个参数会产生错误。同样,INDEX 函数的第三个参数(写为“3”)也是错误的——因为我不知道数组的最大值在哪一列。
我尝试了各种方法但无济于事。很乐意在这方面得到任何帮助。
您可以使用INDEX
/AGGREGATE
:
=CELL("address";INDEX($A:$D; AGGREGATE(14;6;(ROW($B:$D)/(MAX($B:$D)=$B:$D));1);AGGREGATE(14;6;(COLUMN($B:$D)/(MAX($B:$D)=$B:$D));1)))
解释:
我假设你熟悉CELL和INDEX函数,所以我只解释AGGREGATE
部分。
AGGREGATE(14,6,(ROW($B:$D)/(MAX($B:$D)=$B:$D)),1)
第一个参数 (14)
表示将使用 LARGE
子函数。
第二个参数(6)
表示错误将被忽略。
第三个参数创建一个行数值数组。
第四个参数 (1)
指出第一个最大值应该 returned。
我将向您展示如何按以下步骤创建行号数组:
ROW(B2:D9)
returns 一个数组,所有行号都在范围内:
2,2,2;
3,3,3;
4,4,4;
...
9,9,9
MAX($B:$D)=$B:$D
returns 一个布尔数组:
FALSE, FALSE, FALSE;
FALSE, FALSE, FALSE;
FALSE, FALSE, FALSE;
...
TRUE, FALSE, FALSE
- 相互除法,bool值转换为FALSE = 0,TRUE = 1,得到数组:
#DIV/0!, #DIV/0!, #DIV/0!;
#DIV/0!, #DIV/0!, #DIV/0!;
#DIV/0!, #DIV/0!, #DIV/0!;
...
9, #DIV/0!, #DIV/0!
- 错误被忽略,结果我们得到
9
列类推
如果范围内有几个相同的MAX值,那么这个公式就不行了——可以用下面的数组公式代替:
=ADDRESS(INT(MIN(IF($B:$D=MAX($B:$D),ROW($B:$D)*1000+COLUMN($B:$D)))/1000),MOD(MIN(IF($B:$D=MAX($B:$D),ROW($B:$D)*1000+COLUMN($B:$D))),1000),4)
它将return地址的第一个MAX值。
编辑后的数组公式按ctrl
+shift
+enter
确认
我正在尝试获取 excel 电子表格(见下文)中最大值的位置。
Date Tommy Jamie Clara
01/2013 1.51% -6.96% 0.38%
02/2013 1.75% -6.96% -0.49%
03/2013 2.22% -6.96% 0.59%
04/2013 1.90% -5.48% -1.16%
05/2013 2.03% -5.48% 0.23%
06/2013 1.90% -5.48% -0.47%
07/2013 2.51% -0.90% -0.65%
08/2013 3.06% -0.90% 1.54%
然而,这种情况下的问题是行号和列号均未知。到目前为止,我已经尝试了以下方法:
=CELL("address",INDEX($B:$D, MATCH(MAX($B:$D),$B:$D,0),3))
但意识到 MATCH 函数将只接受一个列,因此此处 MATCH 函数的第二个参数会产生错误。同样,INDEX 函数的第三个参数(写为“3”)也是错误的——因为我不知道数组的最大值在哪一列。
我尝试了各种方法但无济于事。很乐意在这方面得到任何帮助。
您可以使用INDEX
/AGGREGATE
:
=CELL("address";INDEX($A:$D; AGGREGATE(14;6;(ROW($B:$D)/(MAX($B:$D)=$B:$D));1);AGGREGATE(14;6;(COLUMN($B:$D)/(MAX($B:$D)=$B:$D));1)))
解释:
我假设你熟悉CELL和INDEX函数,所以我只解释AGGREGATE
部分。
AGGREGATE(14,6,(ROW($B:$D)/(MAX($B:$D)=$B:$D)),1)
第一个参数 (14)
表示将使用 LARGE
子函数。
第二个参数(6)
表示错误将被忽略。
第三个参数创建一个行数值数组。
第四个参数 (1)
指出第一个最大值应该 returned。
我将向您展示如何按以下步骤创建行号数组:
ROW(B2:D9)
returns 一个数组,所有行号都在范围内:
2,2,2;
3,3,3;
4,4,4;
...
9,9,9
MAX($B:$D)=$B:$D
returns 一个布尔数组:
FALSE, FALSE, FALSE;
FALSE, FALSE, FALSE;
FALSE, FALSE, FALSE;
...
TRUE, FALSE, FALSE
- 相互除法,bool值转换为FALSE = 0,TRUE = 1,得到数组:
#DIV/0!, #DIV/0!, #DIV/0!;
#DIV/0!, #DIV/0!, #DIV/0!;
#DIV/0!, #DIV/0!, #DIV/0!;
...
9, #DIV/0!, #DIV/0!
- 错误被忽略,结果我们得到
9
列类推
如果范围内有几个相同的MAX值,那么这个公式就不行了——可以用下面的数组公式代替:
=ADDRESS(INT(MIN(IF($B:$D=MAX($B:$D),ROW($B:$D)*1000+COLUMN($B:$D)))/1000),MOD(MIN(IF($B:$D=MAX($B:$D),ROW($B:$D)*1000+COLUMN($B:$D))),1000),4)
它将return地址的第一个MAX值。
编辑后的数组公式按ctrl
+shift
+enter