我有一个包含值的列。我想找到10行深度范围的最小值的最大值。因此第一个范围是a1:a10,第二个范围是a2:a11等。对于每个范围,必须计算最小值,但不存储或显示。然后我需要这些最小值的最大值。我自己不需要最小值,我只需要最大值。 我创建了以下数组公式 {= MAX(MIN(OFFSET($ C $ 10,$ A $ 11:$ A $ 366,1,10,1)))}}虽然在使用数组公式{= MIN(OFFSET($ C $ 10,$ A)时返回0 $ 11:$ A $ 366,1,10,1))}在B11:B366范围内并应用max(B11:B366)我得到正确的值。
我不想创建额外的列(这解决了问题),因为这些最小值没有意义,我只需要知道这356个最小值的最大值。
提前致谢, Filiep
有什么建议吗?
答案 0 :(得分:0)
我怀疑你的查询应该有一些逻辑快捷方式。但是,对于A1中的数据:A100:
=MAX(SUBTOTAL(5,OFFSET(A1,MMULT(ROW(INDEX(A:A,1):INDEX(A:A,91))-1,1),,10)))
我相信你可以修改它以满足你的实际需要吗? 91表示这里要查询的最后10个单元格范围是A91:A100。
注意: 这里使用MMULT功能实际上是多余的。实际上,它仅仅是为了强制从ROW结构中强制返回所需的数组,这种强制措施本来需要将公式作为数组公式提交,即使用CSE。
在许多情况下,使用INDEX也可以实现这种相当人为的强制。但是,可以说这些方法不是最佳实践的例子,我可能不应该在这里采用这种技术。毕竟,数组公式没有任何“错误”。
话虽如此,这里额外的函数调用很可能意味着它只比同等的CSE公式效率低很多。
无论如何,这部分:
ROW(INDEX(A:A,1):INDEX(A:A,91))-1
生成一个从0到90的整数数组,即:
ROW(A1:A91))-1
即:
{1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23;24;25;26;27;28;29;30;31;32;33;34;35;36;37;38;39;40;41;42;43;44;45;46;47;48;49;50;51;52;53;54;55;56;57;58;59;60;61;62;63;64;65;66;67;68;69;70;71;72;73;74;75;76;77;78;79;80;81;82;83;84;85;86;87;88;89;90;91}-1
即:
{0;1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23;24;25;26;27;28;29;30;31;32;33;34;35;36;37;38;39;40;41;42;43;44;45;46;47;48;49;50;51;52;53;54;55;56;57;58;59;60;61;62;63;64;65;66;67;68;69;70;71;72;73;74;75;76;77;78;79;80;81;82;83;84;85;86;87;88;89;90}
MMULT(ROW(INDEX(A:A,1):INDEX(A:A,91))-1,1)
是:
MMULT({0;1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23;24;25;26;27;28;29;30;31;32;33;34;35;36;37;38;39;40;41;42;43;44;45;46;47;48;49;50;51;52;53;54;55;56;57;58;59;60;61;62;63;64;65;66;67;68;69;70;71;72;73;74;75;76;77;78;79;80;81;82;83;84;85;86;87;88;89;90},1)
简单地说:
{0;1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23;24;25;26;27;28;29;30;31;32;33;34;35;36;37;38;39;40;41;42;43;44;45;46;47;48;49;50;51;52;53;54;55;56;57;58;59;60;61;62;63;64;65;66;67;68;69;70;71;72;73;74;75;76;77;78;79;80;81;82;83;84;85;86;87;88;89;90}
虽然注意到,没有这个附加功能或CSE条目,ROW结构:
ROW(INDEX(A:A,1):INDEX(A:A,91))
不会解析为数组(实际上它只返回结果数组中的第一个元素,即1)。
然后将此数组作为 rows 参数传递给OFFSET,其 height 参数为10,表示我们将生成要传递给的范围数组SUBTOTAL,以便:
OFFSET(A1,ROW(INDEX(A:A,1):INDEX(A:A,91))-1,,10)
是:
OFFSET(A1,{0;1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23;24;25;26;27;28;29;30;31;32;33;34;35;36;37;38;39;40;41;42;43;44;45;46;47;48;49;50;51;52;53;54;55;56;57;58;59;60;61;62;63;64;65;66;67;68;69;70;71;72;73;74;75;76;77;78;79;80;81;82;83;84;85;86;87;88;89;90},,10)
实际上是:
{A1:A10;A2:A11;A3:A12;A4:A13;A5:A14;A6:A15;A7:A16;A8:A17;A9:A18;A10:A19;A11:A20;A12:A21;A13:A22;A14:A23;A15:A24;A16:A25;A17:A26;A18:A27;A19:A28;A20:A29;A21:A30;A22:A31;A23:A32;A24:A33;A25:A34;A26:A35;A27:A36;A28:A37;A29:A38;A30:A39;A31:A40;A32:A41;A33:A42;A34:A43;A35:A44;A36:A45;A37:A46;A38:A47;A39:A48;A40:A49;A41:A50;A42:A51;A43:A52;A44:A53;A45:A54;A46:A55;A47:A56;A48:A57;A49:A58;A50:A59;A51:A60;A52:A61;A53:A62;A54:A63;A55:A64;A56:A65;A57:A66;A58:A67;A59:A68;A60:A69;A61:A70;A62:A71;A63:A72;A64:A73;A65:A74;A66:A75;A67:A76;A68:A77;A69:A78;A70:A79;A71:A80;A72:A81;A73:A82;A74:A83;A75:A84;A76:A85;A77:A86;A78:A87;A79:A88;A80:A89;A81:A90;A82:A91;A83:A92;A84:A93;A85:A94;A86:A95;A87:A96;A88:A97;A89:A98;A90:A99;A91:A100}
然后我们将哪个范围引用数组传递给SUBTOTAL, function_num 参数为5(即MIN),这会产生一个值数组,其中包含上述每个数组的最小值,例如:
{10;10;13;11;11;11;11;11;11;11;11;11;11;21;21;21;21;21;21;21;21;21;21;21;21;21;21;21;21;21;21;30;5;5;5;5;5;5;5;5;5;5;24;24;12;12;12;12;12;6;6;6;6;6;6;6;6;6;6;7;7;7;7;7;7;7;7;18;8;8;8;8;8;2;2;2;2;2;2;2;2;2;2;7;7;7;7;7;7;7;7}
然后最终传递给MAX。
此致
答案 1 :(得分:0)
对于A1:A30
单元格中的数据,您可以使用以下公式:
=MAX(SUBTOTAL(5,OFFSET((A1:A21),ROW(A1:A21)-1,,10)))
-1
参数应更改为起始行号
编辑:正如@XOR LX在下面评论过的,这是一个数组公式,因此您需要使用Ctrl
+ Shift
+ Enter
答案 2 :(得分:0)
可在工作表上用作用户设计功能的VBA解决方案:
=LargestMinimum(A1:A365)
VBA代码:
Function LargestMinimum(rng As Range) As Integer
Dim i As Long, max As Integer, col As Integer, temp As Integer
res = 0
col = rng.Column
For i = 1 To rng.Count - 9
temp = WorksheetFunction.Min(Range(Cells(i, col), Cells(i + 9, col)))
res = IIf(temp > res, temp, res)
Next i
LargestMinimum = res
End Function