![](/img/trans.png)
[英]Find the highest cell value in a row and return the adjacent cell value in Excel
[英]Excel find 17 Cells with highest value, 5 of which are the highest in a specific row
我正在解决一个复杂的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|
任何想法或建议都将受到高度赞赏。 还有一个更易于理解的参考标题会很棒。 谢谢!
说明:这是草率的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
为什么不只是扩大范围并向Large()计算添加更多元素?
=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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.