• 締切済み

エクセルの関数の質問です。

エクセルの関数の質問です。 1日の案件数を求めるのは簡単ですが、同顧客が1日に何度も混在する場合の1日の顧客数の 求め方がわかりません。 種類の数え方の応用編でしょうか?どなたか教えてください! エクセルでsheet1のA2からA400までが顧客番号(文字列。空白含む。)、B2からB400までが日付(1日から31日)(1から31の数値。空白含む。)、sheet2のA2からA32までが1日から31日まで、のとき、sheet2のB2からB32にその日ごと(B2ならA2(1日))の顧客数を出す数式を教えてください。 ※sheet1の顧客番号、日付は、同じ顧客番号、同じ日付も含まれ、混在しています。 ついでにsheet2のC2からC32までに1日の案件数も出したいです! 例) sheet1 A  B 05 1日 05 1日 03 1日 01 1日 01 2日 01 2日 06 2日 05 2日 03 2日 sheet2 A   B   C 1日 3名  4件 2日 4名  5件 3日 0名  0件 4日 0名  0件 sheet2のBとCを数式にしたいです。

みんなの回答

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.6

#4の回答者です。(マクロでの解決法) ブックは重くなることはありませんが、配列数式と同じく、ブックを開くと再計算が要求されます。 Sheet2 A列 1日 2日 3日 4日 B列の数式 =mySumIf(Sheet1!$B$1:$B$9,A1,Sheet1!$A$1:$A$9) Function mySumIf(rng1, sText, rng2) As Long '件数を出すためのユーザー定義関数  Dim ar() As Variant  ReDim ar(0): ar(0) = -1  For i = 1 To rng1.Rows.Count   If Trim(rng1.Cells(i, 1).Text) = sText Then    buf = rng2.Cells(i, 1).Value    If i = 1 Then     ReDim Preserve ar(j)     ar(j) = buf     j = j + 1    ElseIf IsError(Application.Match(buf, ar, 0)) Then     ReDim Preserve ar(j)     ar(j) = rng2.Cells(i, 1).Value     ReDim Preserve ar(j)     ar(j) = rng2.Cells(i, 1).Value     j = j + 1    End If   End If  Next  If ar(0) <> -1 Then   mySumIf = UBound(ar) + 1  End If End Function C列は、同じ C1;=COUNTIF(Sheet1!$B$1:$B$9,Sheet2!A1) なお、1日、3名、4件 の接尾辞は、少なくとも、日付以外は、ユーザー定義書式で処理したほうがよいかもしれません。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.5

こんにちは! 一例です。 ↓の画像で説明します。 Sheet1に作業用の列を2列設けています。 作業列C2セルに =A2&B2 D2セルに =IF(COUNTIF($C$2:C2,C2)=1,1,"") という数式をいれ、C2・D2セルを範囲指定し、D2セルのフィルハンドルでオートフィルで下へずぃ~~~!っとコピーします。 そして、Sheet2のB2セルに =SUMPRODUCT((Sheet1!$B$2:$B$1000=A2)*(Sheet1!$D$2:$D$1000=1))&"名" C2セルに =COUNTIF(Sheet1!$B$2:$B$1000,A2)&"件" という数式をいれ、B2・C2セルのフィルハンドルで下へコピーすると 画像のような感じになります。 (エラー処理はしていません) 尚、数式はSheet1の1000行目まで対応できるようにしています。m(__)m

oideyanoto
質問者

お礼

ほったらかしですみません。。。 質問者です。 みなさん、素晴らしいご回答、ありがとうございました! 質問したのが初めてでして、どう皆さんにお礼をしたらよいものか、やり方がよくわかりません。。 本当にみなさんありがとうございます! 皆さんのおかげで解決しました! みなさん、本当に頭がいいですね!

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

Sheet2 A1~ 1日 2日 3日 4日 B1~ =COUNT(INDEX(MATCH(ROW($A$1:$A$20),INDEX(SMALL((Sheet1!$B$1:$B$9=Sheet2!A1)*(Sheet1!$A$1:$A$9),ROW(INDIRECT("A"&COUNTIF(Sheet1!$B$1:$B$9,"<>"&Sheet2!A1)+1&":A"&COUNTA(Sheet1!$B$1:$B$9)))),,),0),,)) C1;=COUNTIF(Sheet1!$B$1:$B$9,Sheet2!A1) 上記の式は、小さな範囲で作られたもので、実際は、もっと大きな範囲ですると、かなり数式として重くなるはずです。おまけに、MATCH(ROW($A$1:$A$20)で、20名までしか探しません。これが、もっと多くなると、余計に重くなってしまいます。あまり大きなもので、補助列を使わない場合は、マクロによる処理のほうがよいのではないかと思います。

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

回答2です。大変失礼いたしました。シート1では作業列がC列でC2セルに式を入力して下方にオートフィルドラッグです。B2セルと回答2では記してしまいました。C2セルに訂正してください。

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

シート1には作業列を作って対応するのがよいでしょう。 B2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(COUNTA(A2:B2)<>2,"",1/SUMPRODUCT((A$2:A$400=A2)*(B$2:B$400=B2))) シート2ではB2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(A2="","",SUMIF(Sheet1!B$2:B$400,A2,Sheet1!C$2:C$400)) C2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(A2="","",COUNTIF(Sheet1!B$2:B$400,A2))

回答No.1

重複していないのであれば=count(検索範囲,検索条件)でできるとおもいます。 自分は5年ほどエクセルから離れているので若干曖昧ですが確かできたと思います。 別シートになっていても範囲を指定することができたはずです。 こんな感じで(sheet1!A$1:A$122,顧客番号) 参考にしてください。 参考URLのところで大体学びました。

参考URL:
http://www.eurus.dti.ne.jp/~yoneyama/Excel/kih_moku.htm

関連するQ&A

  • エクセルでsheet1のA2からA400まで顧客番号(文字列。空白含む

    エクセルでsheet1のA2からA400まで顧客番号(文字列。空白含む。)、B2からB400まで日付(1日から31日)(1から31の数値。空白含む。)、sheet2のA2が1日からA32が31日まで、のとき、sheet2のB2からB32にその日ごと(B2ならA2(1日))の顧客数を出す数式を教えてください。 ※sheet1の顧客番号、日付は、同じ顧客番号、同じ日付も含まれ、混在しています。 例) sheet1 A  B 05 1日 05 1日 03 1日 01 1日 01 2日 01 2日 06 2日 05 2日 03 2日 sheet2 A   B 1日 3人 2日 4人 3日 0人 4日 0人 sheet2のBを数式にしたいです。

  • エクセル関数の質問です

    エクセルでの質問です。シートAには顧客名と顧客番号が入ったリストに売上の数字が入っています。このうち、シートBにある顧客売上だけを集計したいのですが、Bには顧客の名称が一部でしか入っていません。たとえばAには、Yahoo Japan Corporation、BにはYahoo としか書いていないのですが、どうしたらBの顧客リストにある顧客番号を検索できるでしょうか?

  • エクセル2003 関数

    いつも回答して頂きありがとうございます。ちょっと悩んでいる事があります。 シート名1日の前半の赤,青,白,黄は最初から表示させていますが、1日の後半・2日の前半・・・は、前の状態【例えば、2日の前半以降で表示させるかどうかの判定は1日の後半の入力状況で判定】を確認して表示の有無を決めようと思っています。【シート名1日の前半の赤の右隣のセルに済が入力されたら、それ以降のシート名1日の後半や他のシートには赤を表示させない】 作業用のシートは作りましたが、シート名:1日の後半以降に入力する数式が分かりません。 作業用のシートからCOUNTIFで済の入力の有無を確認すればいいだけと思いますが、その式をどう形作ればよろしいでしょうか?宜しくお願い致します。 ・日付をふったシートの特定セルの入力内容を一覧シートに表示させる為の数式。 『前半』の行で表示させる為の数式 =IF(ISERROR(INDEX(INDIRECT($B3&"!$B$4:$C$25"),MATCH(D$2,INDIRECT($B3&"!$B$4:$B$25"),0),2))=TRUE,"",INDEX(INDIRECT($B3&"!$B$4:$C$25"),MATCH(D$2,INDIRECT($B3&"!$B$4:$B$25"),0),2)) 『後半』の行で表示させるための数式 =IF(ISERROR(INDEX(INDIRECT($B4&"!$G$4:$H$25"),MATCH(D$2,INDIRECT($B4&"!$G$4:$G$25"),0),2))=TRUE,"",INDEX(INDIRECT($B4&"!$G$4:$H$25"),MATCH(D$2,INDIRECT($B4&"!$G$4:$G$25"),0),2))

  • エクセルにて

    Aのシート   Bのシート 番号 件数  番号 件数 1   16    2   15 2   19    4   19 3   18 4   17 Bのシートの番号2と一致するAのシート番号2を 検索し、一致した場合 Bの件数15件からAの件数19件を引いた数値を 求めるにはどうすればいいでしょうか? 一致するセルの件数を求めるところまではできたのですが 参照して引き算をすることができません。 宜しくお願いします。

  • エクセル関数で質問です

    こんにちは。いつもお世話になっております。 エクセルの関数で質問があります。 毎月の集計表を作っており、シート名が1~31、 ●月合計・●月合計2 とあります。 ●月合計のシートには日付が縦に入っており、 A4 ●月1日 A5 ●月2日・・・というように 続いております。 B4のセルには、 1のシートの数値、 B5のセルには  2のシートの数値・・・というように、 各シートのデータを参照したいと思っていますが、 下へオートフィルで数式をコピーして参照できるように するにはどうしたらいいでしょうか? ROW関数などを使ってみたのですが、どうもうまくいかず 困っています。 一列だけでなく、複数列あるため、手作業で一つ一つ 参照するのは、非常に困難なため、お知恵を拝借できれば幸いです。 よろしくお願いいたします。 

  • エクセル 関数の結果が日付になるようにする方法

    エクセル2003を使用しています。 現在、シートAのセルT20に、1月16日と入力すると シートBのセルA5に、自動的に1月16日と表示されるようになっています。 (シートBのA5の数式は、 =シートA!T20 です。) この場合、シートAのセルT20が空白の場合、 シートBのセルA5は、1月0日 と表示されます。 シートAで空白の場合は、シートBでも空白にしたいので、 シートBのセルA5の数式を =シートA!T20&IF(シートA!T20="","",) としました。 すると、結果が、40559 となってしまいます。 セルの表示形式を日付にしても、どうしても数字になってしまいます。 どうすればよいか教えてください。 よろしくお願いいたします。

  • エクセル関数2

    シート(1) A B C D 作業列    コード    顧客名     金額 3        300001     A 10,000 3        300002   B 15,000 3        300003   C 20,000 3        300004   D 25,000 3        300005   E 30,000 4        400001   F 35,000 4        400002   G 40,000  4 400003 H 45,000 4 400004 I 50,000 4 400005 J 55,000         シート(2) A B C D E F 「1」 「2」 「3」 「4」 「5」 「6」 10,000 35,000 15,000 40,000 20,000 45,000 25,000 50,000 30,000 55,000 ※ シート(1)にコード、顧客名、金額を入力すると、シート(2)にあるように該当するコードの先頭行の列に表示するようにしたいと思っています。 シート1で作業列を作りその作業列を基にシート2でVLOOKUP関数を使い‥シート2の10,000のセルの場合、 VLOOKUP(C$2,sheet1!$A$3,$D$12,4,false)として、下にコピーすると同じ金額になってしまいます。 セルが空白にならず、シート1の金額が上から順番にシート2に表記されるようにするにはどうしたらよいでしょうか。マクロはできませんので、関数で詳しく教えて下さい。宜しくお願いします。

  • エクセルの数式・関数を教えてください。

    入力シートにデータがあり、請求書シートに期間を参照して日付を埋め込みたいと考えています。 期間というものは、請求シートの請求日の前月1ヶ月間を考えています。 入力シート    a    b     c     d 1 日付  商品1  商品2  商品3 2 12/7    100   200   300 3 12/15    40    50   60 4 1/7      70    80   90 請求シート  請求日(AR3)  請求内訳日付欄(C12:C42) C12などの欄の数式で、セルAR3の日付の前月の日付範囲で入力シートの日付欄を抽出したいのです。 いろいろ調べましたが、なかなかうまくいかず困っています。 参考となる数式を教えていただければ、助かります。

  • エクセルの関数についてです、よろしくお願いします

    エクセルの関数についてです、よろしくお願いします。 sheet1に以下の様なデータが何百行とあります。 A B C D E 日付  顧客名  品名  数量  金額 上記のsheet1のデータを基にsheet2へ抽出して転記する ものを作りたいと考えています。 具体的に言いますと sheet2のA1に2014/11/21、 B1に2014/12/20、 C1に ○○商店と入力するとその下に A      B     C     D 日付   品名   数量 金額 2014/11/23  りんご 5 750 2014/11/28  みかん 2 300 2014/12/2   いちご 3 600 2014/12/10  りんご 5 750 sheet1のリストから該当するものを引っ張ってきて sheet2へ表示させるものです オートフィルタ等でなく、関数で出来ないでしょうか お詳しい先生方よろしくお願いします。

  • エクセルの数式についての質問です。

    下記の数式で、「一覧!A4:EG1003,137」の「一覧!A4:EG1003,137」が空白の場合に、空白で返す場合の数式をお教えください。 現状の数式 =VLOOKUP(B1,一覧!A4:EG1003,137) 補足説明 エクセルのシート(一覧シート)のA4:EG1003内で137列目が空白の場合は空白で返す数式にしたいです。 VLOOKUPを使用しているので、別シートのB1セルには一覧シートの専用番号の行の値を入力するとその行が全て別シートに反映される形になっています。その時に空白の個所があると0表示になってしまうので、空白は空白で返したいです。

専門家に質問してみよう