エクセル練習問題:条件付きの平均の計算(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

スポンサードリンク



よねさんのExcelとWordの使い方エクセル練習問題:目次|条件付きの平均の計算(VBA)