2012-02-09 11 views
1

私はセル2から19のスコアを取り、それを20に設定しようとしています。しかし、コードを入力すると#NAME?しか表示されません。どのように平均スコアを印刷するように修正できますか?ここでスコアの平均をとったVBAエラー

Sub Scores() 
    Dim ws As Worksheet 
    Set ws = Worksheets("Sheet3") 
    ws.Activate 
    Dim rngStart As Range 
    Dim rngEnd As Range 
    Set rngStart = Range("A1").Cells(2, 5) 
    Set rngEnd = Range("A1").Cells(19, 5) 
    Dim MidtermAvg As Range 
    Set MidtermAvg = Range(rngEnd.Offset(1, 0), rngEnd.Offset(1, 0)) 
    ' Put in average at the bottom of the range 
    MidtermAvg.Formula = "=AVERAGE(rngEnd:rngStart)" 
End Sub 

が1列に並んで得点すべてです:

63 
44 
87 
96 
67 
82 
58 
71 
61 
77 
63 
30 
93 
38 
89 
89 
93 
93 

答えて

3

あなたはワークシート参照の一部が欠けた、
とあなたの式は、文字列の中に隠れてrngStartrngEnd変数を持っていました。
(これらは変数であることをVBAがどのように知っていますか)

また、これらの範囲オブジェクトの.Addressを取得する必要があります。
これは動作します:あなたが範囲"E2:E19"を得るためにRange("A1")、その後Cells(r,c)表記法を使用している理由

Sub Scores() 
    Dim ws As Worksheet 
    Set ws = Worksheets("Sheet3") 
    ws.Activate 
    Dim rngStart As Range 
    Dim rngEnd As Range 
    Set rngStart = ws.Range("A1").Cells(2, 5) 
    Set rngEnd = ws.Range("A1").Cells(19, 5) 
    Dim MidtermAvg As Range 
    Set MidtermAvg = ws.Range(rngEnd.Offset(1, 0), rngEnd.Offset(1, 0)) 
    ' Put in average at the bottom of the range 
    MidtermAvg.Formula = "=AVERAGE(" & rngStart.Address & ":" & rngEnd.Address & ")" 
End Sub 
+2

+1:小さな変化? "Set MidtermAvg = ws.Range(rngEnd.Offset(1、0)、rngEnd.Offset(1,0))" 最初は "rngStart"でなければなりません –

+1

ありがとう、Siddharth。実際に、その行の目的は、セルの平均値を数値の範囲より下にすることでした。したがって、 'rngEnd'が2回使用されています。それは 'E20:E20'のようなものに終わります。 – bernie

+0

ああ、そうです!あなたは正しいです。確かに分かりました:) –

1

私はわかりません。スコアがその範囲内にある場合は、次のではないと理由:

Sub AverageScore() 
    Dim scores As Range 
    Set scores = Range("E2:E" & Range("E2").End(xlDown).Row) 
    Range("E" & scores.End(xlDown).Row).Offset(1, 0) = "Avg: " & Round(WorksheetFunction.Average(scores), 2) 
End Sub 

NB - 私は2進ポイントに平均値を丸め、その結果がAvg: 71.89を読み取りますが、あなたはあなたのように変更することができますlabelsoを追加することの自由を取っているがフィットを参照してください。