1

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

我很难理解如何做到这一点。我现在的策略(这可能不是最佳的)包括 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,这在我的电子表格中甚至不是一个使用过的单元格。

这是怎么回事?

4

2 回答 2

3

Have you tried using the Worksheet.UsedRange Property?

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

It worked for me in a test case, albeit a trivial one.

于 2013-06-18T21:12:37.630 回答
2

应该是单行:

Sub SheetAverage()
    MsgBox Application.WorksheetFunction.Average(ActiveSheet.UsedRange)
End Sub
于 2013-06-18T21:48:42.693 回答