プロが教える店舗&オフィスのセキュリティ対策術

   A列  B列  C列  D列 E列 F列・・O列  
1行 月度 店名 店員名 項目 数量 個数 合計
2行  1  東京 A子  初回  10  12  20
3行  1  東京 A子  5回目  20  40  21
4行  3  東京 A子  5回目  30  28  10
5行  4  東京 A子  初回  32  89  11
6行  1  大阪 C男  初回  11  13  12
7行  2  大阪 C男  5回目  77  22  211
8行  3  大阪 D子  初回  33  31  53
9行  1  京都 E子  最終  44  22  23
10行  2  京都 T男  初回  22  54  23

Sheet1(データベース)に上記のようにデータが約3000行あります。
「1月の東京店、A子の初回の合計は?」といった通常オートフィルタで抽出する作業をSheet2のシートで「絞込みしながら検索」するようにフォーム上でしたいのですが。
まず、リストボックス1で1月を選択すると、その抽出結果のみからリストボックス2で店名を選択。店名東京を選択すると同様にその抽出結果のみから店員名をリストボックス3で選択。同様にリストボックス4で項目「初回」を選択すると合計が表示されると言った具合にしたく思います。
参考までにリストボックスからの選択としていますが、よりベストな方法をご教授願います。
Accessで簡単に解決することと百も承知ですが・・・
ようは絞込みしながら検索していく手法を教えてください。

A 回答 (3件)

質問内容を具体化してみましたがかなり大変な作業です。

まず、質問に対する疑問から、
1.リストボックスは表示→フォームのリストボックス?またはコントロールツールボックスのリストボックス?
2.『フォーム上でしたい』はユーザーフォームを使ってもいい?それともリストボックスのこと?
3.初期状態はどのような想定?全項目無選択?
4.リストボックスのリスト内容はソートする?
4.あるリストボックスを選択したら、他のリストボックスは当然連動して内容を変える?
5.最後に1件まで絞り込んだら2回目の絞込みは行う?

やってみたことは、手順だけ上げると、(上記疑問は作り易い方にしました)
1.ユーザーフォームにコンボボックスを4つ配置
2.ユーザーフォームを開いたら初期設定で各コンボボックスにソートしたリストをセット
3.任意のコンボボックスで項目を選択したらオートフィルタ結果を表示してシート2にコピー
4.同時にコンボボックスのリスト内容を更新
5.1件になって再度絞り込みを行うために初期化ボタンを配置
概略、この位で実現できると思います。コントロール配列とかも使えないのでコードはかなり長いです。(書ききれません)
労多くして・・・の気がしますね。Accessでもゴタゴタするかもしれません。

>よりベストな方法をご教授願います
多分、リストボックスを作ることはExcelのオートフィルタ機能を、他の道具を使って実現するだけの話で得策でないような気がします。
余り回答らしくなっていないので、思いついた方法を挙げておきます。
シート1しか使いませんが、まずデータ→フィルタ→オートフィルタを実行しておきます。
A.メニューのウインドウから『新しいウインドウを開く』を選択します。
B.メニューのウインドウから整列→上下に並べて表示を選択
C.下のウインドウだけを200%~250%位に大きくします。
D.下のウインドウでツール→オプションで表示タグで
    行番号、
    シート見出し、
    水平スクロールバー、
    垂直スクロールバーのチェックをはずします。
E.A~D列と2行目までを表示するように下のウインドウの大きさを変えます。
  コンボボックスを4つ並べたように見える?
F.上のウインドウは大きくします。
G.下にあったウインドウを好きな位置に配置します。絞り込みはこのウインドウから行います。

不満足かもしれませんが、代替案です。ご参考に。(Excel2000です)

この回答への補足

非常にわかりやすいご回答ありがとうございます。
代替案まで立案いただき本当にありがとうございます。
今回質問したのは誰もがマウス操作だけで処理が出来るようにと思ったからです。

ユーザーフォーム上にコンボボックスを4つ用意し
初期状態は全項目無選択、リストボックス1よりA列「月数」を選択後、
その抽出結果からリストボックス2でB列「店名」を選択、この要領でリストボックス3、4でC列で検索→D列で検索。(この4つの絞込み検索で1行のみとなります)そしてコマンドボタンを押すとその結果をテキストボックス1.2.3等にE,F,G列の内容を表示させたく思います。
欲を言えば1~4まで全項目を選択していないとコマンドボタンを押しても「入力ミスです!」等のダイアログボックスが出れば大満足です。
「AdvancedFilter」というものでやってみてはと助言いただきましたが、意味がわかりません。
Sheet2上で云々というのは無視してもらって結構です。
オートフィルタ機能を手作業ですることと同作業という事は十分わかっています。
大変お手数ですがご教授願います。

補足日時:2001/10/24 22:01
    • good
    • 0

再び こんにちは!


>なぜならリストボックス1~4での絞込み検索する
>事で1行のみの抽出となります。

解が必ず1つなら
DGET関数が使えますが・・・オートフィルタのように
その都度、絞込み複数表示するものではないのでご希望と
違いかもしてませんね!

    A列  B列  C列  D列 E列・・O列
1行 月度  店名  店員名 項目 式・・・合計
2行 リスト リスト リスト リスト 式・・・ 式

E列以降の各式
=IF(COUNTA($A$1:$D$1)<4,"",DGET(表1,E$1,$A$1:$D$2)
これをO列まで複写
データベースのフィールド名(項目)は、全て違うものであることが前提です。
(複数の戻り値があったり、1つもない時はエラーとなり
 ますから、必要によりエラー回避の数式を組み合わせる
 必要があります。)

オートフィルタのようなリアルタイム表示にするには
フィルターオプション機能をVBAで制御することになると思います。
その時は、他の方の書き込みをお待ちください!
    • good
    • 0

こんばんは!



各条件による合計の計を求めればよろしいのでしょうか?

・項目も含めた範囲に名前を定義(仮に表1)
・シート2
   A列  B列  C列  D列  O列  
1行 月度  店名  店員名 項目  合計
2行 リスト リスト リスト リスト 式

式 =DSUM(表1,$O$1,A1:D2)

意図したものと外していたらスミマセン

この回答への補足

早速の回答ありがとうございます。
合計の意は単に値表示するだけで検索して計算した結果ではありません。
なぜならリストボックス1~4での絞込み検索する事で1行のみの抽出となります。理解に苦しむ文面で大変申し訳ありません。

補足日時:2001/10/21 23:09
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!