人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Excel 2000 VBAでデータベースからテーブルを読み込んだシート(1行目にカラムの見出し付き,列数行数不定)において、
[1.]VBAだけによる完全制御でオートフィルタを使い、複数の条件をつけてレコードの抽出を行い、抽出されたレコードの件数を取得したいです。
(これを何度も条件を変えて繰り返します。オプションとして作業用シートに一時的に抽出データを出せるオプションがあるといいです)
(また、できればですが、特定列への値の条件の付け方について、対象列の列番指定を決め打ちするのではなく、WorksheetFunction.Match()関数で列名から列番を検出することが可能ならばそうしたいです)
[2.]また、データベースの表を読み込んだ、「列数,行数不定」のシートの内容をテキストファイルに出力したり、逆に読み込んだりしたいです。

プログラミングの知識やデータベース/SQL中心にVBAの経験はあるのですが、SQLで直接叩く他にエラーチェック用に一度レコード一覧をワークシートに落として使う選択肢を持たないといけないので、他の方のプログラミングも見せて頂きたいです。よろしくお願いいたします。1000ptで特に参考になった回答の方には更にポイント送信をさせて頂きます。

●質問者: じゃっくそにっく
●カテゴリ:コンピュータ
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● きゃづみぃ
●334ポイント

オートフィルタで表示された件数のカウントです。

Sub 表示件数カウント()
  '表示されている行数をカウント。見出しを除く場合は ?1する。
 d = 0
 For Each c In AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible)
 
 d = d + 1
 Next c
End Sub
◎質問者からの返答

ありがとうございます。

オートフィルタは条件3つだけということは間違いだったとのことですが、

ANDとORを組み合わせてパラメータには変数を使う条件でカウントしたりするのにはあまり向いていないでしょうか?

普通にプログラムして行ループでレコードのフィールド値を条件にかけて

カウントすることも考えています。

(同時にデータエラーの検査を含めたり)

また、表を展開したシートのテキスト入出力ですが、

通常のInput Outputか、あるいはFileSystemObjectを使い、

カテゴリ名や日付情報などで識別し、いちいちダイアログなど出さないIOも、

普通にプログラムすれば済む問題かもしれませんね。


2 ● Mook
●333ポイント ベストアンサー

一度却下になった案ですが、アイデアということでの提言です。


SQL はお使いになれるようなので、やはりDBから読込んだデータの保存先をCSV で

はなく MDB へ書き込んではどうでしょうか。

MDB は Access がないと使えないと思われる方も多いですが、ADO やDAO を使用すれば、

実は Office すらなくても使用することができます。

http://www.f3.dion.ne.jp/~element/msaccess/AcTipsGnrHowToUseJetWithoutMSAccess.html

http://www.nobotan.net/cgi-bin/sfs6_diary/sfs6_diary.cgi?action=cat&cat=5


下の方に、EXCEL で条件を記述し SQL で抽出する例が出ていますが、MDB と ADO

を使用するメリットは、コメントにも書きましたが SQL でデータの操作ができる

点です。


もし CSV への書き出しにこだわるようでしたら、コマンドベースのツールになりますが、

MicroSoftが無償提供しているLogParser をお勧めします。

これも便利なツールで、コマンドを使用して SQL で CSV からデータ抽出を行うことができます。

http://technet.microsoft.com/ja-jp/scriptcenter/dd919274

http://technet.microsoft.com/ja-jp/scriptcenter/ff191270.aspx

今回は使わないかもしれませんが、出力としてテキストだけでなくグラフ出力が

出来たりと、優れものです。


EXCEL の機能を使って解析もできますが、VBA の Shell でコマンドを呼び出すと短いコードで

処理をすることができますので、これも検討されてはどうでしょうか。


いずれにせよ DB からのデータ抽出ですから、自分で一からツールを作るのではなく、うまく

SQLへのラッピングをする工夫をした方が、汎用性があるように思います。

◎質問者からの返答

ありがとうございます。

JETなどのある程度のライブラリが入ってれば

ExcelVBAからもmdb使えるんですね。


3 ● ニコ
●333ポイント

Excel使うより、これを使ったほうがずっと使いやすいとおもうのですが?

楽しいので一度試してみればいかがでしょう?

http://www.filemaker.co.jp/

◎質問者からの返答

ありがとうございます。

別件での個人趣味的にはいいのですが、

今回のは既存の環境に依存していて

動作環境を変えることは不可能なので

そこだけはご理解下さい。

関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ