• 締切済み

vba 複数条件の集計について

お世話になります、vbaについての質問です。 複数条件の個数を求めるプログラムについてなのですが、 条件が5項目以上、300通り以上あります。 DCOUNTAを使うのも別表を作るのに一苦労です。 なるべく簡易に作成出来る方法はないでしょうか。 ヒントだけでも結構です。 よろしくお願いします。

みんなの回答

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 #2 の回答者です。 >処理速度を考えるとテーブルを作成してSQLを書くのが一番早いのですがVBAでなんとか出来ないかなと思い質問を立ててみました。 データベース直接なら、それもアリですが、それが、Excel内ですと、そうはうまくいかないような気がするのです。ADOにしても、データベースソフト以外ですと、ADOのインスタンスの生成の手間が掛かるのです。一度、呼び出して、そのまま、回して使うというのもあるかもしれませんが、私は、やったことがありません。そういう必要性に迫られた経験がないからですが。 >A列に条件1,2,3,4,5・・・が入っていてそれがE列まで別条件が続いている様な感じでしょうか。 条件が作られているなら、それは、なんとかなります。私は、条件を作れと考えていたので、ちょっと、しり込みしてしまいました。 余談になるのですが、DCOUNTAなどのデータベース関数の生まれた訳があるのですね。Microsoft 社が考えたのか、IBMブレーンが考えたのかは分かりませんが、もとは、LOOKUP関数(現在のVLOOK関数)などの検索系の関数が異様に遅いために、作られたものなのです。他の関数とは構造的かなり違ったもので、フィルタ・オプション(AdvanceFilter)と似ています。こちらも、データベース関数と同時期に生まれたものです。 そういうことでしたら、DCOUNT を取り入れてやってみてもよいですね。 データ量によっては配列数式を取り入れたマクロもよいのですが、Excelのバージョンの問題とか、配列数式の暗黙の限界とか、自分で作るならともかく、人にはお勧めできないのです。 結果の出力の場所、条件の組み立て式、それらの設定して、マクロを走らせれば、あっというまに終わります。(...コードを作る手間を除いて) 簡単なレイアウトを載せてくだされば、サンプルを書いてみます。

kaiu
質問者

お礼

再度の回答ありがとうございます。 >余談になるのですが、DCOUNTAなどのデータベース関数の生まれた訳があるのですね 大変勉強になりました。 本日上記関数を使っていくつかモジュールを書いてみましたが 処理速度もSQLを利用したものとそれほど大差無い様な気がしました。 しかしデータの個数の入っていない不要行の削除や 作成フォーマットシートへの成型などほかの手間もありまして、 ADOを利用することにしました。 http://support.microsoft.com/default.aspx?scid=kb;ja;257819 エクセルでもデータベースソフト不要でSQLが発行出来ます。 ご丁寧にありがとうございました。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 >条件が5項目以上、300通り以上あります。 DCOUNTAというのは、確かに、ワークシートの数式の中では良い方法だと思いますが、その組み合わせをどう作るかという問題に直面してしまいます。現実に、VBAだとしても、楽だとは思えません。 ただ、VBAの場合は、かなり内容的に具体化させないと解答のヒントすら結びつきません。それに、DCOUNT という数式を作るVBAでは、あまり楽になったとは思えません。配列数式でという方法は、回数としては、1回ですから、その組み合わせパターンを繰り返すというのは、いずれにしても、VBAには違いないように思います。 実際のデータをどのような集計をしなければならないのか、具体的なものをお出しください。 一応、私の今までの記憶の中では、残念ながら、この種の質問は、あまり良い解決には至っていないように思います。理由は、その組み合わせを作る時点でネックになっているからです。

kaiu
質問者

お礼

ありがとうございます。 おっしゃることそのとおりだと思います。 条件のデータ項目を作るとするとたとえばA列に条件1,2,3,4,5・・・が入っていてそれがE列まで別条件が続いている様な感じでしょうか。 DCOUNTAで別表を作るととてもしんどいです。 もともとのデータベースシートの列に同項目があり件数は何十万件位でです。※シートは分かれてますが 処理速度を考えるとテーブルを作成してSQLを書くのが一番早いのですがVBAでなんとか出来ないかなと思い質問を立ててみました。 今のところADOでJETを利用するのが限界かなと思ってます。

  • deecyan
  • ベストアンサー率38% (89/233)
回答No.1

配列数式 でここのサイトを検索してみれば できると思う

kaiu
質問者

お礼

配列数式、合計だけではなく 個数を求めるのにも使えるのでしょうか。 調べてみます。 ありがとうございます。

関連するQ&A