• ベストアンサー

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

  • VBAでコンパイルする時のショートカットキー

    VBA初心者です。 VBAでプロシージャを作成するたびに、コンパイル作業を頻繁に行うので、 メニューバーの「デバッグ」→「VBAprojectのコンパイル」をクリックしなくてもよい、ショートカットキーがあれば教えてください。

  • vbaとvb 「デバッグ」「ビルド」

    vbaの「デバッグ→VBAプロジェクトのコンパイル」=VB.netで言う「ビルド」、 vbaの「実行」=VB.netの「デバッグ開始」 であってますか? デバッグ=コンパイル=ビルドなのか混乱しています。 いろいろな言葉が出てきて頭がぐちゃぐちゃなので整理したいです。 よろしくお願いします。

  • VBAの将来性について

    いつもお世話になっております。 VBAのことを調べていたら以下のように書かれていました。 >近年マイクロソフト社はActiveX/Component Object Modelから.NET Frameworkへの転換を進めており >Visual Basic for Applications - Wikipedia >http://ja.wikipedia.org/wiki/VBA 調べてみるとVSTOという技術でのOffice開発があって、 それへの転換を進めているということなのだろうと推測しました。 そこで質問なのですが、VBAの技術は追加されていますか? Office2003と比較してOffice2007でこういう技術が追加されたという 情報がございましたら、教えて頂けませんか? マイクロソフト社としてはVBAにこれから力を入れていくものなんでしょうか? VBAがなくなるということはないと思うのですが、 技術の追加は主にVSTO側に行っているようであれば、 今後のOffice開発の方針を考えたいと思い、質問させて頂いております。 ぜひよろしくお願いいたします。

  • デバッグ→コンパイル すると 停止する

    vbaでコードを書き、 デバッグ→コンパイルをすると 必ず画像のような画面が出て、アクセスが再起動してしまいます。 ファイルが壊れているのでしょうか? 2010です。

  • Excelの"マクロ"という言い方は英語圏では?

    教えてください。 日本では、ExcelのVBAを"マクロ"と呼ぶことが多いです。 これは厳密には誤った用法のようですが、広く使われている思います。 そこで、英語圏ではどうなのでしょうか? やはり、日本同様、macroと呼ばれることが多いのでしょうか? なお、アメリカのAmazonのサイトを覗くと、macroとvbaの両方があるようです。 https://www.amazon.com/s?k=excel+macro&ref=nb_sb_noss wikipdeidaでも、数は少ないですがmacroをvbaの意味で使っているような記述あるようでした。 https://en.wikipedia.org/wiki/Visual_Basic_for_Applications

  • 「ファイルが見つかりません」VBAが実行できない

    今まで問題なく使えてたアクセスのファイルがあるのですが vbaコードを実行しようとしたら、ファイルが見つかりません と言うエラーがでてしまいます。 VBE画面を開いて、コンパイルしてみたのですが、どこでエラーになってるのか出ません。 何をしても、ファイルが見つかりません が出ます。 どうすればいいでしょうか? 2010です。

  • 言語の変換について

    下記インタプリタ(wikiの文章抜粋)について質問です。 下記のコンパイルとインタプリタの動作連携のメリットの理解に苦しんでおります。 最近の処理系では、Javaや.NET Frameworkなど、JITコンパイラを利用している物の中で、起動時にコンパイルすると起動が遅くなるため、まず、最初にインタプリタで動かし、バックグラウンドでコンパイルして、コンパイルが完了してから、そちらに切り替える、併用型もある。 環境:visual C#2010

  • EXCEL VBAで

    VBA初心者です 簡単過ぎる質問で申し訳ありませんが 調べてみても分からなかったので質問さしてもらいます VBEの標準モジュール1で簡単なプログラムを作成しました デバッグツールバーから実行をすると プログラム通り、動作はしましたが・・・ VBE画面を閉じてからの、プログラムを実行する方法が分かりません 右上の×を押しの、プログラム実行です 作ったプログラムを動作しようと思って 開発→マクロを押しても、作ったマクロ名が表示されないです どのようにしたら、標準モジュールで作ったマクロが、表示されるようになりますか?

  • VBAについて教えて下さい。

    VBAの事について教えて下さい。 初心者です。本で読んだのですが、エクセルのツールから、 マクロ→Visual Basic Editorをクリックすると、 Microsoft Visual Basic‐Book1と言う画面で、 左側に VBA Project(Book1)と言う画面になるとなっていますが、 Microsoft Visual Basic‐Excel_JSV7.xlaと言う画面になり、 Excel_JSV7.xla‐JSV7Transk JSheet(コード)と他に2つが出てきます。 こんな時は、どうすれば直るのでしょうか?  どなたか作業の仕方を教えていただけないでしょうか。

  • エクセル2002に追加でVBAヘルプをインストールしたい

    VBAヘルプを使うために、エクセル2002に追加でVBAヘルプをインストールしたいです。 「プログラムの追加と削除→Microsoft Office XP Professional 変更→機能の追加/削除→Office共有機能→Visual Basic for Applications→Visual Basic ヘルプ」 のような感じで進んでいきますが、最後にCD-ROMを挿入して下さいという画面にたどり着きます。 しかし、パソコンには購入時にすでにエクセルがインストールされていてOfficeやEXCEL単体のCDがありません。CDとしてあるのはドライバーCDとリカバリーCD(4枚)しかなく、一応CD-ROMを挿入して下さいという画面の時に読み込んでみましたが読めません。 このような状態だと追加インストールはできないのでしょうか。もしできるとすればどうすればよいのでしょうか。