Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 7 Professional : Excel 2013)
オートフィルターを掛けた時の検索項目を抽出
投稿日時: 20/03/11 21:16:29
投稿者: スケソウダラ

いつもお世話になっております。
 
どなたかご教授願います。
 
C列に客先名があります。
D〜F列には客先に売った商品、金額、納期等が書かれています。
C列の客先名は月によってA社が多かったり、B社が多かったりします。
 
順々にオートフィルターを掛け、販売件数、合計金額を集計したいと思います。
 
マクロにてオートフィルターの検索項目を順々に選択したく思います。
オートフィルターの検索項目を順々に選択するコードを教えて下さい。
 
以上、よろしくお願いいたします。
 

回答
投稿日時: 20/03/11 23:40:56
投稿者: simple

オートフィルターと手段を決められていますが、
集計だけであれば、ピボットテーブルが便利だと思いますが、いかがですか?
 
検索項目の一覧を取得したいということは、
重複を除いた一覧を作ると言うことですか?
それなら、「重複の排除」機能が使えませんか?
 
また、特定の列の話なのか、複数の列の話なのか、
整理されたほうがコメントが付きやすいでしょう。

回答
投稿日時: 20/03/12 10:27:28
投稿者: WinArrow
投稿者のウェブサイトに移動

 
 
 
>順々にオートフィルターを掛け、販売件数、合計金額を集計したいと思います。
  
私も、simpleさんと同じように考えます。
 説明の中では、「客先」だけが取り上げて説明していますが、
いわゆる分析は、「客先」にも業態とか、商品とか商品のグループとか
集計するアイテムは、たくさん出てくると思います。
 出てくる都度対応することにはなると思いますが、
オートフィルタだけに頼っていると、後追いのしごとになってしまいます。
どうせVBAで対応するならば、
 基本的なところから考え直して方がよいと思います。
  
私案としては、集計キーとなるような項目を列挙(メニュー化)しておいて、
そのメニューで選択した項目のAND条件で集計する。
という提案です。
 
 

回答
投稿日時: 20/03/12 14:48:14
投稿者: mattuwan44

>オートフィルターの検索項目を順々に選択するコードを教えて下さい。
 
この要望は掲示板で時々出てきますが、
オートフィルターをVBAで扱うとき、素直に項目を取得できるように、
オートフィルター内の情報が公開されていると便利なのですが、
ユーザーが取得することはできないのです。
 
なので、こういう場合は、
一旦、列をどこかにコピペして重複の排除の機能で、
ユニークなキーを作る等の作業が必要になります。
 
なので、ピボットテーブルの機能で、
レポートフィルターに客先名を指定して、
抽出したら便利かとは思いますが、
個人的に出来るだろうなぁとは思いつつも実務で実際にやったことないので、
断言はできません。
 
>順々にオートフィルターを掛け、販売件数、合計金額を集計したいと思います。
んー。集計機能(小計でしたっけ?)の機能で行けそうな気がしますが、
その場合は、並び替えが必要ですが、並び替えとか出来ないんでしょうか?
マクロを作るなら、いろいろな手順を踏んでも自動でやってくれるので、
手順が多少複雑でもどうにでもなると言えばなるんですが。。。
 
あれ、やりたいことは、
客先別の合計の一覧を作りたいってことですかね?
そうならば、ピボットテーブルで出来そうですね。

回答
投稿日時: 20/03/12 16:28:45
投稿者: simple

引用:
マクロにてオートフィルターの検索項目を順々に選択したく思います。
オートフィルターの検索項目を順々に選択するコードを教えて下さい。

すでに指摘いただいているように、
A列の選択に応じて、B列の選択肢が変わりますし、
B列の選択に応じて、さらにC列の選択肢が変わります。
こうした状況依存の選択肢をその都度返すプロパティはありません。
 
これを実行しようとすると、そのつど選択肢を算定する必要があります。
仮にこれができたとして(できるでしょうが)、
順々に選択していくコードは、結局のところ、
手動でオートフィルタを掛ける動作と何ら変わりがないじゃないですか?
 
数値の集計であれば、MS社がそのために用意しているピボットテーブルなどの道具を
有効活用することを考えた方が得策だと思います。

投稿日時: 20/03/12 22:22:22
投稿者: スケソウダラ

simple様
WinArrow様
mattuwan44様
 
ご回答ありがとうございます。
ピポットテーブルを使った方がよさそうですね。
当方、ピポットテーブルを使ったことがないので
発想がVBAに偏ってしまいました。
 
ピッポとテーブルを勉強します。
基本的なところから見直してたいと思います。
 
ありがとうございました。