gpt4 book ai didi

excel - WorksheetFunction.Average 返回错误答案

转载 作者:行者123 更新时间:2023-12-03 01:28:19 31 4
gpt4 key购买 nike

鉴于 B2:D10 中的数据,我想使用 VBA 数组公式找到每行的平均值。遵循 Bill Jelen 编写的书籍示例 VBA Queue。

Worksheet data

Name    A   B   C   Answer  Manual Avg
A2 4 34 59 31.5 32.33333333
A3 45 83 74 59.5 67.33333333
A4 98 40 17 57.5 51.66666667
A5 95 8 83 89 62
A6 57 55 98 77.5 70
A7 14 21 17 15.5 17.33333333
A8 55 23 4 29.5 27.33333333
A9 80 15 77 78.5 57.33333333
A10 11 24 40 25.5 25

E 列中的答案来自此公式

Sub QuickFillAverage()
Dim myArray As Variant
Dim myCount As Integer

myArray = Worksheets("Sheet1").Range("B2:D10")

For myCount = LBound(myArray) To UBound(myArray)
Worksheets("Sheet1").Cells(myCount + 1, 5).Value = _
WorksheetFunction.Average(myArray(myCount, 1), myArray(myCount, 3))
Next myCount

End Sub

F列的答案来自

(B2+C2+D2) / 3

对每一行进行求平均值。正如你所看到的,答案是不同的。为什么?

最佳答案

代码产生意外结果的原因是您仅对两个单元格进行了平均:myArray(myCount, 1)myArray(myCount, 3)。您可能会想到 Range() 函数将返回两个范围值之间的所有单元格 - 但当您使用数组时,情况并非如此。

您需要在平均工作表函数中包含所有三个值:

WorksheetFunction.Average(myArray(myCount, 1), myArray(myCount, 2), myArray(myCount, 3))

这是我创建的一个函数,它将接受一个数组并根据提供的任何行号(这将是您的 myCount 数字)对数组进行平均:

Function averageArrayRows(arr As Variant, ByVal myRow As Long) As Double

Dim i As Long, mySum As Double

For i = LBound(arr, 2) To UBound(arr, 2)
mySum = mySum + arr(myRow, i)
Next

averageArrayRows = mySum / (UBound(arr, 2) - LBound(arr, 2) + 1)

End Function

您可以通过以下方式使用:

Worksheets("Sheet1").Cells(myCount + 1, 5).Value = averageArrayRows(myArray, myCount)

关于excel - WorksheetFunction.Average 返回错误答案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53699727/

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