Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


12343 / 13646 ツリー ←次へ | 前へ→

【10977】データの件数をカウントして平均値を表示 初心者です。 04/2/20(金) 18:54 質問
【10978】Re:データの件数をカウントして平均値を表示 IROC 04/2/20(金) 20:37 回答
【10979】Re:データの件数をカウントして平均値を表示 ichinose 04/2/20(金) 21:08 回答
【10997】Re:データの件数をカウントして平均値を表示 Kein 04/2/23(月) 1:03 回答
【11000】ありがとうございます。 初心者です。 04/2/23(月) 9:31 お礼

【10977】データの件数をカウントして平均値を表示
質問  初心者です。  - 04/2/20(金) 18:54 -

引用なし
パスワード
   はじめまして。
誰かに助言を頂きたいと思いまして書き込んでみました。

sheet1    sheet2
6/1 1    6/1 1.5
6/1 2    6/2 4.66
6/2 3  → 6/3 0
6/2 4    6/4 6
6/2 5    6/5 7.5
6/4 6
6/5 7
6/5 8

上記の様に日付ごとの平均値を求めて表示したいのです。
でも初心者なので参考書と格闘しています(泣)。
自分なりに作ったプログラムだと、一応表示されるのですが
数値が合っていませんでした。
何かいい方法はないものでしょうか??

【10978】Re:データの件数をカウントして平均値を...
回答  IROC  - 04/2/20(金) 20:37 -

引用なし
パスワード
   VBA を使わなくても 数式で、できそうに思えますが・・

【10979】Re:データの件数をカウントして平均値を...
回答  ichinose  - 04/2/20(金) 21:08 -

引用なし
パスワード
   IROC さん、初心者です。さん、こんばんは。
>VBA を使わなくても 数式で、できそうに思えますが・・
そうですね!!
でも、VBAで作ってみました。
と言ってもマクロの記録と数式をVBA化しただけですが・・。
'===============================================================
Sub main()
  Dim rng1 As Range
  Dim rng2 As Range
  Dim mindate
  Dim maxdate
  With Worksheets("sheet1")
   Set rng1 = .Range("a1", .Cells(.Rows.Count, 1).End(xlUp))
   End With
  '↑Sheet1のA列の入力範囲を取得
  With WorksheetFunction
   mindate = .Min(rng1)
   maxdate = .Max(rng1)
   End With
  '↑日付の最初と最後を取得
  With Worksheets("sheet2").Cells(1, 1)
   .Value = mindate
   .DataSeries Rowcol:=xlColumns, Type:=xlChronological, Date:= _
    xlDay, Step:=1, Stop:=maxdate, Trend:=False
   End With
  '↑Sheet2のA列に最初から最後の日付を設定
  With Worksheets("SHEET2")
   Set rng2 = .Range("A1", .Cells(.Rows.Count, 1).End(xlUp))
   '↑Sheet2のA列の入力範囲を取得
   With rng2
     .NumberFormat = "m""月""d""日"""
     .Offset(0, 1).Cells(1).FormulaArray = "=IF(COUNTIF(" & _
          rng1.Address(, , , True) & ",a1)>0,AVERAGE(IF(" & _
          rng1.Address(, , , True) & "=a1," & rng1.Offset(0, 1).Address(, , , True) & ")),0)"
     '↑Sheet2のB1に配列数式設定
     .Offset(0, 1).DataSeries Rowcol:=xlColumns, Type:=xlAutoFill, Date:=xlDay, Trend:=False
     '↑オートフィル操作と同じ
     .Offset(0, 1).Value = .Offset(0, 1).Value
     End With
   End With
End Sub

尚、「Sheet1のA列は文字列の日付ではない」という前提です。
確認して下さい。
それと今度は、コードも見せて下さいね!!

【10997】Re:データの件数をカウントして平均値を...
回答  Kein  - 04/2/23(月) 1:03 -

引用なし
パスワード
   こんな感じでも出来ると思います。

Sub MyData_Ave()
  Dim MyR As Range, C As Range
 
  Application.ScreenUpdating = False
  With Sheets("Sheet1")
   .Rows(1).Insert xlShiftDown
   .Range("A1:B1").Value = Array("日付", "Data")
   .Range("A1").Subtotal 1, xlAverage, 2, True
   Set MyR = .Range("B:B").SpecialCells(3)
  End With
  For Each C In MyR
   With Sheets("Sheet2").Range("A65536").End(xlUp)
     .Offset(1).Value = C.Offset(-1, -1).Value
     .Offset(1, 1).Value = C.Value
   End With
  Next
  With Sheets("Sheet1")
   .Range("A1").RemoveSubtotal
   .Rows(1).Delete xlShiftUp
  End With
  With Sheets("Sheet2")
   .Range("A65536").End(xlUp).Resize(, 2).ClearContents
   .Rows(1).Delete xlShiftUp
   .Activate
  End With
  Application.ScreenUpdating = True
End Sub

表のつもりなら、せめて項目ぐらい入れておくべきでしょう。

【11000】ありがとうございます。
お礼  初心者です。  - 04/2/23(月) 9:31 -

引用なし
パスワード
   IROCさん、ichinoseさん、Keinさん
ありがとうございます。m(_ _)m↓

参考にさせていただきます。
とりあえずやってみます!!

12343 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free