如何计算一个范围内的子集的最大值,并将所有单元格设置为?

我有一个表格,其数据如下所示:

Col 1 Col 2 14795 11691357 14796 11691361 14796 11691363 14811 11695431 14811 11695433 14796 11695443 14796 11695444 14796 11695455 14796 11695472 14813 11696837 14813 11696839 14814 11696853 14814 11696855 

如何通过列1进行search以及对于任何相同的列表,例如14814,在相应的列2上执行Max()。然后,一旦我有了最大值,我需要返回并将其他行设置为在第二列的最大值。

因此,例如,我们将使用Col14的14814. Col 2的最大值是11696855.然后我需要返回并将11696853设置为11696855。

我怎样才能做到这一点?

这不能使用工作表公式来完成。 要自动执行此任务,您将需要一个基于VBA的解决scheme。

这是一个小程序,将做到这一点。 把这个例程放在一个标准的代码模块中:

 Sub Demo() Dim i&, j&, m#, s$, u, v v = [A1].CurrentRegion.Resize(, 2) For i = 1 To UBound(v) If InStr(s, "|" & v(i, 1)) = 0 Then s = s & "|" & v(i, 1) Next u = Split(s, "|") For j = 1 To UBound(u) m = -1.79769313486231E+308 '<-- most negative number recognized For i = 1 To UBound(v) If v(i, 1) = Val(u(j)) Then If m < v(i, 2) Then m = v(i, 2) End If Next For i = 1 To UBound(v) If v(i, 1) = Val(u(j)) Then v(i, 2) = m End If Next Next [D1:E1].Resize(UBound(v)) = v End Sub 

然后在工作表上您想完成的工作,请按Alt-F8打开macros对话框。

运行演示macros。

而已。

重要

– 例程假定数据将在列A和B中

– 为防止数据丢失,例程将结果输出到D列和E列。因此,在执行此操作之前,请确保列D和E是空的。

– 通过replace程序开始和结束处的方括号[],可以轻松地编辑input和输出列。