【问题标题】:Finding the Average of a Column in VBA在 VBA 中查找列的平均值
【发布时间】:2015-09-30 21:43:42
【问题描述】:

我正在尝试查找给定列中所有数字的平均值。

'Find the Average

Dim count As Integer
Dim sum As Integer
Dim lastCol As Integer
Dim c As Integer
Dim num As Long
lastCol = ActiveSheet.UsedRange.Columns(ActiveSheet.UsedRange.Columns.count).Column
For c = 2 To lastCol
   sum = 0
   count = 0
ActiveSheet.Cells(2, c).Select
    Do While ActiveCell.Value <> ""
        sum = sum + ActiveCell.Value
        count = count + 1
        ActiveCell.Offset(1, 0).Activate
    Loop
    'num = sum / count
    ActiveCell.Value = sum / count
    'ActiveCell.Value = num

当我尝试运行它时,我收到该行的溢出错误

 ActiveCell.Value = sum / count

我尝试了许多不同的方法来解决这个问题。我尝试的一种解决方案是在这种情况下使用中间长变量“num”来传递值。上面对解决方案的尝试进行了注释。我尝试的另一个解决方案是使用 CLng() 将变量类型转换为 long。这两种解决方案仍然产生相同的溢出错误。有没有人知道如何解决这个问题?

【问题讨论】:

  • 你有哪些类型的数字 - 所有的整数,一些实数(1.051...),你只想要一个整数作为你的答案?
  • 您真的只是将 -32,768 和 32,767 之间的整数相加吗?在调试模式下将鼠标悬停在sumcount 上时,它们的值是多少?
  • 筹码 - 我有整数和实数,我想保留它们的实数
  • 吉普车 - 当我进入调试模式时,循环内的总和和计数都是 0
  • 我确实尝试将计数变量更改为双精度,但收到相同的溢出错误。

标签: excel vba overflow average


【解决方案1】:

这是获取工作表最后一列(不包括第一行)中所有单元格平均值的另一种方法:

Sub Luxation()
   Dim lastCol As Long, rng As Range
   lastCol = ActiveSheet.UsedRange.Columns(ActiveSheet.UsedRange.Columns.Count).Column
   Set rng = Range(Cells(2, lastCol), Cells(Rows.Count, lastCol))
   MsgBox Application.WorksheetFunction.Average(rng)
End Sub

【讨论】: