[[20060412171203]] 『オートフィルタの選択肢部分を取得』(しまきち) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『オートフィルタの選択肢部分を取得』(しまきち)

 オートフィルタをかけて、その選択肢部分のリストを取得しようとしています。
[[20041116192459]]「オートフィルタのデータをリストボックスに」等は
とても参考になったのですが、絞込み対象列がたくさんあるのと
データの個数(というか種類)が非常にたくさんあるので
列Aを絞ったら、それに対応する列B、C、D…の絞られたリストを
リアルタイムに取得というようなウマイ話があればと思い
ダメ元で投稿しました。
どうかよろしくお願い致します。

 追伸です。
シートをデータベースのテーブルに見立てて
DAOを使用してSQLで取得してみました。
SELECT DISTINCT 列A FROM シート名
で得たレコードセットの1つ1つ(仮に値Aとします)を使用して、さらに
SELECT DISTINCT 列B FROM シート名 WHERE 列A = 値A
というような感じです。
JETでは副問い合わせができないそうなのでこのようにしています。

 この方法でそこそこイケていたのですが
DAOのバージョンとデータ量(に比例するOpenRecordSetの回数)
によってはハングしてしまうので困っています。
データ量が多いと処理時間も非常にかかるのです。
Excelはどうしてあんなに早くリストの切替を行えるんでしょうねえ…。

(しまきち)


 オートフィルタそのものをどのような手法で実行されるかがわかりませんが、
フィルタをかけたシートそのものでチェックしようとすると、全レコードをループする
必要があり、せっかく実行したフィルタの利点が生かされません。
 
エクセル的には「ユニークデータ」を取得するには「フィルタオプションの設定」
があります。(VBAではAdvancedFilterメソッド)
以下、フィルタの機能を当てにして実際に反映させたいデータをシートに作っちゃえ、
という手法です。暫定のデータ置き場として一時シート(1)、(2)を使います。
  
オートフィルタの抽出結果はそのままコピペすれば抽出結果のみが貼り付けられます。
この仕様を利用して、一時シート(1)へフィルタ結果を貼り付け、
一時シート(1)から「フィルタオプションの設定」で一時シート(2)へユニーク
データのみ抽出、という二段構えの抽出なら件数が多い場合は(私の経験上)ループ
より多少はましなスピードになるのでは、と思われます。
(みやほりん)(-_∂)b

みやほりんさん、ありがとうございます。

列Aを絞ったら、それに対応する列B、C、D…という
3、4段構えの抽出になるので、
ピボットテーブルを使用して試行錯誤していたところです。
これはこれでいろいろ問題があって…
(これについては別スレッドで質問させていただくかもです)

教えていただいたフィルタオプションで3段構えのサンプルPGを作ってみて、
ピボットとスピードを比較してみようと思います。

ありがとうございました!

(しまきち)


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.