- 締切済み
Excel VBA から外部プログラムを実行し結果を利用するには?
Excel VBA から外部プログラム(例えば、Perl)を実行し、 その実行結果をVBAプログラム中で利用する方法を教えて ください。 より具体的にやりたいことを書きますと、 Perlでインターネット上の情報(数字)を取ってきて、 その情報をVBAで利用したいのですが。。。 よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- hana-hana3
- ベストアンサー率31% (4940/15541)
>より具体的にやりたいことを書きますと、 html(webページ)から抜き取るのかxmlから抜き取るのか不明確。 xmlならライブラリがあるので簡単に情報取得出来ます。 http://mitc.xrea.jp/diary/072 http://www.google.co.jp/search?hl=ja&q=vba+%EF%BD%98%EF%BD%8D%EF%BD%8C%E3%80%80%E5%8F%96%E5%BE%97&lr=lang_ja
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 VBAの中で組むと、Perl での出力を待たせて、ロスが生じてしまうような気がします。Perl を使うなら、たぶん、それは逆でしょうね。VBA --> Perl ではなく、Perl --> Excel VBA(オートメーション・オブジェクト)というスタイルにするか、最初から最後まで、Perl で行ってしまったほうが良いと思います。 Office TANAKA の Open "D:\Test.txt" For Input As #n の手法が悪いわけではないのですが、それは、スタティスティックなデータが主な対象になります。 >shellという関数で、perlのプログラムを実行し、 もちろん、そのタイミングを、API等で取るか、タイムラグを、API関数等で待たせられば、VBAでも組めますが、あえて、テキスト出力する意味があるのか、私には分かりません。直に、文字列型変数の中で処理したほうが、圧倒的に速いはずです。ただし、VBAの文字列型変数の大きさには限界があり、数メガ程度ですが、Webサイトの常識的なページ一つに留まります。(画像は別の取得の仕方ですから、ここでは関係ありません。あくまでも、テキスト・オンリーです。) もし、VBAをPerl ライクで使用するなら、ぜひ、BASP21 の BRegExp をお試しになることをお勧めします。なお、会社で使用することも認められる公的なものです。ただし、会社で使用する場合は、商用バージョン(サイト・ライセンス)もあります。 WindowsのVBScript 側の正規表現とは、比べ物にならないほど、性能が良いです。 私自身は、他人の環境で、Dll をインストールさせるまでには至らないので、公開が予想されるものは、Windows 組み込みの正規表現と、VBAの文字列関数を組み合わせています。正規表現のVBScript.RegExp で、いくら参照設定していても、スクリプトの部分でパターンを入れるので、そのたびに、オーバーヘッドが生じてしまうような気がしますので、小回りが必要なときは、VBA関数を使ってしまいます。 例: ここのサイトの質問番号(\1)とタイトル(\2)を取る myPattern = "ent><A\shref=""qa(\d+)\.html"">([^<]+)</A> http://www.hi-ho.ne.jp/babaq/bregexp.html Set objIE = CreateObject("InternetExplorer.Application") で、取得したオブジェクトから、テキスト型のログを取ります。 strLog = objIe.Document.body.innerHTML で、strLog は、テキストファイルですから、後は、正規表現パターンで取得できます。なお、innerTEXT側では、区切り文字が見当たらないので、数字などの取得はうまくいきません。 参考サイト
- imogasi
- ベストアンサー率27% (4737/17069)
質問のようなことが当然出来て、やり方を教えてほしいという質問のし方だが、根本的に、基本的に>外部プログラム(例えば、Perl)を実行し、その実行結果をVBAプログラム中で利用する、ようなことは(実行結果がうまく行ったか程度のことは別にして)、出来ないと思います。 オフィスソフトなどのようにCOMオブジェクト(ライブラリ)化されて、参照設定して利用できるもの以外は、本来出来ないのだが、MS社などが多大な工夫・仕組み・労力をかけてできる仕組みがオフィスソフトなどで作られている例を、まず見ているものだから、どんな場合にでも出来ると思い、こういう質問になるのだと思います。 こういう質問の内容が出来る場合というのはどういう仕組みが必要かを、質問者が時間をかけて勉強する必要があると思います。そんなに簡単な事ではないと思います。
補足
調べてみたところ、 shellという関数で、perlのプログラムを実行し、 実行結果をテキストファイルで出力し、 http://officetanaka.net/excel/vba/file/file08.htm に書いてある方法でその実行結果のテキストファイルをVBAで入力 すればやりたいことができることがわかりました。