• ベストアンサー

VBA と コンパイル の関係

VBAのウィキを見ていると http://ja.wikipedia.org/wiki/Visual_Basic_for_Applications 「基本的にはインタプリタ型の言語であるため、コンパイル(ビルド)の作業は不要である。」 との事ですが VBE画面のデバッグ画面に「VBAProjectのコンパイル」と言う機能がなぜあるのはなぜでしょうか? VBAでコンパイル作業は不要だけど、付属として「VBAProjectのコンパイル」機能があるのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • rukuku
  • ベストアンサー率42% (401/933)
回答No.1

こんばんは 私の場合、VBAは何年も使っていますが「VBAProjectのコンパイル」 なんて機能は知りませんでした。 人に教える機会があって、そのときに使ったテキストに出ていたので、初めて知りました。 「VBAProjectのコンパイル」を使わなくても、問題なく動作します。 一つ、使い道をあげるならば、 「VBAProjectのコンパイル」を使うと、実行することなく、文法チェックできます。 もっとも、文法上のエラーがあれば、プログラムが実行される前にエラーが出るように なっていますので、わざわざ一手間をかける理由は見つかりません。 たぶん、過去のバージョンを使っていた人が「この機能はどこへ行った?」と ならないように残しているのではないかと思います。 そうはいっても、Excel2000でも、コンパイル操作なしに実行できますから、 当たってないかもしれません。

t6y7u5r4
質問者

お礼

なくても使えるのですね。ありがとうございます。

すると、全ての回答が全文表示されます。

その他の回答 (6)

  • ap_2
  • ベストアンサー率64% (70/109)
回答No.7

二重投稿・・・ゴメン(TへT

t6y7u5r4
質問者

お礼

いえいえ ご丁寧にありがとうございました。

すると、全ての回答が全文表示されます。
  • ap_2
  • ベストアンサー率64% (70/109)
回答No.6

補足@ANo.2読み返したら意味分からなかったので(--; 最近のVBAは、インタプリタでもコンパイラでもない・・・ ハイブリッド言語!なんだとか。 初回実行時、まずPコードにコンパイルして保持しておき、 そのPコードをインタプリタで実行するらしいですよ。 Pコードは、JAVAバイトコードなんかで有名な"中間コード" の一種で、マシンコードに近く実行が早いです。 VBAの場合、初回実行時にコンパイルしていくことも、予め コンパイルしてファイル内に保持することもできます。 ・コンパイル言語   ソースを、実行形式@マシンコードにコンパイル。   マシンコードなので実行が早い。 ・インタプリタ言語   ソースを解釈しながら実行する。   マシンコードに変換しながらなので、当然遅い。 ・VBA   Pコードにコンパイルする(タイミングは任意)。   Pコードはマシンコードに近いので、実行が早い。 で、VBAは通常、実行時に使用分のみ自動コンパイルする ようで、各関数の初回使用時に順次・・・という感じ。 あくまで、コンパイルはしてるらしい。 「VBAProjectのコンパイル」は、一度全てコンパイルした上 で、"ファイルにPコードを保持する機能"をONにします。 この状態では、手動or自動コンパイルされる都度、ファイル に保持するコードも変わります。 ややこしいですが、ON状態でソースを変更した場合、変更 箇所を使用するか、「VBAProjectのコンパイル」する まで、ファイル上のPコードはたぶん変更されません。 あと、OFFにする方法は不明。 僕もあんまり難しいことはワカリマセン。。。 認識に誤りもあるかもなんで、調べてみてクダサイ。 (参考) ・VBA はインタープリタ?コンパイラ? http://www.h3.dion.ne.jp/~sakatsu/Excel_Tips13.htm ・コンピュータ言語はどのような仕組みで動いているのか  (文字コードはJIS。ソース開かないと文字化けかも) http://archive.linux.or.jp/JF/JFdocs/Unix-and-Internet-Fundamentals-HOWTO/languages.html ・VB@Wikipedia (VBAもVBの類。ちょっと説明あり) http://ja.wikipedia.org/wiki/Microsoft_Visual_Basic かなりがんばりました。

t6y7u5r4
質問者

お礼

ありがとうございました。

すると、全ての回答が全文表示されます。
  • ap_2
  • ベストアンサー率64% (70/109)
回答No.5

補足@ANo.2読み返したら意味分からなかったので(--; 最近のVBAは、インタプリタでもコンパイラでもない・・・ ハイブリッド言語!なんだとか。 初回実行時、まずPコードにコンパイルして保持しておき、 そのPコードをインタプリタで実行するらしいですよ。 Pコードは、JAVAバイトコードなんかで有名な"中間コード" の一種で、マシンコードに近く実行が早いです。 VBAの場合、初回実行時にコンパイルしていくことも、予め コンパイルしてファイル内に保持することもできます。 ・コンパイル言語   ソースを、実行形式@マシンコードにコンパイル。   マシンコードなので実行が早い。 ・インタプリタ言語   ソースを解釈しながら実行する。   マシンコードに変換しながらなので、当然遅い。 ・VBA   Pコードにコンパイルする(タイミングは任意)。   Pコードはマシンコードに近いので、実行が早い。 で、VBAは通常、実行時に使用分のみ自動コンパイルする ようで、各関数の初回使用時に順次・・・という感じ。 あくまで、コンパイルはしてるらしい。 「VBAProjectのコンパイル」は、一度全てコンパイルした上 で、"ファイルにPコードを保持する機能"をONにします。 この状態では、手動or自動コンパイルされる都度、ファイル に保持するコードも変わります。 ややこしいですが、ON状態でソースを変更した場合、変更 箇所を使用するか、「VBAProjectのコンパイル」する まで、ファイル上のPコードはたぶん変更されません。 あと、OFFにする方法は不明。 僕もあんまり難しいことはワカリマセン。。。 認識に誤りもあるかもなんで、調べてみてクダサイ。 (参考) ・VBA はインタープリタ?コンパイラ? http://www.h3.dion.ne.jp/~sakatsu/Excel_Tips13.htm ・コンピュータ言語はどのような仕組みで動いているのか  (文字コードはJIS。ソース開かないと文字化けかも) http://archive.linux.or.jp/JF/JFdocs/Unix-and-Internet-Fundamentals-HOWTO/languages.html ・VB@Wikipedia (VBAもVBの類。ちょっと説明あり) http://ja.wikipedia.org/wiki/Microsoft_Visual_Basic かなりがんばりました。

t6y7u5r4
質問者

お礼

ありがとうございました。

すると、全ての回答が全文表示されます。
  • Siegrune
  • ベストアンサー率35% (316/895)
回答No.4

例)Dim asx As springのところでエラーになるプログラム Sub aaa() Cells(1, 1).Value = 123 End Sub Sub bbb() Dim asx As spring End Sub これで、sub aaa()を実行すると VBEのオプション:全般の順次コンパイルにチェックがある場合、 aaa()は実行され、正常終了します。 ⇒ wikiなどにある「インタプリタ(interpreter)とは・・・逐次解釈しながら実行するプログラムのこと。」の通り、処理するサブルーチンを処理する順番にコンパイル(解釈)しながら実行しています。 VBEのオプション:全般の順次コンパイルにチェックがない場合、 sub bbb()の Dim asx As spring のところがエラー表示され、aaa()は実行されません。 逐次解釈しながら実行するプログラムとはいえないですね。 しかし、aaa()を Sub aaa() Cells(1, 1).Value = 123 a == 1 End Sub とすると、どちらの場合も Cells(1, 1).Value = 123 は処理されず、a == 1でエラーになります。 VBEのオプション:全般の順次コンパイルにチェックがない場合、 インタープリターといっても、行単位の逐次解釈ではないですね。 あくまで、サブルーチン単位の逐次解釈です。 wikiの「基本的には」となっているところが、どういう意図かは知りませんが、 実行時コンパイラがVBAでは勝手に動いていると思ったほうがいいような気もします。 (本題ではなさそうなので詳しくはやめておきます。) 「VBAProjectのコンパイル」機能は、エラーチェック目的で、実行時に行われるコンパイルを テスト実行しているだけと思えばいいのでは? ※ コンパイルといってもファイル出力しているのではなくメモリ上に展開しているだけ かもしれません。(詳細不明) なお、「VBAProjectのコンパイル」実行しただけで、ファイルサイズが大きくなっているから、 これをやっておくと、実行時に行われるコンパイルがすでに済んだ状態になって 少し早いのかもしれません。 ただし、マクロを1回実行しただけで保存しても同様にファイルサイズは大きくなるので、 どちらをやってもあまり違いはないかと思います。 (同じサイズにならないところがまた良く分からないけど。  どちらにしろ、EXCELの内部的な話なのでよくわからないところです。  ※以下は、感想程度に思っていただいて、あてにしないでください。  本題と関係するのか微妙ですし。)

t6y7u5r4
質問者

お礼

ありがとうございました。

すると、全ての回答が全文表示されます。
  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.3

普段からOption Explicitを宣言してますか? Option Explicitを宣言しないままDimで宣言されていない変数を用いてたりすると、VBAProjectのコンパイルで検出できますよ

t6y7u5r4
質問者

お礼

ありがとうございます。

すると、全ての回答が全文表示されます。
  • ap_2
  • ベストアンサー率64% (70/109)
回答No.2

「VBAProjectのコンパイル」はPコードをファイルに保存する機能。ソレしなくても、初回実行時にコンパイルしてるらしいですよ。 更に、VBEのオプションで「順次コンパイル」をONにすると、コード入力した端からコンパイルされていくんだとか・・・。インタプリタ的な動きをするけど、Pコードで高速化。もう、インタプリタ言語ともコンパイラ言語とも呼べない、別の何か。何ていうんだろうw ただ、「VBAProjectのコンパイル」に関しては、初回コンパイルよりファイルサイズの方が気になる。。。

t6y7u5r4
質問者

お礼

Pコードははじめて聞いたので調べてみます。ありがとうございます。

すると、全ての回答が全文表示されます。

関連するQ&A