Windows7 Excel2007を使用しています。
ほぼ 1秒毎のデータの平均を1分値にしてまとめたいです。
しかし量が膨大すぎて、よいやり方をご存知であれば、教えて下さい。
データ形式は下記のようになっています。(列はIVまでありますので、端折ってます。)
(時間 2011/9/2 9:19 は一つのセルです。)
[LOGGING] 123456780
DATETIME No アイウエオカキク
TIME No アイウエオカキク
2011/9/2 9:19 101000000
2011/9/2 9:19 201000000
2011/9/2 9:19 301000000
2011/9/2 9:19 401000000
2011/9/2 9:19 501000000
2011/9/2 9:19 601000000
2011/9/2 9:19 701000000
2011/9/2 9:19 801000000
2011/9/2 9:19 901000000
2011/9/2 9:19 1001000000
2011/9/2 9:19 1101000000
2011/9/2 9:19 1201000000
2011/9/2 9:19 1301000000
2011/9/2 9:19 1401000000
2011/9/2 9:19 1501000000
上の3行は無視します。
列EXの値に1/10を掛けて、それを1分毎に平均化したいです。
列FBの値に1/1000を掛けて、それを1分毎に平均化したいです。
WorkSheet1 にデータがあった場合、WorkSheet2に上記の平均化した値を表示したいです。
ネットを検索していると、下記に似たような質問と回答のサンプルコードがありました。
これを改良して作ることはできないでしょうか?
データが膨大なので、是非マクロを使ってやってみたいと思っています。
www.excel.studio-kazu.jp/kw/20090528191508.html
Sub SetAverage()
Dim ws1 As Worksheet
Set ws1 = Worksheets(1)
Dim ws2 As Worksheet
Set ws2 = Worksheets(2)
Dim averageFormulaC As String
Dim averageFormulaD As String
averageFormulaC = "=AVERAGE(" & ws1.Name & "!C@S@:C@E@)"
averageFormulaD = "=AVERAGE(" & ws1.Name & "!D@S@:D@E@)"
Dim i As Long
Dim lastRow As Long
lastRow = ws1.Cells(Rows.Count, "A").End(xlUp).Row
ws2.Columns("A:D").Clear
ws2.Range("B1").Resize(lastRow, 1).NumberFormatLocal = "hh:mm;@"
Dim startRow As Long
startRow = 1
Dim currentMin As Long
currentMin = Int(ws1.Range("B1").Value * 1440.001)
Dim r As Long
r = 1
For i = 1 To lastRow
If currentMin <> Int(ws1.Cells(i + 1, "B").Value * 1440.001) Then
ws2.Range("A" & r).Value = ws1.Cells(i, "A").Value
ws2.Range("B" & r).Value = CDbl(currentMin) / 1440#
ws2.Range("C" & r).Formula = Replace(Replace(averageFormulaC, "@S@", startRow), "@E@", i)
ws2.Range("D" & r).Formula = Replace(Replace(averageFormulaD, "@S@", startRow), "@E@", i)
r = r + 1
currentMin = CLng(ws1.Cells(i, "B").Value * 1440.001)
startRow = i + 1
End If
Next
End Sub
No.1ベストアンサー
- 回答日時:
先に一般によく引っかかる説明不足点として,幾つか指摘しておきます。
不明点のその1:
>ほぼ 1秒毎のデータ
>時間 2011/9/2 9:19 は一つのセルです
時刻列がどこなのか不明ですがまぁそれはたいしたことじゃなくて,「2011/9/2 9:19」は正確な内容は?
「2011/9/2 9:19:00」が並んでいるのか,実は「2011/9/2 9:19:01」「2011/9/2 9:19:02」…と実時刻が記録されているのを,単に表示でそう見えているだけなのか,という事です。
→後者を仮定します
不明点のその2:
まぁアタリマエの事ですが,1分間に必ず60点のデータが記録されている「保証はない」(イチイチ毎分のデータ数を数える必要がある)という前提が必要か。
→必ずしも60点とは限らないを仮定します
不明点のその3:
1分値の開始と終了は「9:19:00以上から9:20:00未満まで」を9:19とするのか,「9:19:01から9:20:00」を9:20の値とするのか。
→実は後者を使う場合も多いのですが,今回は前者を仮定します
#日付時刻がA列と仮定して
sub macro1()
dim ws1 as worksheet, ws2 as worksheet
dim lastrow as long
set ws1 = worksheets("Sheet1")
set ws2 = worksheets("Sheet2")
lastrow = ws1.cells(cells.rows.count ,"A").end(xlup).row
ws2.range("A:F").clearcontents
ws2.range("A3:F3") = array("datetime", "data count", "sum(EX)","sum(FB)","avr(EX)","avr(FB)")
’時刻が丸め済みなら下記の計算は不要,転記するだけで十分。
with ws2.range("A4:A" & lastrow)
.formula = "=TEXT(Sheet1!A4,""yyyy/mm/dd hh:mm"")*1"
.value = .value
.numberformatlocal = "hhhh/mm/dd hh:mm"
end with
’抽出
ws2.range("A3:A" & lastrow).removeduplicates columns:=1, header:=xlyes
lastrow = ws2.cells(cells.rows.count, "A").end(xlup).row
’計算
ws2.range("B4:B" & lastrow).formula = "=COUNTIFS(Sheet1!A:A,"">=""&A4,Sheet1!A:A,""<""&(A4+TIME(0,1,0)))"
ws2.range("C4:C" & lastrow).formula = "=SUMIFS(Sheet1!EX:EX,Sheet1!A:A,"">=""&A4,Sheet1!A:A,""<""&(A4+TIME(0,1,0)))/10"
ws2.range("D4:D" & lastrow).formula = "=SUMIFS(Sheet1!FB:FB,Sheet1!A:A,"">=""&A4,Sheet1!A:A,""<""&(A4+TIME(0,1,0)))/1000"
ws2.range("E4:E" & lastrow).formula = "=C4/B4"
ws2.range("F4:F" & lastrow).formula = "=D4/B4"
end sub
ありがとうございました!
100%解決できました。
マクロの凄さを体感しております。
教えて頂いてマクロを少し改造しながら使ってみています。
今 10秒平均に挑戦中です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルVBAで教えて頂きたいのですが? 2 2022/12/31 20:28
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) VBA処理追加 こちらでご教示頂いたのですが回答完了させてしまいましたのでこちらからまた質問させてく 2 2022/10/27 09:57
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- Visual Basic(VBA) 稀に1円合いません? Sheet1から金額と個数を貼り付ける下記コードで、金額を切り上げるコードを何 3 2022/09/05 15:11
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) Sub 分けてソートして貼り付ける() Dim srcSheet As Worksheet Dim 6 2023/08/04 19:57
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) vbaを早くしたい 5 2022/09/09 10:58
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
既婚で現役のAV女優さんは居ま...
-
別ブックの空白行に転記
-
エクセル最終行の下に貼り付け
-
直線コネクタの中央にコネクタ...
-
エクセルvbaで月と文字の組み合...
-
bluetoothのclass1とclass2の互...
-
VBA ソートすると、1、11、...
-
CDレコの曲の消し方を教えてく...
-
射精したあとの匂いって他人に...
-
おっぱいを舐める
-
1日3回セックスって多いですか...
-
夫にセックスがないのなら他人...
-
彼とのエッチで、彼がイクのが...
-
精液のにおいがほとんど無いの...
-
先日彼氏とラブホに行ったら電...
-
男の精子ってどんな匂いですか、
-
彼女をオカズにして抜くのって...
-
手マンした手って臭いですか?
-
彼のペニスが挿入時に柔らかく...
-
手マンしたあと彼氏の指に私の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
既婚で現役のAV女優さんは居ま...
-
VBA ソートすると、1、11、...
-
CDレコの曲の消し方を教えてく...
-
VBAが止まります。
-
EXCELで3行を一組にして結合す...
-
大昔から、クンニ、フェラって...
-
シンナーの夏型と冬型の違いは?
-
私は今年で60歳で孤独です。40...
-
別ブックの空白行に転記
-
女性が頼まれなくてもフェラす...
-
直線コネクタの中央にコネクタ...
-
エクセル最終行の下に貼り付け
-
相対参照から絶対参照に変換す...
-
データの平均を1分値にまとめる...
-
Word 黒塗り部分の文字のみ削除...
-
4次元について
-
ウォークマンa30についてです。...
-
Excelで抽出・連続印刷したいです
-
最適な組み合わせの自動計算
-
ExcelVBAで指定文字(この場合...
おすすめ情報