ホテルを選ぶとき、これだけは譲れない条件TOP3は?

Excelで、下記データの平均の求める方法を
教えて下さい

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

A 回答 (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ヶ月と出ました。
    • good
    • 0

月数に統一する


A列   B列   C列
3137
101121
61183
ーーーーー
A列に 10.1 10.1 6.11
データー区切り位置ーその他ーピリオドで分けると
上記のA列、B列のようになる。
C1に =A1*12+B1 と入れてB2,B3に式を複写。上記C列のようになり
平均は =SUM(C1:C3)/38
結果 80.33333333
    • good
    • 0

1.整数部と小数部に分けます。


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

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
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報