• ベストアンサー

平均(年数)の求め方

Excelで、下記データの平均の求める方法を 教えて下さい 下記データ値(3.1,10.1,6.11)がExcelに存在します 例 データ値  意味(年数)    3.1 ・・・ 3年 1ヶ月   10.1 ・・・10年 1ヶ月    6.11・・・ 6年11ヶ月 上記値の平均年数をExcelにて求める方法を教えて 下さい 宜しくお願いいたします

質問者が選んだベストアンサー

  • ベストアンサー
  • wonder99
  • ベストアンサー率28% (85/302)
回答No.4

    A   B   C    D 1 データ  年  月  年数 2  3.1    3   1   3.083 3 10.1    10   1   10.083 4  6.11    6  11   6.917 5                 6.694 A列にデータが縦に入っていると仮定してお話します。 B列とC列を使って年と月に分けます。 B2には、整数に直す関数を使います。 =INT(A2) C2には、小数点の位置より右を表示させるように関数を組み合わせます。 =MID(A2,FIND(".",A2)+1,2) D列でこれらを統合。 年と、月を12で割ったものを足しますね。 =B2+C2/12 あとはデータが続く限り、この数式をオートフィルで 下へ下へコピーしてください。 最後に、D5に入れたのが年数の平均です。 =AVERAGE(D2:D4) ※D2:D4というのは範囲を表すので年数のデータの範囲を入れてください。 ○年○ヶ月という形式で平均値を出したいのであれば 年は =INT(D5) 月は =MID(D5,FIND(".",D5)+1,2)*12/100 と、年と月のセルを分けて表示すれば良いです。 サンプルデータの平均は、6年と8.28ヶ月と出ました。

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

月数に統一する A列   B列   C列 3 1 37 10 1 121 6 11 83 ーーーーー A列に 10.1 10.1 6.11 データー区切り位置ーその他ーピリオドで分けると 上記のA列、B列のようになる。 C1に =A1*12+B1 と入れてB2,B3に式を複写。上記C列のようになり 平均は =SUM(C1:C3)/38 結果 80.33333333

  • toshi_2000
  • ベストアンサー率30% (306/1002)
回答No.2

1.整数部と小数部に分けます。 2.小数部を12で割ります。 3.整数部と2.の結果を足したものが年数です。 4.それを平均します。 5.整数部はそのままで、小数部は12を掛けます。

回答No.1

Private Sub test()   Dim l_intAry() As Integer   Dim l_sng平均  As Single   Dim l_int年   As Integer   Dim l_sng月   As Single   Dim l_strMsg  As String     '要素を月に変換し配列に設定   l_intAry = 月変換("3.1", "10.1", "6.11")     '月ベースでの平均値   l_sng平均 = WorksheetFunction.Average(l_intAry)     '何年何ヶ月かを算出   l_int年 = l_sng平均 \ 12   l_sng月 = l_sng平均 - (l_int年 * 12)     '結果出力用   l_strMsg = ""   l_strMsg = l_strMsg & "平均は「" & l_sng平均 & "ヶ月」:単位(月)" & vbCrLf & vbCrLf   l_strMsg = l_strMsg & "平均は「" & l_sng平均 / 12 & "年」:単位(年)" & vbCrLf & vbCrLf   l_strMsg = l_strMsg & "平均は「" & l_int年 & "年と" & l_sng月 & "ヶ月」:単位(年と月)" & vbCrLf & vbCrLf   MsgBox l_strMsg End Sub Function 月変換(ParamArray p_Param()) As Integer()   Dim l_varWk   As Variant   Dim l_int年   As Integer   Dim l_int月   As Integer   Dim l_intLen  As Integer   Dim l_intAry() As Integer   Dim i      As Integer     l_intLen = UBound(p_Param)   If l_intLen = 0 Then     Exit Function   End If     ReDim l_intAry(l_intLen)     For i = 0 To l_intLen     l_varWk = Split(CStr(p_Param(i)), ".")       '年[整数部]     l_int年 = CInt(l_varWk(0))     '月[少数部]     l_int月 = CInt(l_varWk(1))        '月数とする     l_intAry(i) = l_int年 * 12 + l_int月   Next     月変換 = l_intAry End Function