- ベストアンサー
【エクセル】列指定【A:A】した際の、関数エラー
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
次の様な関数にされると宜しいかと思います。 =SUMPRODUCT((YEAR(INDEX($A:$A,ROW($A$1)+1):INDEX($A:$A,MATCH(9E+99,$A:$A)))=2013)*(MONTH(INDEX($A:$A,ROW($A$1)+1):INDEX($A:$A,MATCH(9E+99,$A:$A)))=1)*(INDEX($B:$B,ROW($A$1)+1):INDEX($B:$B,MATCH(9E+99,$A:$A))="月曜日")*(INDEX($C:$C,ROW($A$1)+1):INDEX($C:$C,MATCH(9E+99,$A:$A))="成約")) 或いは =SUMPRODUCT(ISNUMBER(1/(YEAR($A:$A)=2013)/(MONTH($A:$A)=1))*($B:$B="月曜日")*($C:$C="成約"))
その他の回答 (4)
- keithin
- ベストアンサー率66% (5278/7941)
たとえば =SUMPRODUCT((TEXT(A:A,"yyyymm;;;")="201301")*(B:B="月曜日")*(C:C="成約")) といった工夫で計算できます。 もちろん重い(それはあなたが最初に成功した式でも同じですけど)ですけどね。 無駄な列:列をやめて1行目を計算範囲から外すのは当然の措置として,しかしデータ中にイレギュラーに文字列が出てくる(たとえば数式で""を計算しているといった)場合の回避措置としても有効です。
- tom04
- ベストアンサー率49% (2537/5117)
こんにちは! SUMPRODUCT関数は配列数式になりますので、列全体を範囲指定してしまうと PCにかなりの負担をかけ、計算速度も極端に遅くなります。 SUMPRODUCT関数を使用する場合は範囲を明確に指定してやる方がよいと思います。 さて、SUMPRODUCT関数の「関数の引数ダイアログボックス」を表示させ 配列1の部分に MONTH(A1:A100)=1 と入力してみてください。 この時点で範囲内データが数値以外の行が#VALUE!と表示されてしまいます。 すなわち、Excelがシリアル値だと判断できないデータがあるとエラーになってしまいます。 解決方法としては =SUMPRODUCT((MONTH(A2:A100)=1)*(B2:B100="月曜日")*(C2:C100="成約")) といった感じにするしかないと思います。m(_ _)m
- KURUMITO
- ベストアンサー率42% (1835/4283)
SUMPRODUCT関数は一般には範囲を指定して使うものです。列指定ですと計算に時間がかかりますし、今回のようにA列に日付でないデータが入力してある場合にはYEAR(A1:A1)はエラーになりますので当然エラーになってしまいます。 日付の項目が1行目に入っているのですから式は列の指定ではなく下記のように範囲を指定することが必要です。 =SUMPRODUCT((YEAR(A2:A100)=2013)*(MONTH(A2:A100)=1)*(B2:B100="月曜日")*(C2:C100="成約"))
- akito0417
- ベストアンサー率20% (55/266)
MONTH関数では判断できない文字列『日付』が含まれているからでしょう。 A:AでA列全部となるので、 A2:A○と範囲を指定すればできると思います。