AVERAGEIFS関数の引数が可変の場合

このQ&Aのポイント
  • AVERAGEIFS関数を使って可変の引数を計算する方法について教えてください。
  • indirect関数とaddress関数、match関数を使用して引数の合計対象範囲を可変に設定していますが、戻り値が#VALUEになっています。
  • 同じ計算をaverage関数で行う場合は正しく計算されています。どうすれば正しい戻り値が表示されるでしょうか?
回答を見る
  • ベストアンサー

AVERAGEIFS関数の引数が可変の場合

averageifs関数のことについて教えてください。   引数の合計対象範囲をindirect関数とaddress関数、match関数を使い可変にしています。 条件範囲また条件はダイアログボックスで確認する限り計算されてはいるのですが、 戻り値が#VALUEになります。 どうすればキチンと戻り値が表示されるのでしょうか? ちなみに可変の部分(合計対象範囲)をaverage関数で計算するとちゃんと計算されています。          ↓こんな式です。    AVERAGEIFS(INDIRECT(ADDRESS(MATCH(DATE(データ!$D$1,$A3,1),データ!$D:$D,0),6,,,"データ")):INDIRECT(ADDRESS(MATCH(DATE(データ!$D$1,$A3+1,0),データ!$D:$D,0),6,,,"データ")),データ!$C:$C,0) ややこしいですが、お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.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のようにしてしまえば遙かに簡単なので,まずそう回答したわけですが。

wakarimahenn
質問者

お礼

ありがとうございます。返信が遅れてすみません。 わざわざ2通りの回答までいただいてありがたいです。 条件範囲と合計対象範囲が違っていたことを気づいていませんでした。 おかげさまで無事式を完成できました。 ご教授ありがとうございました。

その他の回答 (2)

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.2

条件範囲も同じ範囲としなければいけませんので次のような式にすればよいでしょう。 =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)

wakarimahenn
質問者

お礼

ありがとうございます。 条件範囲が間違っていました。 おかげさまで無事、式が完成しました。 ご教授ありがとうございました。

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

関数のヘルプから抜粋: AVERAGEIFS では、各検索条件範囲に含まれるセルの個数と形状は、合計対象範囲と必ず一致している必要があります。 という条件を満たしていないので,エラーになります。 計算例:ただしD列が日付の昇順等で整列されているとして =AVERAGEIFS(データ!F:F,データ!D:D,">="&DATE(データ!$D$1,$A3,1),データ!D:D,"<="&DATE(データ!$D$1,$A3+1,0),データ!C:C,0)

関連するQ&A

  • Excel関数で列方向データの可変範囲グラフ作成

    こんにちは Excel2010を使用しています 関数にて行方向の可変範囲グラフの作り方サイトを参考にして列方向のデータを可変範囲グラフに しようとしているんですが、うまく作成出来ません。 下記のような列のデータを可変範囲グラフにするにはどうしたらよろしいでしょうか。 A B C D E 1 item a b c d 2 date 1 2 3 4 すみませんが、よろしくお願いいたします。

  • 可変引数???

    昔作った記憶はあったのですが、具体的にどうすれば良いか忘れてしまい 詳しい方にお聞きしたいのですが、 printf("data=%d, result=%d, msg=%s\n", data, result, msg); のように書式設定できる可変引数?できるような関数(↓)を作りたいです。 test(100, "XXXX", "data=%d, result=%d, msg=%s\n", data, result, msg); VC2005や C#では使わない方が良い?のでしょうか。

  • 引数の数が可変な関数

    C言語の関数でいつも不思議に思うのですが printf("%sさんの成績は、%d点です。", name, score); printf("\n\n"); のように引数が可変な関数を作成したいのですが、どうすればよいでしょうか? CとC++の両方の書き方が知りたいです。 理解したいの解説している書籍なども探しています。

  • AVERAGEIFS関数について

    どなたか、お尋ねいたします。 AVERAGEIFS関数でA1~E1のセルに示した数値 A1  B1    C1  D1  E1 9  20   21  22  31 二つの条件 10以下、30以上の数値を除く平均値 20、21、22   答え21.0 ただし、10と30は別の計算式から求めた値とします。 実際は20程の数値から以下、以上を除いた平均値を計算したいと思っています。 AVERAGEIFSで計算式の書き方を教えていただけませんか。 他の方法でも可能なら結構ですので、よろしくお願いします。

  • エクセルSUMIF関数とOR条件

    「X」の条件を満たすデータをの合計を計算したい場合SUMIF関数、「X」および「Y」の条件を満たすデータの合計を計算したい場合は、SUMPRODUCT関数が使えると思いますが、 「X」または「Y」の条件を満たすデータの合計を計算したい場合は、 SUMIF(検索範囲,"X",合計範囲)+SUMIF(検索範囲,"Y",合計範囲)とやるしかないですか? それとも、SUMIFを並べなくても、1回で計算できる関数がありますか? ご存知の方、ご教授下さい。 どうぞよろしくお願いいたします。

  • エクセルのaverage関数について

    エクセルである条件を満たすデータの平均値を求めたいと思っております. 例えば,データと条件は以下の場合, データ R 1 R 2 S 3 S 4 T 5 T 6 条件 一列目がRまたはSの場合 averageif関数では,条件は一つしか使えないので,RorSという複数の条件があるときは出来ないと思い,averageifs関数を使って求めようと思ったのですが,うまく計算してくれません. どのように関数で,どのように引数を決めれば良いか教えてください.

  • 引き数がポインタでない関数の戻り値はなぜint型なのか?

    最近、疑問に思っていることがあって質問したいんですが、一般的にc言語 で使われる関数っていうのは、引き数としてポインタをとる関数以外は全て 戻り値はint型なのですがこれはなぜでしょう。私自身の結論としては、も し関数の戻り値がchar型だとしたらchar型で表せる範囲の値は全てasciiコー ドとして使われているので、もしエラーがあって戻り値としてEOF(-1)を返す 際に1byteでは同じビット配列になる255が既に使われていてEOFとして-1を定 義できないために、-1と255が同じビット配列ではない1byte以上のデータ型 つまりint型(たぶん、int型がコンピュータが一番効率良く処理できるデータ型なのでたぶんint型を使ったと思いますが)を使ったのではないかと言う 結論に達したのですがこれは正しいのでしょうか。どなたか御教授お願い致 します。

  • scanfでの可変引数

    こんばんわ。 C言語で簡単な支出計算プログラムみたいなのを作ったのですが、自分の思ったようなプログラムが書けません。 #include<stdio.h> int main(int argc,char *argv[]){ int i; int n1; int a1,a2; int sum=0; puts("計算する日数を入力してください。"); printf("日数:"); scanf("%d",&n1); for(i=1;i<=n1;i++){ printf("%d日目:",i); scanf("%d",&a1); sum+=a1; } printf("【%d日間の支出】:%d円\n",i-1,sum); } 実行結果は以下のようになります。 計算する日数を入力してください。 日数:2 1日目:100 2日目:200 【2日間の支出】:300円 このプログラムだと1日に1つの支出しか計算してくれません。 1日で入力できる支出を複数にしたいのですが、つまり下のように 計算する日数を入力してください。 日数:3 1日目:100,150 2日目:200 3日目:300,150,1000 【3日間の支出】:1900円 のようにscanfで入力した数値を可変個の値にしたいのですが、 どのように実現したらよいでしょうか? scanf("%d,%d"&a1,&a2);のように2つにしてれやば複数にはできますが 必ず2個入力しないとエラーになってしまいます。 調べた所va_listという可変引数リストが使えそうなのですが、 scanfでどのように使えばよいのかわかりません。 ご教授よろしくお願いします。

  • EXCEL データベース関数のデータベース部分を可変にしたい

    データベース関数の式は、 D関数(データベース,集計したいフィールド,条件) で表されますが、この中のデータベース部分を可変に することは可能でしょうか? 可能であれば、その方法を教えて頂きたくお願いします

  • EXCELの関数について

    EXCELの関数について エクセルの関数で複数条件の場合の計算について 例 A列…日付 B列…支店名 C列…処理科目 D列…金額 ある支店の日付の範囲を指定し科目別金額の合計値を別シートに算出したいのですが、 SUMIF関数では、条件の範囲が設定できないみたいなので SUMPRODCUTを使っても同一列での条件設定でうまくいきません。 なにかうまい方法はありませんか

専門家に質問してみよう