我正在努力应对复杂的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|
非常感谢任何想法或建议。另外一个更容易理解的参考标题会很棒。谢谢!
答案 0 :(得分:1)
<强>说明:强> 这是一个邋V的VBA,但这种方法很有效,如果你需要它,结构通常是可扩展的。您可以将其粘贴到VBA模块中,运行Sum57(),结果将在调试窗口(Ctl + G)中。要为其他阵列大小修改此值,请更改以下内容:
used
数组的大小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