• ベストアンサー

エクセル関数での集計

営業マン毎に新規顧客営業管理表があります。 {鈴木のリスト}    A      B 1 <顧客名> <対象性> ・・・ 2 三菱商事   対象 3 住友商事   対象 4 双日     非対象 5 清水建設   対象 6 ・・・ {山田のリスト}     A     B 1 <顧客名> <対象性> ・・・ 2 鹿島建設   対象 3 大成建設   非対象 4 竹中工務店  対象 5 ・・・ 上の二つのリストは、同一ファイルの別々のシートになっています。 これとは別に、顧客名簿一覧表があります。     A      B      C 1 <顧客名> <新規対象客> <住所> 2 三菱商事 3 住友商事 4 双日 5 清水建設 6 ・・・ ここで、上の新規顧客営業管理表の二つのシートにおける、<顧客名>と<対象性>の二つの条件を判断して、上の顧客名簿の<新規対象客>の欄に「新規対象客」、または、「新規非対象客」と表示させたいのです。  例えば、顧客名簿一覧表の三菱商事について、鈴木のリストと山田のリストの二つを参照して、<対象性>に対象とあれば、「新規対象客」、そうでなければ「未対象客」と表示させたいのです。  一つのシートで一つの条件で判断するのであれば、=IF(countif(範囲,A1),"取引顧客",”未取引顧客”)でできると以前教わりましたが、(1)顧客名と対象性の両方に合致すること、(2)参照先が2つの表(シート)になることから、まったく手に負えません。どうかご教示願います。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

関数を利用したひとつの例です。 【前提条件】 (1)鈴木のリストは、シート名を「鈴木」とし、データは、A2:B10まであるものとする。 (2)山田のリストは、シート名を「鈴木」とし、データは、A2:B10まであるものとする。 (3)両方のリストには、ともに同じ顧客名があるものとする。 【手順】 (1)新規名簿一覧表のD,E列があいているとしてここを作業セルに使い、以下の式を入力します。 D2=VLOOKUP(A2,鈴木のリスト!$A$2:$B$10,2) E2=VLOOKUP(A2,山田のリスト!$A$2:$B$10,2) (2)B列を新規対象客の列とし、B2に以下の式を入力します。 B2=IF(AND(D2="対象",E2="対象"),"新規対象","新規非対象客") (3)B2およびD2,E3を必要なセルまでコピー、貼り付けしていきます。 もし、いずれかのリストに対象客がない場合は、作業セルに#N/Aエラーがでるので、それをISNA関数などで回避することが必要です。 【例】 D2=IF(ISNA(VLOOKUP(A2,鈴木のリスト!$A$2:$B$10,2)),"非対象",VLOOKUP(A2,山田のリスト!$A$2:$B$10,2)) E2=IF(ISNA(VLOOKUP(A2,山田のリスト!$A$2:$B$10,2)),"非対象",VLOOKUP(A2,山田のリスト!$A$2:$B$10,2))

ryu1961
質問者

お礼

実際に活用させていただきました。どうもありがとうございました。

その他の回答 (2)

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

質問とは結果が異なりますが、(住所がありませんが)、 「顧客名簿一覧表」を各「営業担当者シート」から、作ってしまうやり方です。 ーーーー 鈴木シート(シート名「鈴木」) 顧客名 対象 三菱商事 対象 住友商事 対象 双日 非対象 清水建設 対象 大林組 対象 山田シート(シート名山田)以下何シートあっても良い。 顧客名 対象 鹿島建設 対象 大成建設 非対象 竹中工務店 対象 清水建設 非対象 大林組 対象 ------ VBAコード Sub test01() '-----合体 Dim sh As Worksheet k = 2 For Each sh In ActiveWorkbook.Worksheets If sh.Name = "Sheet3" Then GoTo p01 d = sh.Range("A65536").End(xlUp).Row For i = 2 To d For j = 1 To 3 Worksheets("Sheet3").Cells(k, j) = sh.Cells(i, j) Next j Worksheets("sheet3").Cells(k, 3) = sh.Name k = k + 1 Next i Next '-----ソート p01: Sheets("Sheet3").Range(Cells(2, "A"), Cells(k, "C")).Select Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin, DataOption1:=xlSortNormal '-----重複排除 p02: Dim sh3 As Worksheet Set sh3 = Worksheets("Sheet3") n = 2 For i = 2 To k If m = sh3.Cells(i, "A") Then If sh3.Cells(i, "B") = "対象" Then sh3.Cells(n - 1, "H") = sh3.Cells(n - 1, "H") & " " & sh3.Cells(i, "C") End If Else For j = 1 To 3 sh3.Cells(n, j + 5) = sh3.Cells(i, j) Next j m = sh3.Cells(i, "A") n = n + 1 End If Next i End Sub 結果 Shee3に(下記のF列より右側が、最終結果です。左は中間結果。) 三菱商事 対象 鈴木 三菱商事 対象 鈴木 鹿島建設 対象 山田 鹿島建設 対象 山田 住友商事 対象 鈴木 住友商事 対象 鈴木 清水建設 対象 鈴木 清水建設 対象 鈴木 清水建設 非対象 山田 双日 非対象 鈴木 双日 非対象 鈴木 大成建設 非対象 山田 大成建設 非対象 山田 大林組 対象 鈴木 山田 大林組 対象 鈴木 竹中工務店 対象 山田 大林組 対象 山田 竹中工務店 対象 山田 ---- 改造できるなら使えるかも。 住所等法人付加情報は、VLOOKUPで引くとかできそう。

ryu1961
質問者

お礼

うまく動きました。どうもありがとうございました。いつも拝見していますが、とても高度な知識をお持ちですね。尊敬します。

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

関数例が挙がっているので、あわよくば関数でできないかという質問だと思うが、エクセルの関数では難しい(極端に複雑になる)見込みです。エクセルVBAならできると思う。各営業マンのリスト客合計が65000以下であるとして) これなどXXシステムのある部分で出てくる場面であって、表計算では不得手なものと思う。アクセスならできそう。 ーー 別件ですか、なぜ「非対象」の顧客が上がっているのですか、各営業マンの鈴木と山田の名簿がちがうのでしょうか。今は対象でないが、そのうち対象にする候補なのか。 また顧客名簿一覧表や鈴木・山田の名簿の並べ順は何ですか。

ryu1961
質問者

補足

早速のご回答ありがとうございます。 非対象の顧客が上がっているのは、対象と非対象の割合を出すためです。また、おっしゃるとおり、将来対象となるまたはその逆がある場合も考えています。 それから、顧客名簿一覧表や名簿の並べ順は完全なランダムです。

関連するQ&A

  • エクセル関数で複数条件を満たす個数を集計したいのですが。

    市町村別の顧客一覧表があります。一覧表には、市町村名と固定客かどうかが入力されています。その市町村名における固定客を分類集計したいのですが・・・。 <市町村別顧客一覧表> 市町村名 顧客名   性質 角鹿市  大沢商会  固定客 秋田市  小沢商会  流動客 秋田市  三菱商事  固定客 秋田市  三井商事  固定客 大曲市  住友商事  流動客 ・・・ <集計表> 市町村名 固定客数 角鹿市   1 秋田市   2 大曲市   0 このような集計表を作成したいのです。 よろしくお願いします。

  • Excel VBA 集計方法

    在庫状況にもとづいて、売上表の行を削除するマクロを組みたいと思います。(2つのシートに分かれています) <共通条件> お客様Noは一意です。 お客様No2以降は他のアカウントで別の品名が入っています。 <作業内容> お客様No2以降も同様に売上表シートの行を削除します。 お客様ごとに同じ品名で在庫状況シートの本数まで、売上表シートの在庫状況列の「No」の行を削除します。在庫状況シートの本数を超えると売上表シートの在庫状況列の「Yes」の行を削除します。 上記の作業はマクロで可能でしょうか。 下記に表を記載します。 <在庫状況>シート お客様No お客様名       品名 本数 在庫状況 1 はなまる商事 XYS Beta  5  Yes 2 3 4 5 <売上表>シート お客様No お客様名       品名 本数 在庫状況 1 はなまる商事 XYS Beta 1 No 1 はなまる商事 XYS Beta 1 Yes 1 はなまる商事 XYS Beta 1 No 1 はなまる商事 XYS Beta 1 Yes 1 はなまる商事 XYS Beta 1 No 1 はなまる商事 XYS Beta 1 Yes 1 はなまる商事 XYS Beta 1 No 1 はなまる商事 XYS Beta 1 Yes 1 はなまる商事 XYS Beta 1 No 1 はなまる商事 XYS Beta 1 Yes 1 はなまる商事 XYS Beta 1 No 1 はなまる商事 XYS Beta 1 Yes <マクロ実行後の結果> お客様No お客様名 品名 本数 在庫状況 1 はなまる商事 XYS Beta 1 Yes 1 はなまる商事 XYS Beta 1 Yes 1 はなまる商事 XYS Beta 1 Yes 1 はなまる商事 XYS Beta 1 Yes 1 はなまる商事 XYS Beta 1 Yes 1 はなまる商事 XYS Beta 1 No ※表がずれていますが、品名はアルファベットです。

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

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

  • エクセル関数について!いそぎです

    3000もの事業者の名簿aから、別シートにあるb名簿に100程のっている事業者リストのなかから、aにある業者のみをすべてピックアップし、別のシートに添付したいのですが、どうしたらいいのかさっぱりわからなくて、、

  • エクセルでの集計について

    エクセルでの集計について質問です。 【4月】 (営業A)              (営業B) A     B       C      D       E      F 会社名  品名   売上金額  会社名  品名   売上金額 ○○   ××   ¥10,000   □□   △△   ¥50,000 □□   ■■   ¥30,000   ★★   ○○   ¥20,000 ○○   ☆☆☆  ¥50,000   ○○   ???  ¥30,000 上記のように1枚のシートに営業さんごとに分けて月別の売上表を作っています。 最後のシートに個人ごとの年間売上げ表を作りたいのですが、 【年間合計】      (営業A)   (営業B) A      B      C       会社名  売上金額  売上金額 ○○   ¥60,000  ¥30,000 □□   ¥30,000  ¥50,000 ★★   ¥0     ¥20,000 上記のように会社名ごとに年間合計を作る場合にはどのような方法がありますでしょうか?(年間合計に品名は必要ありません) SUMIFを入力してみたら、ものすごく式が長くなってしまいました… 他に方法がありましたら宜しくお願いします。

  • EXCELのDCOUNTA関数について

    EXCELで500名程度の名簿管理をしています。 DCOUTA関数を使って、「○○区に住んでいる女性の人数」等の抽出を行っていますが、下記のような不具合があります。 ・同じファイルに名簿シートと抽出シートを分けていますが、抽出シートで計算された数字が名簿シートの実数と一致しません。 (名簿シートの実数は手計算しました。) ↓ ・名簿シートに抽出シートと同じ抽出表をコピーしたところ、実数と一致しました。 ただ、上記のようだと、名簿シートに抽出表も貼りつけることになり、大変見にくいので、シートを分けてもきちんと結果が出るようにしたいのですが、どうしたらよいでしょうか。 なお、範囲名は漢字で「登録者」としています。 ご教授よろしくお願いします。

  • エクセル関数について

    エクセルで顧客名簿を作っています。 「顧客名(個人名)」「会社名」「住所」「電話番号」などを横軸にとって、縦に顧客(個人名)毎に入力しています。 完成した表で、何社入力したか数えたいのです。 顧客(個人名)毎に入力しているので、同じ会社名がいっぱいある状態です。その会社名を重複せずに、何社あるのか関数で求めたいのです。 よろしくお願いします。

  • ★★エクセルでの集計★★

    エクセルの集計の方法で以下の内容に対応するものを教えてください。 例えば、単純な集計表で縦のAに「日付」、Bに「営業担当」、Cに「集客お客様名」のような表があり、表欄外に担当別に何月何日に何組のお客様を集客したのかを集計したのですがどの様にすればよいのか分かりません。 集客日と営業担当の2つの条件を満たした数の集計となると思うのですが・・・。 よろしくお願い致します。

  • エクセル 関数に関して

    以下内容について、エクセル内でどのような関数を用いれば、上手く表示出来るか 教示願います。 自分なりにインターネットで調べましたが、良く理解できませんでした。 ◆私が行いたい内容 シートAに”チェック蘭”と”顧客名”があります。 シートAの”チェック蘭”にチェックが入った場合、シートBの指定場所に シートAでチェックされた顧客名が表示されるという内容になります。 ※チェックは、1個だけとなります(複数のチェックはありません)。 ※チェックは、レ点以外の数字「1」入力でも問題ありません。    <<シートA>> 番号 チェック蘭  顧客名 1           ●社 2    レ      ○社 3           △社 4           ■社 5           ▲社 6           □社 <<シートB>> 顧客名: ○社 ※シートAでチェックされた顧客名を表記します。 教示の程、宜しくお願いいたします。   

  • エクセルのVLOOKUP関数について

    エクセルのVLOOKUP関数を使用しての集計に関する質問です。 以下の例のような場合の関数が分からず本当に困っております。 どなたかご享受いただけたら幸いです。 よろしくお願いいたします。 毎月サポート費としてお客様ごとに定額が振り替えられ、その集計表を作成しております。 その際振替に使用するプランが2パターンあり、その月どちらのプランになるかは月によってまちまちです。 (同じお客様でも3月はパターン1、4月はパターン2だったりします。) また、振替日は使用するパターンによって異なります。 SHEET1に、 A列 B列 C列 D列 顧客名 金額 振替日 パターン名 という表があり顧客ごとの過去2年分の振替履歴が、1000レコード程並んでいます。 SHEET2でSHEET1の月ごとの集計を出そうと考えております。 表自体は月ごとに分けて作成したいので、表の上部に該当期間をつけます。下記のような感じです。 B2セル C2セル D2セル ○月 開始日 末日 (ex2月) (ex.11/2/1) (ex.11/2/28) A列:顧客名 B列:パターン名 C列:振替日 D列:金額 と並べ、顧客名ごとに、その月のパターン名・振替日・金額を集計したいです。 金額に関しては、SUMIFS関数、振替日に関しては使用パターンさえ出せれば、IF関数で出せると考えています。 パターン名のところでつまづいてしまっています。 行いたいこととしては、SHEET1のA列からD列(顧客名からパターン名まで)の範囲で、顧客名が一致したときに、振替日を抜き取り、振替日がC2(月初日)より大きく、かつD2(月末日)より小さいときのパターン名を表示させたいです。 (1)---------------------------------------------------- =IF(VLOOKUP(A3,sheet1!$A$2:$D$1000,3,FALSE)>$C$2,IF(VLOOKUP(A3,sheet1!$A$2:$D$1000,3,FALSE)<$D$2,(VLOOKUP(A3,sheet1!$A$2:$D$1000,4,FALSE)),"")) といれると、表示されるきちんとパターン名が表示されるセルと空白が返ってきてしまうセルがあります。 空白が返ってきてしまうセルは、双方の顧客名の最後の1文字を消す、スペースを入れる、など何かしら手を加えるときちんと表示されます。 ------------------------------------------------------ その他、VLOOKUP関数、IF関数、ISNA関数などを組み合わせて色々と試してみましたが期間がうまく指定出来ていないようで、当月に振替履歴のない顧客の欄にもパターンが返ってきてしまいます。 下記を教えていただきたいです。 (1)(1)のような状態になる理由と解決法 (2)この場合に使用するのに最適な式 説明が長くなり、またうまく状況を説明できず申し訳ございません。 本当に困っています。ご回答よろしくお願いいたします。

専門家に質問してみよう