gpt4 book ai didi

arrays - 数组的累加和

转载 作者:行者123 更新时间:2023-12-01 22:14:58 24 4
gpt4 key购买 nike

我有一个整数值数组,想要找到一种计算其累积和的简单方法 (S = Data(1) + Data(2) + ... + Data(x) )。

我已经创建了这个函数:

Function CumulativeSum(Data() As Integer, k As Integer) As Integer
For entry = 1 To k
CumulativeSum = CumulativeSum + Data(entry)
Next entry
End Function

并且运行良好。然而,我想知道是否有更好的方法来做到这一点(主要是不使用任何额外的函数,并且基本上只使用 Excel 函数,如 Application.Sum)。我在网上进行了一些小搜索,但没有找到任何相关信息。

我知道我并不是要求更正任何代码,我只是要求提供替代方案,这不是本论坛的真正目的。然而,我也怀疑答案可能很简单,所以...如果有人愿意帮助我,我将非常非常感激!如果您找到类似问题的答案,请与我分享该链接,我将删除此链接。

我很抱歉可能没有明确满足我的需求:我只是想找到一种使用宏例程本身的简单函数来计算累积和的简单方法,而不使用 CumulativeSum 我创建的函数或用户创建的任何其他函数。

最佳答案

如果你想从 Array(a,b,c) 中实现一个累积数组数组,如 Array(a,a+b,a+b+c),那么这个函数就是实现它,如果你想传递开始和结束参数:

Public Sub TestMe()

Dim outputArray As Variant
Dim inputArray As Variant
Dim counter As Long

inputArray = Array(1, 2, 4, 8, 16, 32, 64)

outputArray = generateCumulativeArray(inputArray, 1, 4)
For counter = LBound(outputArray) To UBound(outputArray)
Debug.Print outputArray(counter)
Next counter

outputArray = generateCumulativeArray(inputArray, toValue:=4)
For counter = LBound(outputArray) To UBound(outputArray)
Debug.Print outputArray(counter)
Next counter

End Sub

Public Function generateCumulativeArray(dataInput As Variant, _
Optional fromValue As Long = 0, _
Optional toValue As Long = 0) As Variant

Dim i As Long
Dim dataReturn As Variant
ReDim dataReturn(0)
dataReturn(0) = dataInput(fromValue)

For i = 1 To toValue - fromValue
ReDim Preserve dataReturn(i)
dataReturn(i) = dataReturn(i - 1) + dataInput(fromValue + i)
Next i
generateCumulativeArray = dataReturn
End Function
<小时/>

关于仅对数组求和,方法如下:您可以使用 WorksheetFunction. 并且可以将数组作为参数传递。因此,您可以获得所有功能,例如平均值最小值最大值等:

Option Explicit

Public Sub TestMe()

Dim k As Variant
k = Array(2, 10, 200)
Debug.Print WorksheetFunction.Sum(k)
Debug.Print WorksheetFunction.Average(k)

End Sub
<小时/>

如果您想要从给定开始到给定结束的总和,最简单的方法可能是创建一个新数组并将其完全求和。在 Python 中,这称为切片,在 VBA 中,这可以手动完成:

Public Sub TestMe()

Dim varArr As Variant
Dim colSample As New Collection

varArr = Array(1, 2, 4, 8, 16, 32, 64)

colSample.Add (1)
colSample.Add (2)
colSample.Add (4)
colSample.Add (8)

Debug.Print WorksheetFunction.Sum(generateArray(varArr, 2, 4))
Debug.Print WorksheetFunction.Sum(generateArray(colSample, 2, 4))

End Sub

Public Function generateArray(data As Variant, _
fromValue As Long, _
toValue As Long) As Variant

Dim i As Long
Dim dataInternal As Variant
Dim size As Long

size = toValue - fromValue
ReDim dataInternal(size)

For i = LBound(dataInternal) To UBound(dataInternal)
dataInternal(i) = data(i + fromValue)
Next i

generateArray = dataInternal

End Function

这个想法是generateArray函数返回一个新数组。因此,它的完整总和就是您所需要的。它也适用于集合,而不仅仅是数组。请注意,使用集合时,它们从索引 1 开始,而数组(通常)从 0 开始。如果您想对数组和集合使用相同的索引,请将generateArray 函数更改为以下函数:

Public Function generateArray(data As Variant, _
fromValue As Long, _
toValue As Long) As Variant

Dim i As Long
Dim dataInternal As Variant
Dim size As Long

size = toValue - fromValue
ReDim dataInternal(size)

If IsArray(data) Then
For i = LBound(dataInternal) To UBound(dataInternal)
dataInternal(i) = data(i + fromValue)
Next i
Else
For i = LBound(dataInternal) To UBound(dataInternal)
dataInternal(i) = data(i + fromValue + 1)
Next i
End If

generateArray = dataInternal

End Function

或者在顶部写入Option Base 1,数组将从1开始(不建议!)。

关于arrays - 数组的累加和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46343797/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com