Excel查找具有最高值的17个单元格,其中5个是特定行中的最高值

时间:2017-01-17 23:53:50

标签: excel

我正在努力应对复杂的Excel问题,我会对任何解决方案感到惊讶。

我有一个包含4列和以下值的表

The highest    |13|12|12|12|
The two highest|11|12|11|11|
The two highest|12|12|12|12|
               |12|11|11|11|
               |12|11|11|11|
               |12|11|11|11|

我的问题要求从前三行分别选择最高的两个最高值。在完整矩阵上应该有12个值的总和。

所需的5加上剩余的7个最高值。我目前的做法是对所需的行进行总结并将其余部分加在一起,但这显然不起作用。

|13|12|12|12|[MAX(B10:E10)]13|
|11|12|11|11|[LARGE(B11:E11;1)+LARGE(B11:E11;2)23|
|12|12|12|12|[LARGE(B12:E12;1)+LARGE(B12:E12;2)24|
|12|11|11|11|
|12|11|11|11|
|12|11|11|11|

非常感谢任何想法或建议。另外一个更容易理解的参考标题会很棒。谢谢!

2 个答案:

答案 0 :(得分:1)

<强>说明: 这是一个邋V的VBA,但这种方法很有效,如果你需要它,结构通常是可扩展的。您可以将其粘贴到VBA模块中,运行Sum57(),结果将在调试窗口(Ctl + G)中。要为其他阵列大小修改此值,请更改以下内容:

  • 第1行中used数组的大小
  • 第5行和第6行中arrR和arrC的值,用于定义数组的开头
  • 函数调用的模式在Sum57()
  • 的正文中

基本模式是:

   For i = 1 To N
       x = x + LargeOfRange([rStart], [rEnd], [cStart], [cEnd])
   Next 

其中N是该范围内的前N个最大数字。

<强> VBA:

Public used(5, 3) As Boolean
Public arrR, arrC As Integer

Public Sub Sum57()
    arrR = 10
    arrC = 2
    For a = LBound(used, 1) To UBound(used, 1)
    For b = LBound(used, 2) To UBound(used, 2)
        used(a, b) = False
    Next
    Next

    Dim x As Integer

        x = x + LargeOfRange(10, 10, 2, 5)
    For i = 1 To 2
        x = x + LargeOfRange(11, 11, 2, 5)
    Next
    For i = 1 To 2
        x = x + LargeOfRange(12, 12, 2, 5)
    Next
    For i = 1 To 7
        x = x + LargeOfRange(10, 15, 2, 5)
    Next
    Debug.Print x
End Sub


Public Function LargeOfRange(rStart As Integer, rEnd As Integer, _
                             cStart As Integer, cEnd As Integer) As Integer
    On Error GoTo SkipVal
    Dim l, x, xR, xC As Integer
    x = 0

    For r = rStart To rEnd
        For c = cStart To cEnd
            If x < Cells(r, c).Value And used(r - arrR, c - arrC) = False Then
                xR = r
                xC = c
                x = Cells(r, c).Value
            End If
        Next
    Next
    used(xR - arrR, xC - arrC) = True
    LargeOfRange = x
Exit Function

SkipVal:
    LargeOfRange = 0
End Function

答案 1 :(得分:0)

为什么不扩展范围并向Large()calc添加更多元素?

=LARGE(B13:E15,1)+LARGE(B13:E15,2)+LARGE(B13:E15,3)+LARGE(B13:E15,4)+
 LARGE(B13:E15,5)+LARGE(B13:E15,6)+LARGE(B13:E15,7)

返回80