计算与先前阵列相比的最大值


1

我尝试计算一行中相等的值的数量大于上面列的(部分)的MAX()值。

例如:与上面的3个细胞相比。在E中出现'计数'。 我用*标记了它应该计数的细胞。

enter image description here

我的最终数组约为200x5000 ...... 我已经尝试过(例如,单元格E4)这样的东西:

{=SUM(IF(A4:D4>=MAX(OFFSET(A1,ROW($1:$4)-1,0,3,1)),1,0))}

{=COUNTIF(A4:D4,">="&MAX(OFFSET(A1,0,ROW($1:$4)-1,3,1)))}

希望ROW()& OFFSET()函数会在列上分割MAX函数......但是没有一个给出了不错的结果。 我当然可以在另一张纸上将MAX()分成200多个不同的列。但我正在做噩梦,因为我不能用单一数组公式完成它。

Answers:


2

如果您正在严格寻找基于工作表函数的方法,可能这可能不是推荐的解决方案,但是在这里我使用了一个小的UDF(用户定义函数)来简化任务。

此UDF接受一个Range并返回该范围内每列的Max数​​组。

ALT + F11 访问VBA编辑器。从“插入”菜单中插入模块。现在将以下代码放入其中。

Function Ret_Arr(inpt As Range) As Variant


Dim v As Variant

ReDim v(1 To inpt.Columns.Count)

For i = 1 To inpt.Columns.Count

    v(i) = Application.Max(inpt.Columns(i))

Next i

Ret_Arr = v


End Function

请注意,此基本代码中没有太多验证,以防万一。

这将获取Range并从您可以在数组公式中使用的每列返回Max of Array。

如果您使用的是Excel 2007及更高版本,请将VBA代码和工作表另存为XLSM宏启用工作表。

在此示例中,样本数据位于单元格A1:D8中。在E2中输入以下公式并按 CTRL + 转移 + 输入 从公式栏中创建一个数组公式。

公式应包含在Curly Braces中,表示它是一个数组公式

=SUM(IF($A2:$D2>=Ret_Arr($A$1:D1),1,0))

现在,对于上面的每个范围,Ret_Arr将返回每列的Max数​​组。如果未将正确的范围传递给Ret_Arr,则可能会得到错误的结果。因此,如果您的列是A到D,请确保将相同范围的列A到D传递给UDF。

enter image description here


工作,完美10☺
Rajesh S

谢谢。我会选择VBA,这是一个优雅的解决方案。但我仍然感到惊讶,它不能做基于配方的。
R.T.

0

E4 数组公式 **:

=COUNT(1/(MMULT(TRANSPOSE(ROW(A$1:D3)^0),N(A4:D4>=A$1:D3))=ROWS(A$1:D3)))

根据需要复制。

问候

**数组公式的输入方式与“标准”公式的输入方式不同。您只需按住CTRL和SHIFT键,然后按ENTER键,而不是按ENTER键。如果你已经正确地完成了它,你会注意到Excel在公式周围放置了大括号{}(尽管不要尝试自己手动插入)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.