エクセルVBAで顧客データを集計する方法とは?

このQ&Aのポイント
  • エクセルVBAを使用して顧客データを集計する方法について、初心者向けに解説します。
  • 顧客データのリストから未納者一覧を作成するためのエクセルVBAの詳細な手順をご紹介します。
  • 現在の顧客データは150名ほど入力されており、商品の種類は23種類です。
回答を見る
  • ベストアンサー

条件にあうデータ抽出のやりかたについて

エクセルVBAの初心者です。現在エクセルを使って次のような顧客リストを作っています。  ID 氏名 商品A 入金 商品B 入金  1  AA 55円  済  65円  未   2  BB 66円  未  85円  未  3  CC 41円  未  32円  済 このようなリストからVBAを使って、次のような集計表を自動作成したいと試行錯誤しています。  未納者一覧  ID 氏名 商品名 単価 入金状況   1 AA 商品B 65円 未   2 BB 商品A 66円 未        商品B 85円 未   3 CC 商品A 41円 未 自分なりに入門書を片手にいろいろと試しては見たのですが、なかなかうまく行きません。どなたかご指導願えないでしょうか。 なお、現在の顧客データは150名ほど入力しています。 商品の種類は23種類です。  

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

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

(例データ) 氏名 商品A 入金 商品B 入金 商品C 入金 中井 55円 済 65円 未 高井 66円 未 85円 未 上井 41円 未 32円 済 33円 未 高井 16円 未 21円 未 大川 9円 未 74円 済 75円 未 高井 34円 未 127円 未 杉井 35円 済 128円 未 (VBA) Sub test01() Dim sh1 As Worksheet Dim sh2 As Worksheet '----A Set sh1 = Worksheets("Sheet1") Set sh2 = Worksheets("Sheet2") '-----B d = sh1.Range("A2").CurrentRegion.Rows.Count ' MsgBox d k = 1 For i = 2 To d For j = 3 To 20 Step 2 If sh1.Cells(i, j) = "未" Then sh2.Cells(k, "A") = sh1.Cells(i, "A") sh2.Cells(k, "B") = sh1.Cells(1, j - 1) sh2.Cells(k, "C") = sh1.Cells(i, j - 1) sh2.Cells(k, "D") = sh1.Cells(i, j) k = k + 1 End If Next j Next i '------- sh2.Range(Cells(1, 1), Cells(k - 1, 4)).Select Selection.Sort Key1:=sh2.Range("A1"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin End Sub (結果) 高井 商品A 66円 未 高井 商品B 85円 未 高井 商品A 16円 未 高井 商品B 21円 未 高井 商品A 34円 未 高井 商品B 127円 未 上井 商品A 41円 未 上井 商品C 33円 未 杉井 商品B 128円 未 大川 商品A 9円 未 大川 商品C 75円 未 中井 商品B 65円 未 ソート後名前が前行と同じとき空白は、判るだろうと手抜き。 ・For j = 3 To 20 Step 2は3,5,7,・・19の9列を Maxに考えてますが適当に修正を。 ・d = sh1.Range("A2").・・やFor i = 2 To d は実際に合わせて適当に。

tomosato
質問者

お礼

丁寧なサンプルまでつけていただき感謝します。 おかげさまで何とか解決できそうです。本当にありがとうございました。

関連するQ&A

  • エクセルでのデータ抽出について

    こんにちは!関数初心者です・・・。 どうしてもできなくて教えていただきたいのですが、たくさんのデータの中から一致するデータを表示したいのです。 下記のようなデータがあったとき、検索する文字列を入れるセルをA1とします。検索結果をB1に表示したいのです。 たとえば品目にある「鉛筆」の商品ID「AA-001」を探したいとき、セルA1に「鉛筆」と入力したら、セルB1に「AA-001」と表示したいのですが、どうしてもうまくいきません。 商品ID 業者NO 科目 品目 単価 AA-001 スズキ100 文具 鉛筆 100 AA-002 スズキ200 文具 ノート 200 BB-001 タナカ100 食品 卵 100 BB-002 タナカ200 食品 チーズ 200 CC-001 サトウ100 衣類 シャツ 100 CC-002 サトウ200 衣類 スーツ 200 どなたかおわかりになりましたら教えてください!! よろしくお願いいたします!

  • 条件に一致したデータ数について

    該当する商品の合計数を所得したいのですが検出方法が分かりませんので教えて下さい。 商品マスタ(A)と売上げデータ(B)に下記のデータがあります。AとBの関係は、1:nになります。 Bの商品とAの商品が一致した場合にAの商品が売れたと判断します。 最終的にAの一致した商品数を取得したいのですが、Bの検出数が反映されてしまい正常に一致した件数を取得できません。いろいろ試みましたけどダメでした。どなたか、ご享受下さい。 ---------------- 商品マスタ(A) ---------------- AA BB CC DD EE FF ---------------- 売上げデータ(B) ---------------- AA 06/9/10 BB 06/9/10 BB 06/9/11 DD 06/9/12 AA 06/9/14 BB 06/9/14 AA 06/9/15 AA 06/9/16 BB 06/9/17 BB 06/9/17 BB 06/9/18 ---------------- 結果 ---------------- 3 ※--- 補 足 --- Bを商品毎にグループ化してカウントすると、 AA = 4件 BB = 6件 CC = 0件 DD = 1件 EE = 0件 FF = 0件 になります。売上げ件数が、0件以上の商品は、AA、BB、DDの3商品になります。この3の値を取得したい訳です。

  • エクセルの条件検索

    行の先頭の値を返すには エクセル関数をどのようにつかったらよいのでしょうか? たとえば CC1を検索すると Bが表示されるようにしたいのですが A AA1 AA2 AA3 AA4 B BB1 BB2 CC1 D BB4 AA5 この表には同じ値は絶対ありません。 VLOOKUPなど LOOKUPを主に検索をしてみたのですが、わかりませんでした よろしくおねがいいたします。

  • 2つの条件をデータテーブルに照らし合わせデータを抽出する

    2つの条件をデータテーブルに照らし合わせデータを抽出する 品番  顧客ID  価格 35894  312    A 35894  635    B 35895  215    C 別のシートに下記の価格表があります。 品番   312    215     635 35894  12,000  13,000   14,000 35895  5,000   6,000     7,000 価格欄のA, B, Cに入力すべき数式はどうなるでしょうか。 A=12,000 B=14,000 C=6,000 と表示されるのが求めている結果です。 どなたか教えて下さい。 IFとINDEXとMATCHを使って6つの顧客IDまでなら実現できましたが 顧客数は約50ありますので行き詰まりました。 ソフトウェアはエクセルで、Office 2000 SR-1 Professional版の ものを使用しています。 アドバイスをどうぞ宜しくお願いします。

  • access2010  同一idを列に追加

    access2010についてselectの方法を教えてください。 ↓元テーブル id | name 1 | a 1 | b 2 | aa 2 | bb 2 | cc 取得したい内容 id| name1| name2| | name3 1| a | b| 2| aa | bb | cc アクセスとエクセルのマクロを駆使していますが、うまくできません。

  • データの無いテーブルと結合してデータ抽出

    以下のテーブルを使用してデータを抽出したいのですが、データが抽出できません。 名称テーブル -------------------- ID | NAME | -------------------- 0   AA 1   BB 2   EE 3   FF 履歴テーブル -------------------- ID | DAY | OLDNAME -------------------- 2   2004   CC 3   2004   DD 結果取得したいデータ -------------------- ID | NAME | OLDNAME -------------------- 0   AA =現在のSQL= SELECT A.ID, A.NAME, B.OLDNAME FROM 名称 A , 履歴 B WHERE A.ID = B.ID(+) AND A.ID=0 AND B.DAY =  (SELECT MAX(C.DAY)  FROM 履歴 C  WHERE  A.ID = C.ID(+)) 履歴テーブルには名称テーブルの履歴があります。 履歴にデータが無くても名称データを取得したいのですが、こういった場合はどのようなSQLを作ればいいのでしょうか。

  • 最後のデータを含むレコード1行 MYSQL

    お世話になります。 最後の日にちを含むレコード全ての抽出方法がどうしてもわかりません。 id name date amount 1 AA 3/1 5 2 BB 3/1 5 3 CC 3/1 5 4 AA 3/2 7 5 BB 3/2 4 6 AA 3/3 1 これを、select * from テーブル group by name とすると、 id name date amount 1 AA 3/1 5 2 BB 3/1 5 3 CC 3/1 5 select id, name, max(date),amount from テーブル group by name とすると、 id name date amount 1 AA 3/3 5 2 BB 3/2 5 3 CC 3/1 5 望んでいる結果はこうです。最後のdateを含むレコード全てです。 id name date amount 3 CC 3/1 5 5 BB 3/2 4 6 AA 3/3 1 select * from テーブル as a where a.date=(select max(b.date) From テーブル as b where a.id=b.id); このようにしましたが、データの数が膨大なのですごく時間がかかってしまいます。 他、シンプルな方法はないでしょうか。 よろしくお願いします。 MYSQL バージョン5.0.45

  • エクセル2003のVBAを教えて

    エクセル2003のVBAを教えてください。 次の対象データで、(1)(2)(3)の作業が出来るエクセルVBAを教えて下さい。 (1)(2)(3)個々のVBAでお願いします。 ●対象データ:種類(A列)、文字(B列)、    データの行数:不特定なので、データのある最終行までとします。 ●教えていただきたい項目  (1):種類だけを(C列)に取り出す。  (2):種類の先頭に空白の行を3行入れて、追加の2行目の種類(A列)に文字(B列)を入れる。  (3):種類が5行以上あるときは、5行ごとに空白行を追加する。 ●対象データ 種類(A列)   文字(B列) AA       あああ BB       いいい BB       いい BB       いいい CC       うう CC       うう DD       ええええ DD       ええええ DD       ええええ DD       ええええ DD       ええええ DD       ええええ DD       ええええ ●(1)のVBAの結果(このようになるVBAを教えてください。) (C列) AA BB CC DD ●(2)、(3)のVBAの結果(このようになるVBAを教えてください。) 種類(A列)    文字(B列) あああ AA        あああ いいい BB        いいい BB        いいい BB        いいい うう CC        うう CC        うう ええええ DD        ええええ DD        ええええ DD        ええええ DD        ええええ DD        ええええ DD        ええええ DD        ええええ

  • 2つの条件をデータテーブルに照らし合わせデータを抽出する

    2つの条件をデータテーブルに照らし合わせデータを抽出する 品番  顧客ID  価格 35894  312    A 35894  635    B 35895  215    C 別のシートに下記の価格表があります。 品番   312    215     635 35894  12,000  13,000   14,000 35895  5,000   6,000     7,000 価格欄のA, B, Cに入力すべき数式はどうなるでしょうか。 A=12,000 B=14,000 C=6,000 と表示されるのが求めている結果です。 どなたか教えて下さい。 IFとINDEXとMATCHを使って6つの顧客IDまでなら実現できましたが 顧客数は約50ありますので行き詰まりました。

  • Excel2003で他の列のデータをドロップダウンリストに

    質問のし直しです。 下記の場合、B列でのドロップダウンリストに(aa bb cc dd ee)と表示させるには、どうしたら良いのでしょうか? A列  B列 bb     dd aa     ee bb     ee cc    dd aa bb 実際には文字列なのですが、1300行で、A列のデータは300個位在ります。 宜しくお願い致します。