我怀疑您的查询应该有一些逻辑捷径。但是,对于 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 提供了必要的数组强制。事实上,这就是它所做的一切,因为:
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,意味着我们将生成一个范围数组以传递给小计,因此:
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。
问候