- ベストアンサー
AVERAGEIFS関数の引数が可変の場合
- AVERAGEIFS関数を使って可変の引数を計算する方法について教えてください。
- indirect関数とaddress関数、match関数を使用して引数の合計対象範囲を可変に設定していますが、戻り値が#VALUEになっています。
- 同じ計算をaverage関数で行う場合は正しく計算されています。どうすれば正しい戻り値が表示されるでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
ちなみに「可変範囲で計算したい」のが主のご質問だったのでしたら, INDEX関数 OFFSET関数 INDIRECT関数 などが利用できます。 計算例: =AVERAGEIFS(INDEX(データ!F:F,MATCH(DATE(データ!$D$1,$A3,1),データ!$D:$D,0)):INDEX(データ!F:F,MATCH(DATE(データ!$D$1,$A3+1,0),データ!$D:$D,0)) ,INDEX(データ!C:C,MATCH(DATE(データ!$D$1,$A3,1),データ!$D:$D,0)):INDEX(データ!C:C,MATCH(DATE(データ!$D$1,$A3+1,0),データ!$D:$D,0)),0) 計算例: B1に対象範囲の先頭行 =MATCH(DATE(データ!$D$1,$A3,1),データ!$D:$D,0) B2に対象範囲の終わる行 =MATCH(DATE(データ!$D$1,$A3+1,0),データ!$D:$D,0) B3に =AVERAGEIFS(INDIRECT("データ!F"&B1&":F"&B2),OFFSET(データ!C1,B1-1,0,B2-B1+1,1),0) #どれを使ってもリクツは大体同じです(ダラダラ長くなるのも一緒です)が,ご質問で掲示された数式みたいにわざわざ「セル番地の文字列」を経由するよりは,もうちょっとだけすっきりできると思います。 #もちろん,回答1のようにしてしまえば遙かに簡単なので,まずそう回答したわけですが。
その他の回答 (2)
- KURUMITO
- ベストアンサー率42% (1835/4283)
条件範囲も同じ範囲としなければいけませんので次のような式にすればよいでしょう。 =AVERAGEIFS(INDIRECT(ADDRESS(MATCH(DATE(データ!$D$1,$A3,1),データ!$D:$D,0),6,,,"Sheet2")):INDIRECT(ADDRESS(MATCH(DATE(データ!$D$1,$A3+1,0),データ!$D:$D,0),6,,,"データ")),INDIRECT(ADDRESS(MATCH(DATE(データ!$D$1,$A3,1),データ!$D:$D,0),3,,,"データ")):INDIRECT(ADDRESS(MATCH(DATE(データ!$D$1,$A3+1,0),データ!$D:$D,0),3,,,"データ")),0)
お礼
ありがとうございます。 条件範囲が間違っていました。 おかげさまで無事、式が完成しました。 ご教授ありがとうございました。
- keithin
- ベストアンサー率66% (5278/7941)
関数のヘルプから抜粋: AVERAGEIFS では、各検索条件範囲に含まれるセルの個数と形状は、合計対象範囲と必ず一致している必要があります。 という条件を満たしていないので,エラーになります。 計算例:ただしD列が日付の昇順等で整列されているとして =AVERAGEIFS(データ!F:F,データ!D:D,">="&DATE(データ!$D$1,$A3,1),データ!D:D,"<="&DATE(データ!$D$1,$A3+1,0),データ!C:C,0)
お礼
ありがとうございます。返信が遅れてすみません。 わざわざ2通りの回答までいただいてありがたいです。 条件範囲と合計対象範囲が違っていたことを気づいていませんでした。 おかげさまで無事式を完成できました。 ご教授ありがとうございました。