Excelfind17个具有最高值的单元,其中5个是特定行中最高的单元

我正在努力解决复杂的问题,任何解决scheme我都会感到惊讶。

我有一个包含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| 

我的问题需要从前三行分别select最高的两个最高值。 在整个matrix中,应该有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| 

任何想法或build议,高度赞赏。 另外一个更容易理解的参考标题将是伟大的。 谢谢!

说明:这是sl V的VBA,但这个工程和结构通常是可扩展的,如果你需要它。 你可以把它粘贴到VBA模块中,运行Sum57(),结果将会在debugging窗口(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 

为什么不扩大范围,并添加更多的元素大()钙?

 =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