[1.]VBAだけによる完全制御でオートフィルタを使い、複数の条件をつけてレコードの抽出を行い、抽出されたレコードの件数を取得したいです。
(これを何度も条件を変えて繰り返します。オプションとして作業用シートに一時的に抽出データを出せるオプションがあるといいです)
(また、できればですが、特定列への値の条件の付け方について、対象列の列番指定を決め打ちするのではなく、WorksheetFunction.Match()関数で列名から列番を検出することが可能ならばそうしたいです)
[2.]また、データベースの表を読み込んだ、「列数,行数不定」のシートの内容をテキストファイルに出力したり、逆に読み込んだりしたいです。
プログラミングの知識やデータベース/SQL中心にVBAの経験はあるのですが、SQLで直接叩く他にエラーチェック用に一度レコード一覧をワークシートに落として使う選択肢を持たないといけないので、他の方のプログラミングも見せて頂きたいです。よろしくお願いいたします。1000ptで特に参考になった回答の方には更にポイント送信をさせて頂きます。
一度却下になった案ですが、アイデアということでの提言です。
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へのラッピングをする工夫をした方が、汎用性があるように思います。
オートフィルタで表示された件数のカウントです。
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も、
普通にプログラムすれば済む問題かもしれませんね。
一度却下になった案ですが、アイデアということでの提言です。
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使えるんですね。
ありがとうございます。
別件での個人趣味的にはいいのですが、
今回のは既存の環境に依存していて
動作環境を変えることは不可能なので
そこだけはご理解下さい。
ありがとうございます。
JETなどのある程度のライブラリが入ってれば
ExcelVBAからもmdb使えるんですね。