- 締切済み
sumproductの複数条件
=SUMPRODUCT((貼り付け用!$J$2:$J$15000="3")*(貼り付け用!$K$2:$K$15000={"3","4","5","6","7","8","9"})*(貼り付け用!$I$2:$I$15000={"通過","NG"}))とやると#N/Aと表示されますが、何が間違っているのでしょうか?
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- imogasi
- ベストアンサー率27% (4737/17069)
質問には、式だけ書くのでなく、そのやろうとしている内容・意味も併せて書いておくべきだと思う。 何万人の読者が、判っても、そうでなくても、読まされる仕組みだから。 ーー J列が3、 (A) K列が3から9 (B) I列が通過"か"NG (C) の3つをAND条件で判定したいということかと思う。 ーー Aは該当が1つの値で問題ないとして、比較値が複数の場合、配列では表現させてくれないようだ。 Bはたまたま連続値で(3より大)*(9より小)で2項に分ければよい。 cはOR条件なので、1つ1つ判別し、両者を加えて、全体を()で囲って1項の扱いにする。 指定の値が何十何百になれば式に書いてられないが10個ぐらいまでなら、列挙する方法があると、都合が良いと思うが、無いようだ。今回の既出ご回答の面々はエキスパートの方ばかりだが、解決策は上がってないようだ。 ーー 配列数式の場合 F列にデータがあるとしてF1:F10 通過 あ い 通過 NG あ NG 通過 う え ーー VLOOKUP用の検索表 J1:J2 通過 NG K1:K10を範囲指定して =IF(ISERROR(VLOOKUP(F1:F10,$J$1:$J$2,1,FALSE)),0,1) を入れて、SHIFT,CTRL,ENTERを押すと 結果 1 0 0 1 1 0 1 1 0 0 こういうのが使えないかと思ったが、まだ小生では未消化。 VLOOKUPの代わりにMATCH関数でも同じか。 配列数式やSUMPRODUCTは行数が増えると処理が重たくなるようなので その方面からは、即時反映を犠牲にしても、VBAでやることも考えられる。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 数字は、可変型だから、あえて、文字を入れなければ、引数は数値のままで良いはずです。また、数値を、文字列型の書式にしておくと、別の問題が発生します。だから、数値は数値して扱ったほうがよいです。 =SUMPRODUCT((貼り付け用!$J$2:$J$15000=3)*(貼り付け用!$K$2:$K$15000>=3)*(貼り付け用!$K$2:$K$15000<=9)*((貼り付け用!$I$2:$I$15000="通過")+(貼り付け用!$I$2:$I$15000="NG"))) なお、こういう数式で、15000行を使うなら、出来れば、データベース関数のほうがよいと思います。数式が軽くなります。また、この数式は、バージョンに依存します。
「"3"」となっていますが J列や K列の数字は文字列なのですか? もし数値なら「""」は不要です。 それより気になるのは データ範囲です。もし本当に 15000行にデータが 埋まる可能性があるなら この数式は全く適していません。 重すぎて使い 物にならないでしょうから。 > 何が間違っているのでしょうか? 乗算している配列の数が一致しません。 =SUMPRODUCT(($J$2:$J$15000&$K$2:$K$15000={"33","34","35","36","37","38","39"}) *(($I$2:$I$15000="通過")+($I$2:$I$15000="NG"))) フリーズする可能性を考えるなら 範囲を減らした方がいいです。 あと 早い段階で数式と表を見直すことをお勧めします。
- mu2011
- ベストアンサー率38% (1910/4994)
配列の大きさが相違する為です。 貼り付け用!$K$2:$K$15000={"3","4","5","6","7","8","9"}はn行×7列、貼り付け用!$I$2:$I$15000={"通過","NG"}はn行×2列になるからです。 仮に数式を成立させたいのであれば、"通過"、"NG"で数式を2つに分けて加算したら如何でしょうか。 SUMPRODUCT((貼り付け用!$J$2:$J$15000="3")*(貼り付け用!$K$2:$K$15000={"3","4","5","6","7","8","9"})*(貼り付け用!$I$2:$I$15000="通過")) + SUMPRODUCT((貼り付け用!$J$2:$J$15000="3")*(貼り付け用!$K$2:$K$15000={"3","4","5","6","7","8","9"})*(貼り付け用!$I$2:$I$15000="NG"))