• 締切済み

Excel VBA から外部プログラムを実行し結果を利用するには?

Excel VBA から外部プログラム(例えば、Perl)を実行し、 その実行結果をVBAプログラム中で利用する方法を教えて ください。 より具体的にやりたいことを書きますと、 Perlでインターネット上の情報(数字)を取ってきて、 その情報をVBAで利用したいのですが。。。 よろしくお願いします。

みんなの回答

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.3

>より具体的にやりたいことを書きますと、 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)
回答No.2

こんばんは。 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側では、区切り文字が見当たらないので、数字などの取得はうまくいきません。 参考サイト

参考URL:
http://www.ken3.org/cgi-bin/group/vba_ie.asp
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

質問のようなことが当然出来て、やり方を教えてほしいという質問のし方だが、根本的に、基本的に>外部プログラム(例えば、Perl)を実行し、その実行結果をVBAプログラム中で利用する、ようなことは(実行結果がうまく行ったか程度のことは別にして)、出来ないと思います。 オフィスソフトなどのようにCOMオブジェクト(ライブラリ)化されて、参照設定して利用できるもの以外は、本来出来ないのだが、MS社などが多大な工夫・仕組み・労力をかけてできる仕組みがオフィスソフトなどで作られている例を、まず見ているものだから、どんな場合にでも出来ると思い、こういう質問になるのだと思います。 こういう質問の内容が出来る場合というのはどういう仕組みが必要かを、質問者が時間をかけて勉強する必要があると思います。そんなに簡単な事ではないと思います。

gle_gle
質問者

補足

調べてみたところ、 shellという関数で、perlのプログラムを実行し、 実行結果をテキストファイルで出力し、 http://officetanaka.net/excel/vba/file/file08.htm に書いてある方法でその実行結果のテキストファイルをVBAで入力 すればやりたいことができることがわかりました。

関連するQ&A

  • 外部プログラム実行について

    PerlからMifesのマクロを動かしたいのですが、外部プログラムを実行させるにはsystem関数とexec関数があるみたいですが、どっちを使えばいいのでしょうか? また、PerlからVBAを操作したりすることはできるんですか?どのように書いたらいいか、詳しい方法を教えて頂きたいです。

    • ベストアンサー
    • Perl
  • VBAでperlのプログラムを使う

    EXCELのVBAでマクロをくみ、perlのプログラムを起動することは可能でしょうか? またperlのプログラム内容が起動パスのところにあるファイル名を取得するプログラムなのですが、 これでEXCELのマクロを実行したパスにあるファイル名を取得することはできるのでしょうか?

    • ベストアンサー
    • Perl
  • EXCEL VBA 自動でプログラムの実行できますか

    EXCELのVBAでタイマー等を使用して一定の時間がきたら プログラムを実行させたいのですが、教えて下さい。 宜しくお願いします。

  • VBAで外部プログラムを非表示で実行するには

    VBAとVBScriptを混同しているのかもしれませんがよく分からないので教えてください。 Excel2010のVBAから、外部プログラム(test.exe)をコマンドプロンプトを非表示の状態で実行して、外部プログラムの実行が終了するのを待ってから、次の処理をさせたいのですが、test1のプログラムでは(A)の部分でエラーになってしまいます。また、test2のプログラムでは正しく実行されるのですがコマンドプロンプトのウインドウを非表示にする方法がよく分かりません。 test1のプログラムでエラーをでなくする方法、または、test2のプログラムでコマンドプロンプトのウインドウを非表示にする方法がありましたら教えてください。 ------------------------------------------------------- Sub test1()  Dim ws As Object  Dim we As Object  Dim command As String  command = "C:\test.exe"  Set ws = CreateObject("WScript.Shell")  Set we = ws.Run("%ComSpec% /c " & command, 0, False) '<===(A)  Set we = Nothing  Set ws = Nothing End Sub ------------------------------------------------------- Sub test2()  Dim ws As Object  Dim we As Object  Dim command As String  command = "C:\test.exe"  Set ws = CreateObject("WScript.Shell")  Set we = ws.exec("%ComSpec% /c " & command)  Do Until we.Status   DoEvents  Loop  Set we = Nothing  Set ws = Nothing End Sub -------------------------------------------------------

  • 外部プログラムを実行する方法について

    お世話になります。 データが更新された段階で、外部プログラム(xxx.exe)を実行したいと考えております。 おそらく、トリガを利用すれば可能かと思い調査しておりますが、 どのようにして外部プログラムを実行すればよいか分かっておりません。 ご存知の方、ご教示頂けないでしょうか。 よろしくお願いいたします。

  • MATLABで外部プログラムをバックグラウンド実行

    MATLABで外部プログラムを実行したいと考えています。 具体的に申し上げると、ファイル起動時にデータを吸い上げcsvとして出力するマExcelファイルを起動させ、csvが出力されたらMATLABで読み込み、処理を行うというものです。   そこで、!を使えば、外部プログラムが立ち上がるので、 例えば、 ! C:\work\test.xlsx とすると、test.xlsxを立ち上げることが出来ますが、test.xlsxを閉じないとMATLABのほうに戻ってきません。   そこで、末尾に & を付けて ! C:\work\test.xlsx & とすると、目的は達成できたのですが、 黒い窓(コマンドブロンプト)が出てきて、見た目が悪いので、 この黒い窓を出さずに、外部プログラムをバックグラウンドで実行する方法は無いでしょうか?

  • エクセルVBAが対応できるプログラムの大きさ

     エクセルVBAでプログラムの行数が2000行近くになるとプロシージャが大きすぎますとなり、実行できません。これには対処する方法はあるでしょうか。また、エクセル2013ではもっと大きなプロシージャにも対応しているのでしょうか。  よろしくお願いいたします。

  • VBAを実行しないと開けないエクセルファイル

    タイトルのようなエクセルファイルを作りたいです。 閲覧者がVBAの実行を認めない限り、閲覧不可にしたいのです。もし認めない場合はメッセージボックス等で「開くことができません」と表示され、エクセルが閉じるようにしたいです。 どのようなVBAのプログラムを組めば実行できますか?

  • Excel VBAを外部プログラムから組み込む方法

    Microsoft SQL ServerのReport Service機能を使って、データの一覧をExcelに出力するようなツールを作りました。 次に、出力されたExcelにデータを追記して、SQL Serverのテーブルにデータを書き戻すということをしようとしています。 そこで、出力されたExcelに、書き戻しボタンを組み込んでしまおうと考えたのですが、外部のプログラムからExcelにマクロを組み込むにはどうしたらよいのかがわかりません。 書き戻しボタンを持つフォーマットファイルを用意しておいて、そこにデータを出力する、というやり方もあるかとは思いますが、Report Serviceが勝手にExcelへの出力をやってくれるので、今回はそのやり方ではなく、外部からVBAを組み込むという方針で考えております。

  • Excel VBAで「プログラム実行」ボタンと「プログラム停止」ボタンをつけたい

    ExcelでVBAを使いアプリをつくっています。 プログラムを実行させるボタンはもちろんつくれるのですが、 プログラムを停止させるボタンをつくるにはどうしたら良いのかと悩んでいます。 ボタンに登録できるのはひとつのプロシージャですよね。 とすると「他のプロシージャを止める」プロシージャをつくらねばならないのでしょうか。とするとどうやって・・・?

専門家に質問してみよう