• 締切済み

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と表示されますが、何が間違っているのでしょうか?

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

質問には、式だけ書くのでなく、そのやろうとしている内容・意味も併せて書いておくべきだと思う。 何万人の読者が、判っても、そうでなくても、読まされる仕組みだから。 ーー 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)
回答No.3

こんばんは。 数字は、可変型だから、あえて、文字を入れなければ、引数は数値のままで良いはずです。また、数値を、文字列型の書式にしておくと、別の問題が発生します。だから、数値は数値して扱ったほうがよいです。 =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行を使うなら、出来れば、データベース関数のほうがよいと思います。数式が軽くなります。また、この数式は、バージョンに依存します。

noname#176215
noname#176215
回答No.2

「"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)
回答No.1

配列の大きさが相違する為です。 貼り付け用!$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"))

関連するQ&A

専門家に質問してみよう