• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:SUMPRODUCT関数を使った条件分岐ができない)

エクセル2010でSUMPRODUCT関数を使った条件分岐ができない

kagakusukiの回答

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.1

 御質問の条件には矛盾があります。 >帰ってきた翌日から出張の場合は「連日」、両方の条件を満たすときは「重複、連日」 との事ですが、「帰ってきた翌日から」新たな出張が始まる場合が「連日」になるという事は、「帰って来た日」に新たな出張が始まる場合や、「帰って来る前」に新たな出張が始まる場合は、「連日」とはならないという事になります。  そして、前の回の出張は「帰ってきた日」で終了しているのですから、「帰ってきた翌日」は「前の回の出張期間」とは重なっていない事になりますので、「連日」になる場合には、絶対に「重複」とはなり得ない事になります。  従いまして、 >両方の条件を満たすときは「重複、連日」と表示される 等という事はあり得ない事になります。  もしかしますと、「連日」と表示する条件は、「帰ってきた翌日から出張の場合」等ではなく、「帰ってきた日の翌日も別の出張がある場合」或いは「出発日の前日にも別の出張に行っていた場合で、尚且つ、前の出張が終了した後も新しい方の出張が継続する場合」の間違いではないでしょうか?  ですから、取り敢えずの話として、「出発日の前日にも別の出張に行っていた場合で、尚且つ、前の出張が終了した後も新しい方の出張が継続する場合」において「連日」と表示するものとして回答させて頂きます。  それと、SUMPRODUCT関数は、関数内で指定されているセル範囲内に含まれているセルの個数と同じ回数だけ、繰り返し計算を行う関数ですので、例えば6行目~1000行目を計算対象とした場合には、996回も似た様な計算が繰り返される事になります。  このため、広いセル範囲を処理する際にSUMPRODUCT関数を使用しますと、計算処理に要するコンピュータの負荷が大きくなり、結果が表示されるまでに掛かる時間が長くなる傾向があります。  ですから、御質問の「重複」や「連日」を表示する際の条件分岐を決める部分には、SUMPRODUCT関数ではなく、COUNTIFS関数を使われる事を御勧め致します。  今仮に、「重複」や「連日」等の結果をL列に表示させるものとします。  まず、F6セルに次の関数を入力して下さい。 =IF(OR($I6="",ISERROR(1/DAY($J6)/DAY($K6))),"",REPLACE(IF(COUNTIFS($I:$I,$I6,$J:$J,">="&INT($J6),$J:$J,"<"&INT($K6)+1)+COUNTIFS($I:$I,$I6,$K:$K,">="&INT($J6),$K:$K,"<"&INT($K6)+1)+COUNTIFS($I:$I,$I6,$J:$J,"<="&INT($J6),$K:$K,">="&INT($K6))-3,"、重複","")&IF(COUNTIFS($I:$I,$I6,$K:$K,">="&INT($J6)-1,$K:$K,"<"&INT($K6)),"、連日",""),1,1,))  そして、F6セルをコピーして、「重複」や「連日」等の結果を表示させるための欄内にある、全てのセルに貼り付けて下さい。  以上です。

qazxcvfr4
質問者

お礼

丁寧なご回答ありがとうございます。 >質問の条件には矛盾があります。 >「帰ってきた翌日から」新たな出張が始まる場合が「連日」になるという事は、「帰って来た日」に新たな出張が始まる場合や、「帰って来る前」に新たな出張が始まる場合は、「連日」とはならないという事になります。 おっしゃるとおりです。 帰ってきた日に別の新たな出張がある場合などは、到着日と出発日が同じことになるので、「重複」と表示されることになります。 なお、その場合、最初の出張も新たな出張も、ともに「重複」と表示させたいと思います。 >そして、前の回の出張は「帰ってきた日」で終了しているのですから、「帰ってきた翌日」は「前の回の出張期間」とは重なっていない事になりますので、「連日」になる場合には、絶対に「重複」とはなり得ない事になります。 たとえば、 1行目 田中 一郎 12/1 12/2 2行目 田中 一郎 12/2 12/3 3行目 田中 一郎 12/4 12/4 4行目 田中 一郎 12/5 12/6 5行目 田中 一郎 10/5 10/5 6行目 田中 一郎 12/24 12/24 7行目 田中 一郎 12/24 12/25 という場合、2行目は、出発日が1行目と重複しているうえに、3行目と連続しています。 > =IF(OR($I6="",ISERROR(1/DAY($J6)/DAY($K6))),"",REPLACE(IF(COUNTIFS($I:$I,$I6,$J:$J,">="&INT($J6),$J:$J,"<"&INT($K6)+1)+COUNTIFS($I:$I,$I6,$K:$K,">="&INT($J6),$K:$K,"<"&INT($K6)+1)+COUNTIFS($I:$I,$I6,$J:$J,"<="&INT($J6),$K:$K,">="&INT($K6))-3,"、重複","")&IF(COUNTIFS($I:$I,$I6,$K:$K,">="&INT($J6)-1,$K:$K,"<"&INT($K6)),"、連日",""),1,1,)) 3番の回答もそうですが、センスと技術の光る式を組んでいただいたのに誠、申し訳ありません。 理解できない点が多いので、まずは、途中まで理解して、あれこれ苦闘した質問文のSUMPRODUCT関数で考えていただけるととても助かります。 よろしくお願いいたします。

関連するQ&A

  • SUMPRODUCT関数の使い方

    いつもお世話になっております。SUMPRODUCT関数の使い方が解らず困っています。 どなたか、教えてください。 I列(3~1034)に101と入力されており、F列(3~1034)に○と入力されているセルの数を数えたくて、 SUMPRODUCT関数を使いましたが、答えが0になるか、NAME?になるかで、正答が表示されません。 関数が苦手なので、SUMPRODUCTは、関数の表示ダイアログボックスを使って作成しています。 すると、配列1、配列2、配列3と出てくるので、 配列1に I3:I1034=101 配列2に F3:F1034=○ (絶対参照して)入力すると =SUMPRODUCT($I$3:$I$1034=101,$F$3:$F$1034=○) となり、答えは #NAME? と出てしまいます。 また、やり方が解らないのですが、他の質問の回答をみて、SUMPRODUCT関数を手入力し、 =SUMPRODUCT(($I$3:$I$1034=101)*($F$3:$F$1034=○)) と修正入力すると、答えは 0 になってしまいます。 (だいたい、どうして * が出てくるのかも理屈が解りません。) 101や○を””でくくっても、うまくいきません。 もはや何がどう良くないのかわかりません(泣) どなたか、素人の私にも解るようにご解説お願いいたします。

  • 旅費を二重払いしないための関数SUMPRODUCT

    エクセル2010を使っている者です。 たとえば以下のようにエクセルの表において、旅費精算をする1つの旅行(出張)について 一行で書いたシートがあったとします。 NO(A列)  名前(B列)    出発日(C列)   帰着日(D列) 1 田中 一郎    11/3        11/5 2 田中 一郎    11/2        11/4 3 田中 三郎    11/5        11/6 4 田中 四郎    11/2        11/2 5 田中 五郎    11/2        11/5 6 田中 六郎    11/9        11/12 8 田中 一郎    11/6        11/7 9 田中 一郎    11/3        11/3 10 田中 一郎    11/10       11/11  11  田中  一郎    11/14 11/14 12 田中 一郎    11/15       11/15 田中一郎さんについて見ていただきたいのですが、この場合、機械的に作業すると 二重に旅費を支払ってしまいそうな場合に関係する行は、10行目以外のすべてです。 氏名が同じで、出発日、到着日が重なっている部分がある場合はもちろんのこと、 連続して出張している場合(11月5日、11月6日)もその危険性があります。 (たとえば、11月3日から5日が東京→仙台、11月6日・7日が青森出張だった 場合、5日は東京に戻らずに仙台から青森まで行った可能性があるからです) こうした場合に、指定したセル(列)に「確認」という文字が入るように以下の関数を 組んで下にドラッグしているのですが、完全にはうまく動いてくれません。 12行目の11月15日の出張についても「確認」と入ってほしいのですが、11行目の14日の 行については「確認」と入るのに、12行目には入りません。 =IF(SUMPRODUCT((B$1:B$1000=B1)*(C$1:C$1000<=D1+1)*(D$6:D$1000>=C1))>1,"確認","")) うまくいかなかったので、以下のようにしたのですが、もっとダメでした。 上の関数はずっと前にここの掲示板で教えていただいたものを少しだけ変えたものなのですが、 そもそもなぜ、sumproduct関数の値を「>=1」ではなく「>1」としているのでしょうか? =,IF(OR(SUMPRODUCT((B$6:B$1000=B1)*(C$1:C$1000<=D1+1)*(D$1:D$1000>=C1))>=1,SUMPRODUCT((B$1:B$1000=B1)*(D$1:D$1000=C1-1))>=1),"確認","")) よろしくお願いいたします。

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

  • エクセル IF関数 条件を満たす行に印をつける

    A1:J30までにランダムな数値が入力されている表があります。M1:N4には検索値を入力できる箇所があり、条件に該当する行があればK列に○を付ける、ということがしたいです。その条件は、 (1)M1かN1に該当する (2)M2かN2に該当する (3)M3かN3かM4かN4に該当する この3条件のすべてを満たす行があればK列に○です。 いろいろ調べて、IF関数とsumproductを組み合わせてやってみたのですが、正しい結果にならずお手上げ状態です。(ちなみにこれ↓長すぎなのもネック。。。) =IF(AND(SUMPRODUCT((A1:J1=$M$1)+(A1:J1=$N$1))>=0,SUMPRODUCT((A1:J1=$M$2)+(A1:J1=$N$2))>=0,SUMPRODUCT((A1:J1=$M$3)+(A1:J1=$N$3)+(A1:J1=$M$4)+(A1:J1=$N$4)>=0)),"○","") IF関数でなくてもできれば何でも良いので、教えてください。 よろしくお願いいたします。

  • SUMPRODUCT関数について

    よろしくお願いいたします。EXCEL2013使用です。 上の画像、出張者リスト(名前、出発日、帰国日)から、別のシートに一目でわかる一覧表を作りたいのです。例えば、11/06-11/15まで出張だったとしたら、下の表で6日から15日までを黄色背景にする、等です。 下の表で、日付セルの下の各セルに次のような関数を入力しましたがうまく動作しません。 =SUMPRODUCT((リスト!$B$2:$B$300=$A4)*(INT(リスト!$C$2:$C$300)>=INT(B$2))*(INT(リスト!$D$2:$D$300)<=INT(B$2))) ※下の画像は12月ですが、その上に11月があり、上記関数内のセルのアドレスが間違っている訳ではありません。 SUMPRODUCT関数は大変便利なのでこれまで多用してきましたが、今回は完全に頓挫してしまいました。 どこがいけないのでしょうか。おわかりの方、是非ご教示下さいませ。 どうぞよろしくお願いいたします。

  • エクセルのSUMPRODUCT関数についての質問

    SUMPRODUCT関数を使って、1列おきにカウントさせる式をつくっていて、 セルの指定方法について疑問をもちましたので質問させていただきます。 A1からJ1に数字がはいっているとして、偶数列だけカウントします。 =SUMPRODUCT((MOD(COLUMN(A:J),2)=0)*(A1:J1<>0)) =SUMPRODUCT((MOD(COLUMN(A:J),2)=0)*((A1:J1)<>0)*1) 上の式で答えはでるのですが、*以降の指定の違いがわかりません。 どなたかお分かりになる方おられましたら、よろしくお願いします。

  • 2つ以上の条件でエクセルで重複したデータを抽出したい

    下記のようなエクセルのデーターがあったとします。 「氏名が重複していてかつ個数も重複するもの」 を抽出したいのですがどうすればよいでしょうか? いろいろ検索したところIF(SUMPRODUCT(($A$3:A3=A3)*($B$3:B3=B3))>1,"同じ人","") という風にすればよいようなのですが、この式自体がよくわかりません。IF関数の中にSUMPRODUCTを ネストするところまではわかるのですがその後の式「:A3=A3)*($B$3:B3=B3))」までがわかりません。 何を選んでこういった式になるのでしょうか??初歩的な質問で申し訳ないのですが、教えてください。 よろしくお願いします。 A列 B列 氏名 個数 加藤 1 新妻 2 加藤 1 鈴木 3 加藤 6 小島 8

  • 関数の訂正

    I8からI250まで数量データが入っています。 J8からJ250まで単価データが入っています。 その合計を計算するのに下記の関数を入れています。 =SUMPRODUCT(I8:I250,J8:J250) 数量のところが数量ではなく、25kみたいな重量を入れたい時があります。 そのときも、25と認識して計算してもらいたいのです。 数量  単価 10   50 20k 100 計算結果は、2500となるような関数をご教授くださいませ。 よろしくお願いします。 =SUMPRODUCT(SUBSTITUTE(I8:I250,"k","")*1,J8:J250) でやってみたのですが、valueエラーがでます。 8行目から250行目までデータがないとダメなんでしょうか?

  • エクセル SUMPRODUCT関数について教えてください

    エクセルで作成した表から ○○かつ●●のデータ個数を求めたく、 SUMPRODUCT関数を こちらで調べておりましたが どうしても解決しない部分があります。 どうぞ よろしくお願いいたします。 下記8桁数字は、日付です。 カウントしたい数は、B列(終了)が、A1セルに入力された年月かつ、区分(C列)が「A」の数です。 =SUMPRODUCT((LEFT(B2:B100,6)=A1)*(C2:C100="A")) こちらで、『B列=A1セル かつ C列="A"』のみのカウントは出来たのですが、 終了延長(D列)が空欄でない場合は、D列日付データの方をカウントする。 早期終了(E列)が空欄でない場合は、D列・B列よりも E列を優先し、カウントする。という条件を付けたいのですが、 Sheet1 A1セルに「200810(数を調べたい年月を入力)」 (開始)  (終了)     (区分)  (終了延長)  (早期終了)  A列     B列      C列     D列      E列 20061001   20081001   A    -        - 20070926   20081020   A    -        - 20071102   20081009   A    20081201    - 20080101   20081013   B    -        - 20080208   20081010   A    -        20080210 ・・・ この場合、「2」となるようにです。 IF、OR関数あたりかな と考えておりますが、SUMPRODUCT関数のどの部分で条件付ければ良いか解りません。 説明下手で大変申し訳ございませんが、ご助力いただければ幸いです。 

  • SUMPRODUCTでしょうか?

    A列 B列 C列 名 目標 実績 いちご 100 123 ぶどう 120 115 みかん 110 130 ばなな 110 120 人数 上記の表があり、実績(C列)が目標(B列)を上回った人数を関数を使ってカウントして、人数欄に表示したいです。 どのように求めたらいいのでしょうか? SUMPRODUCT関数かCOUNTIF関数かなと思ったのですが、どのように作成すればいいのかわかりません。 教えて下さい。よろしくお願いします。