在列表中找到“x”连续数字的最小和

时间:2015-07-14 20:27:47

标签: excel vba excel-vba

我希望找到91个数字列中的 x 连续数字的最低总和(例如,A列)。例如,如果 x 为30,我想在91号列中找到30个连续数字的最小总和。我需要对30到78之间的 x 的每个值进行此计算。

对于 x = 30的情况,蛮力,非VBA方法看起来像这样:

=MIN(SUM(A1:A30),SUM(A2:A31),SUM(A3:32),...,SUM(A62:A91))

对于 x = 78的情况,此非VBA方法如下所示:

=MIN(SUM(A1:A78),SUM(A2:A79),SUM(A3:A80),...,SUM(A14:A91))

我需要将20个列(每个包含91个数字)应用于此函数,因此该列也需要是一个变量。我的猜测是我们要定义一个 范围长度 输入的函数(即 x )和 输入。

我对VBA语法没有多少经验。你们/ gals能帮助我制定一些东西吗?

我通常会尝试自己解决这个问题(我尝试使用Excel蛮力,然后尝试制作自己的UDF,但我不知道从哪里开始)。

2 个答案:

答案 0 :(得分:2)

考虑以下 UDF

Public Function consec(rng As Range, x As Long) As Double
    Dim r As Range, i As Long, mymin As Double, temp As Double
    Dim wf As WorksheetFunction
    Set wf = Application.WorksheetFunction
    i = 1
    Set r = rng(i).Resize(x, 1)
    mymin = wf.Sum(r)
    For i = 2 To rng.Count - x + 1
        Set r = rng(i).Resize(x, 1)
        temp = wf.Sum(r)
        If temp < mymin Then
            mymin = temp
        End If
    Next i
    consec = mymin
End Function

例如:

enter image description here

答案 1 :(得分:1)

你需要VBA吗?

可以使用&#34;数组公式&#34;来完成此操作,例如如果你的&#34; x&#34;值在单元格Z1中,您可以使用此公式

=MIN(SUBTOTAL(9,OFFSET(A1:A91,ROW(INDIRECT("1:"&COUNT(A1:A91)-Z1+1)),0,Z1)))

使用 CTRL + SHIFT + ENTER确认