1. Home »
  2. エクセル練習問題 »
  3. 条件付きの平均の計算(VBA)

エクセル練習問題:条件付きの平均の計算(VBA)


スポンサードリンク
(追記) (追記ここまで)

問題 topへ

解答例 topへ

問題1の解答例 topへ


B C D E F
2 名前 性別 得点 平均
3 相沢一郎 男 52 67.3
4 井上浩二 男 74
5 上野有紀 女 84
6 内野武 男 77
7 上田祥子 女 68
8 江田早苗 女 59
9 榎本高貴 男 77
10 小田和樹 男 47
  1. ワークシート関数を使って計算した例です。
    • ワークシート関数AVERAGEをVBAで使う時はApplication.WorksheetFunction.Average とします。
    Sub test10()
    Range("F3").Value = Application.WorksheetFunction.Average(Range("D3:D10"))
    Range("F3").NumberFormatLocal = "#,##0.0"
    End Sub
  2. For〜Nextで順次計算している例です。
    • この例ではセルの値が数値であったら計算するようにIF文で条件を入れています。
    Sub test11()
    Dim i As Long
    Dim goukei As Double, kosuu As Long
    For i = 3 To 10
    If IsNumeric(Cells(i, 4)) Then
    goukei = goukei + Cells(i, 4)
    kosuu = kosuu + 1
    End If
    Next i

    Range("F3").Value = goukei / kosuu
    Range("F3").NumberFormatLocal = "#,##0.0"
    End Sub
  3. 配列を使って計算した例です。
    • 計算元のデータを配列myValに入れて計算して、結果をシートへ書き込んでいます。
    Sub test12()
    Dim myVal
    Dim i As Long
    Dim goukei As Double, kosuu As Long
    ’元データを配列に入れます
    myVal = Range("D3:D10").Value

    For i = 1 To UBound(myVal, 1)
    If IsNumeric(myVal(i, 1)) Then
    goukei = goukei + myVal(i, 1)
    kosuu = kosuu + 1
    End If
    Next i

    Range("F3").Value = goukei / kosuu
    Range("F3").NumberFormatLocal = "#,##0.0"
    End Sub
(追記) (追記ここまで)

問題2の解答例 topへ


B C D E F
2 名前 性別 得点 男の平均
3 相沢一郎 男 52 65.4
4 井上浩二 男 74
5 上野有紀 女 84
6 内野武 男 77
7 上田祥子 女 68
8 江田早苗 女 59
9 榎本高貴 男 77
10 小田和樹 男 47
  1. ワークシート関数を使って計算した例です。
    • ワークシート関数AVERAGEIFをVBAで使う時はApplication.WorksheetFunction.AverageIf とします。
    Sub test20()
    Range("F3").Value = Application.WorksheetFunction.AverageIf(Range("C3:C10"), "男", Range("D3:D10"))
    Range("F3").NumberFormatLocal = "#,##0.0"
    End Sub
  2. For〜Nextで順次計算している例です。
    • この例ではC列の値が"男" であり、かつ D列の値が数値であったら計算するようにIF文で条件を入れています。
    Sub test21()
    Dim i As Long
    Dim goukei As Double, kosuu As Long
    ’条件に一致する値を合計し、カウントをしています
    For i = 1 To 10
    If Cells(i, 3).Value = "男" And IsNumeric(Cells(i, 4).Value) Then
    goukei = goukei + Cells(i, 4).Value
    kosuu = kosuu + 1
    End If
    Next i
    ’計算結果をセルに書き込み、表示形式を設定しています
    Range("F3").Value = goukei / kosuu
    Range("F3").NumberFormatLocal = "#,##0.0"
    End Sub
  3. 配列を使って計算した例です。
    • 計算元のデータを配列myValに入れて計算して、結果をシートへ書き込んでいます。
    Sub test22()
    Dim myVal
    Dim i As Long
    Dim goukei As Double, kosuu As Long
    ’元データを配列に入れます
    myVal = Range("C3:D10").Value
    ’条件に一致する値を合計し、カウントをしています
    For i = 1 To UBound(myVal, 1)
    If myVal(i, 1) = "男" And IsNumeric(myVal(i, 2)) Then
    goukei = goukei + myVal(i, 2)
    kosuu = kosuu + 1
    End If
    Next i
    ’計算結果をセルに書き込み、表示形式を設定しています
    Range("F3").Value = goukei / kosuu
    Range("F3").NumberFormatLocal = "#,##0.0"
    End Sub

問題3の解答例 topへ


B C D E
2 試験日 得点 8月の平均
3 2011年7月1日 66 77.5
4 2011年7月2日 71
5 2011年8月4日 78
6 2011年8月5日 69
7 2011年8月6日 84
8 2011年8月7日 79
9 2011年9月1日 72
10 2011年9月2日 68
  1. ワークシート関数を使って計算した例です。
    • ワークシート関数AVERAGEIFSをVBAで使う時はApplication.WorksheetFunction.AverageIfs とします。
      (Excel2007以降で利用できます)
    Sub test30()
    Range("E3").Value = Application.WorksheetFunction. _
    AverageIfs(Range("C3:C10"), Range("B3:B10"), ">=2011年8月1日", Range("B3:B10"), "<2011年9月1日")
    Range("E3").NumberFormatLocal = "#,##0.0"
    End Sub
  2. For〜Nextで順次計算している例です。
    • 8月の条件を 2011年8月1日以上、2011年9月1日未満としています。(日付のシリアル値で比較しています)
    Sub test31()
    Dim i As Long
    Dim goukei As Double, kosuu As Long
    ’条件に一致する値を合計し、カウントをしています
    For i = 1 To 10
    If Cells(i, 2).Value >= DateSerial(2011, 8, 1) And _
    Cells(i, 2).Value < DateSerial(2011, 9, 1) And _
    IsNumeric(Cells(i, 3).Value) Then
    goukei = goukei + Cells(i, 3).Value
    kosuu = kosuu + 1
    End If
    Next i
    ’計算結果をセルに書き込み、表示形式を設定しています
    Range("E3").Value = goukei / kosuu
    Range("E3").NumberFormatLocal = "#,##0.0"
    End Sub
  3. 配列を使って計算した例です。
    • 計算元のデータを配列myValに入れて計算して、結果をシートへ書き込んでいます。
    Sub test32()
    Dim myVal
    Dim i As Long
    Dim goukei As Double, kosuu As Long
    ’元データを配列に入れます
    myVal = Range("B3:C10").Value
    ’条件に一致する値を合計し、カウントをしています
    For i = 1 To UBound(myVal, 1)
    If myVal(i, 1) >= DateSerial(2011, 8, 1) And _
    myVal(i, 1) < DateSerial(2011, 9, 1) And _
    IsNumeric(myVal(i, 2)) Then
    goukei = goukei + myVal(i, 2)
    kosuu = kosuu + 1
    End If
    Next i
    ’計算結果をセルに書き込み、表示形式を設定しています
    Range("E3").Value = goukei / kosuu
    Range("E3").NumberFormatLocal = "#,##0.0"
    End Sub

スポンサードリンク
(追記) (追記ここまで)


(追記) (追記ここまで)
Home|エクセル練習問題:目次|条件付きの平均の計算(VBA)

PageViewCounter
Counter
Since2006/2/27

AltStyle によって変換されたページ (->オリジナル) /