【发布时间】:2020-04-21 01:17:24
【问题描述】:
假设我有以下基本电子表格:
A B C D
1 -2 4 2 12
2 -1 1 0
3 0 0 0 22
4 1 1 2 12
5 2 4 6
6 3 9 12
A 列包含从 -2 到 3 的整数。
B 列具有 a 列值的平方。
C 列是 A 和 B 的行和,因此 C1 为 =SUM(A1:B1)。
D1 有 =MAX(C1:C6),这个最大值是我需要用一个公式得到的结果。
D3 是用 Ctrl+Shift+Enter 输入的 =MAX(SUM(A1:B6)),但它只会产生一个常规的总和。 D4 是 =MAX(A1:A6+B1:B6) 和 ctrl+shift+enter,这有效并给出了 12 的正确结果。
但是,D4 的问题是我需要能够处理大动态范围,而无需输入无穷无尽的总和。假设 SUM(A1:Z1000) 将是 A1:A1000+B1:B1000+....+Z1:Z1000,这不是一个合理的公式。
那么我该如何做类似 =MAX(SUM(A1:Z1000)) 的事情,这样它将 A1:Z1 到 A1000:Z1000 行相加,并给我最终的 row-wize max。
我只能使用基本 Excel,所以没有辅助列,也没有 VBA 函数。
更新 由于没有任何成功的答案,我不得不假设当前的 Excel 版本是不可能的。
所以我正在尝试在 VBA 中构建这个函数,这就是我目前所拥有的。
Function MAXROWSUM(Ref As Range) As Double
Dim Result, tempSum As Double
Dim Started As Boolean
Started = False
Result = 0
For Each Row In Ref.Rows
tempSum = Application.WorksheetFunction.Sum(Row)
If (Started = False) Then
Result = tempSum
Started = True
ElseIf tempSum > Result Then
Result = tempSum
End If
Next Row
MAXROWSUM = Result
End Function
这个函数在少于 100k 行的情况下运行并且非常快,但是如果范围内的行数接近可能的 100 万行,那么即使该范围的大部分是空的,该函数也会变得非常慢,需要几秒钟。 有没有办法通过过滤掉任何空行来显着优化当前代码? 在我的示例中,如果我输入 MAXROWSUM(A1:B1000000) 它将起作用,但会很慢,我可以让它非常快吗?
【问题讨论】:
-
是的 A1 + B1 = 2,我最初有 ypos,而 C1 是 -2,我已修复。抱歉。
-
@大笨钟。晨盲。我会删除。
-
感谢@MichaelE 的救援。如果 D3 = Max(Sum(A1+B6)) 则 D3 = Max(C1:C6) 因为 C 列有 A+B。最大值不是 22。
-
@Variatus -
MAX(SUM(A1:B6))与MAX(A1:A6+B1:B6)不同(作为数组公式)。 -
@BigBen 想通了——只需要回到基础:这是一道数学题,不是编程题 xD
标签: excel vba excel-formula sum