『シートにまたがるデータの平均を求めるマクロは』(Noz)
1月〜12月までの12枚のシートがあり、そこには日付とその日の売り上げを入力します(Aのセルには日 Bのセルにはその日の売り上げ)
そして13枚目のシートに任意の10日間の売り上げ平均を表示したいと考えています。同じ月内(同一シート)の10日間の平均を求める場合と次の月(次のシート)にまたがる10日間(たとえば10月25日から11月3日までの10日間の平均)がありますが、これを表示できるマクロを教えてください。
よろしくお願いします。
< 使用 Excel:Excel2021、使用 OS:Windows11 >
1日目と10日目が同じ月か
SUMIFS関数で1〜10日目の合計値を求めて10で割る
ちがうなら
SUMIFS関数で1日目の月のシートを対象に1〜10日目の合計値を求める
SUMIFS関数で10日目の月のシートを対象に1〜10日目の合計値を求める
上記を合算して10で割る
分岐処理終了
結果出力
上記のような感じで考えればよいとおもいます。
(マクロ以外だったらもっと妙案ありそうですが、思いつきませんでした。)
(もこな2) 2025/10/31(金) 08:20:35
関数なら
=LET(sday,DATEVALUE("2025/10/4"),eday,DATEVALUE("2025/10/14"),
AVERAGE(
FILTER('1月'!B:B,('1月'!A:A>=sday)*('1月'!A:A<=eday),""),
FILTER('2月'!B:B,('2月'!A:A>=sday)*('2月'!A:A<=eday),""),
・
・
・
FILTER('12月'!B:B,('2月'!A:A>=sday)*('12月'!A:A<=eday),"")
)
)
と、シートの分だけFILTER関数を使うとできそうです。
2021なので便利な関数が使えないのが痛いですね。
マクロなら地道にセルの値を拾っていけば良さそう (´・ω・`) 2025/10/31(金) 11:04:38
雰囲気はこんな感じですが、B列が空だと0として扱われるので、AVERAGE関数とはちょっと違います。
Function Average10Days(sday As Date)
Dim eday As Date
Dim S As Double, Ccount As Double
eday = sday + 10
S = 0
For m = 1 To 12
With Worksheets(Format(m, "0月"))
For r = 1 To 40
If .Cells(r, 1) >= sday And .Cells(r, 1).Value <= eday Then
S = S + .Cells(r, 2)
count = count + 1
End If
Next
End With
Next
Average10Days = S / count
End Function
(´・ω・`) 2025/10/31(金) 11:25:53
質問の例:「10月25日から11月3日までの10日間の平均」
で考えてみます。
1、平均を表示するシートに日付(いつから)と日付(いつまで)を入力する 2、日付(いつから)と日付(いつまで)の間が何日あるか計算しておく(今回の例ではは10日) 3、日付(いつから)、10日間を足して月末日付を超える場合、日付(いつから)から月末まで何日あるか計算しておく 4、10日間−(日付(いつから)から月末まで何日あるか)で翌月の何日分を取ればよいか計算しておく 5、日付(いつから)の月のシートを選択する 6、日付(いつから)の日のセルを選択する 7、その日から10日分のB列(売り上げ)をのセルを選択する ただし、日付(いつから)から10日分が月末日付を超える場合、3で計算された分の売り上げを足す 8、日付(いつから)から10日分が月末日付を超える場合、次の月のシートを選択する 9、日付(いつから)から10日分が月末日付を超える場合、次の月の4で計算された日数分の売り上げを足す 10、足された売り上げを2で計算された日数(今回は10日間)で割る
という感じです。
これってExcelのスキルとしては、シートの選択、セルの選択、セルの範囲を指定する
というくらいですよね。
>「初心者に毛がはえた程度」
でも可能ですよね。
そして、これら1つずつをVBAのコードで書いてみる。
2でつまづいているのなら、2の部分だけを質問してみる。
2がうまくいったら3をやってみる。
3でつまづいたら、また3の部分だけを質問してみる
・
・
・
という様にやってみてください。
そうすれば、自分がどこでつまづいているか明確になりますし、
まず日本語で箇条書きにするという習慣をつけてみてください。
こんなことを繰り返していると、自然とある程度できるようになりますよ。
(匿名) 2025/10/31(金) 13:51:32
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.