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

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

些細なことではありますが、テストケースでうまくいきました。

于 2013-06-18T21:12:37.630 に答える
2

ワンライナーである必要があります:

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