アプリ版:「スタンプのみでお礼する」機能のリリースについて

excel上で、不規則データ(約数十万件)の平均値を計算したいのですが、
そのデータは以下のようになっています。

a列(日付) b列(時刻) c列(数値)
4/1      0時     123
4/1      0時     256
4/1      0時     456
4/1      1時     777     
 :      :     :
4/2      0時     888
4/2      0時     896
 :      :     :

例えば、4/1の0時から1時に変わる単位で、その間(3データ分)の平均値を求める。
次に4/1の1時から2時に変わる単位で、その間のデータの平均値を求めるようにしたい。
また、日付が変わっても同様に処理したいです。
手で範囲指定で平均値を計算する関数を入れても良いのですが、作業効率が悪く、
時間がかかります。何か関数を一律に一気に埋め込んで、変わる単位(ブレークポイント)で
平均値を計算して、どこかのワーク列に出力するなどの処理にしたいですが、
良い方法(関数)をご享受お願いいたします。

A 回答 (1件)

こんばんは!



VBAでの一例です。
E~G列に結果を表示するようにしてみました。
尚、1行目は項目行になっていてデータは2行目以降にあるとします。

Sub Sample1()
Dim myDic As Object
Dim i As Long, lastRow As Long
Dim myStr As String
Dim myKey, myItem, myR, myAry

Set myDic = CreateObject("Scripting.Dictionary")
Range("E:G").ClearContents
Range("E1:F1").Value = Range("A1:B1").Value
Range("G1") = "平均"
Range("E:E").NumberFormatLocal = Range("A2").NumberFormatLocal
lastRow = Cells(Rows.Count, "A").End(xlUp).Row
myR = Range(Cells(2, "A"), Cells(lastRow, "C"))
For i = 1 To UBound(myR, 1)
myStr = myR(i, 1) & "_" & myR(i, 2)
If Not myDic.exists(myStr) Then
myDic.Add myStr, myR(i, 3)
Else
myDic(myStr) = myDic(myStr) + myR(i, 3)
End If
Next i
myKey = myDic.keys
myItem = myDic.items
myR = Range(Cells(1, "E"), Cells(UBound(myKey) + 1, "G"))
For i = 0 To UBound(myKey)
myAry = Split(myKey(i), "_")
Cells(i + 2, "E") = myAry(0)
Cells(i + 2, "F") = myAry(1)
Cells(i + 2, "G") = myItem(i)
Next i
Set myDic = Nothing
Application.ScreenUpdating = False
For i = 2 To Cells(Rows.Count, "E").End(xlUp).Row
With Cells(i, "G")
.Value = .Value / WorksheetFunction.CountIfs(Range("A:A"), Cells(i, "E"), Range("B:B"), Cells(i, "F"))
End With
Next i
Application.ScreenUpdating = True
MsgBox "完了"
End Sub

こんな感じではどうでしょうか?m(_ _)m
    • good
    • 0
この回答へのお礼

こんばんわ、1例というよりも完璧です。
深謝いたします。これを参考に復習してVBAの勉強をいたします。
ありがとうございました。

お礼日時:2018/05/12 22:10

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