Excel VBA-平均工作表中的所有数字单元格

时间:2013-06-18 20:18:26

标签: excel vba excel-vba

我正在尝试创建一个宏来迭代工作表中所有使用过的单元格并返回平均值。 最终目标是获取每个工作表中数字的平均值,并生成一个包含平均值的折线图。

我很难理解如何做到这一点。我现在的策略(可能是次优的)包括:a)找到带有数字数据的第一行; b)找到带有数字数据的第一列; c)用数字数据查找最后一行; d)用数字数据查找最后一列; d)在这些细胞上创建一个范围; e)平均范围

这是我当前的代码

Sub AverageAllNumbers()
     Dim fRow As Long
     Dim fColumn As Long
     Dim lRow As Long
     Dim lColumn As Long
     Dim dblAverage As Long
     Dim averageRange As Range

    fRow = Cells.Find(What:=Number, SearchOrder:=xlByRows, SearchDirection:=xlNext).Row
    fColumn = Cells.Find(What:=Number, SearchOrder:=xlByColumns, SearchDirection:=xlNext).Column
    lRow = Cells.Find(What:=Number, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
    lColumn = Cells.Find(What:=Number, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column

    averageRange = Range(Cells(fRow, fColumn), Cells(lRow, lColumn))

    dblAverage = Application.WorksheetFunction.Average(averageRange)
    MsgBox dblAverage

End Sub

几乎没有任何作用 - 'lColumn'产生16384,fRow和fColumn产生1,这在我的电子表格中甚至不是用过的单元格。

发生了什么事?

2 个答案:

答案 0 :(得分:3)

您是否尝试过使用Worksheet.UsedRange属性?

Sub AverageAll()
    Dim average As Double
    Dim averageRange As Range

    ' Set averageRange to UsedRange; no need to find it ourselves.
    Set averageRange = ActiveSheet.UsedRange

    average = Application.WorksheetFunction.average(averageRange)
    MsgBox average
End Sub

它在一个测试用例中对我有用,虽然是一个微不足道的。

答案 1 :(得分:2)

应该是一个单行:

Sub SheetAverage()
    MsgBox Application.WorksheetFunction.Average(ActiveSheet.UsedRange)
End Sub