質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

4回答

316閲覧

種類別に等分するマクロ

kai-haken

総合スコア10

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

1クリップ

投稿2019/01/17 11:51

編集2022/01/12 10:55

Excel2000を使用しています。

顧客データ(A列に名前、B列に購入した商品)があり、それを元に純粋な購入人数(のべ人数では無いという意味です)を出したいです。売れた商品の数も出すため、重複しているものを削除するという手法は使えません。
前任から引継いだ手動での方法は

  1. C列全てに購入者として1を入力
  2. 集計機能で名前を元に数量を合計
  3. 集計の結果、小計が1以上になった名前を数量で割り入力(同じ名前が2つあった場合、数量を0.5ずつにする)

4.ピボットを組み商品ごとのリストを作成する

というものです。

今回お助け頂きたいのは上記の2.3.をマクロにしたい時のVBAをどのように書いたらいいかということです。

どうぞよろしくお願いします。

補足説明
イメージ説明

tatsu99様
補足要求ありがとうございます。
レイアウトはご提示いただいたもので合っています。
集計結果ですが名前を基準に同一のシートで行っております。

画像下部の編集後にある、「安倍晋三」はマンガと花札を購入しているため
単純合計では2人という扱いになりますがC列の購入者をそれぞれ0.5ずつにすることによって1人と計算出来る。
というものです。

商品数は10程度で
顧客データは最大で700程度です

丸投げというご指摘も頂きましたが当方の力不足のため、どんな手法がいいのか皆目見当もつかずこちらにご相談させて頂きましたが場違いな質問でしたら申し訳ございません。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

まず、「割って足せば1になる」のは割り切れる場合だけであり、1人が3商品購入していた場合は0.333…となるので足しても0.999…で1にはなりませんが、ここは大丈夫ですよね?

最終的な目的(この数値を何に使うのか)が
>商品ごとのリストを作成する
といった具合で、求めた数値をどのように利用するのかはっきり記載されていない(リスト上に人数1を出力したい?)ので大丈夫なものとして話を進めるしかないのですが、念のため確認です。

もし割り切れないものも1にしたいのなら、最終データを0.334にするような調整とか、みなし(切り上げ)で処理する、といった考慮が必要です。


本題ですが、
>前任から引継いだ手動での方法
の1~3の手順は、集計を使わずともシート関数で実現できます。

例えばC2セルに=1/COUNTIF(A$2:A$9999,A2)という式を記述して、対象データ範囲のC列にオートフィルしてみてください。
これで(集計していないので小計行はでませんが)、購入者毎に購入回数で割った値がC列に入ったと思います。

VBAで行いたい場合も考え方は同じで、「対象データの中に同じ名前が出現する回数」で割ってあげれば
>上記の2.3.をマクロにしたい
の部分は解決できると思います。

参考になれば幸いです。

投稿2019/01/21 07:14

編集2019/01/21 08:00
jawa

総合スコア3013

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

補足拝見しました。
どうもよくわかりません。
本当にほしい結果が、「購入者の数と購入した商品」であれば、
あなたの提示例であれば、添付図の上側(赤線だ囲んだ結果)が得られれば、良いと思うのですが
いかがでしょうか。
マクロでなら上記の処理は簡単にできます。(案1)

もし、どうしてもピボットテーブルで集計した結果がほしいというのであれば、
元データの購入者(C列)をマクロで、自動設定することは可能です。
1を購入者が出現した回数で割った結果をC列に設定します。(添付図の青線で囲んだところ参照)
そして、それをピボット集計することになります。
ピボット集計はあなたが行います。マクロでは行いません。(案2)

案1又は案2の何れかであれば、マクロの提供は可能です。
イメージ説明

投稿2019/01/19 00:38

tatsu99

総合スコア5424

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ピボットテーブルでできますよね?これ。

投稿2019/01/19 00:24

kai_keitai

総合スコア344

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

補足要求です。
レイアウトサンプル
顧客データのシート名は何でしょうか。
又、レイアウトは添付図の上側であってますか。又、1行目は見出しですか。

集計結果のレイアウトは、添付図の下側で良いですか?
又、シート名は何でしょうか。
又、添付図の元データを集計した結果は、この結果が望まれる結果ですか?
えんぴつは同じ人が購入しているので購入者数は2、購入数は3となる。
マンガは1名が購入なので、購入者数は1、購入数は1となる。
花札は2名が購入なので、購入者数は2、購入数は2となる。

顧客データの件数(顧客データの行数)及び商品数はおよそどのくらいでしょうか。
また、今後、増えるなら、最大でどのくらいになりますか。

投稿2019/01/17 14:35

編集2019/01/18 01:32
tatsu99

総合スコア5424

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問