VBAのウィキを見ていると
http://ja.wikipedia.org/wiki/Visual_Basic_for_Ap …
「基本的にはインタプリタ型の言語であるため、コンパイル(ビルド)の作業は不要である。」
との事ですが
VBE画面のデバッグ画面に「VBAProjectのコンパイル」と言う機能がなぜあるのはなぜでしょうか?
VBAでコンパイル作業は不要だけど、付属として「VBAProjectのコンパイル」機能があるのでしょうか?
No.1ベストアンサー
- 回答日時:
こんばんは
私の場合、VBAは何年も使っていますが「VBAProjectのコンパイル」
なんて機能は知りませんでした。
人に教える機会があって、そのときに使ったテキストに出ていたので、初めて知りました。
「VBAProjectのコンパイル」を使わなくても、問題なく動作します。
一つ、使い道をあげるならば、
「VBAProjectのコンパイル」を使うと、実行することなく、文法チェックできます。
もっとも、文法上のエラーがあれば、プログラムが実行される前にエラーが出るように
なっていますので、わざわざ一手間をかける理由は見つかりません。
たぶん、過去のバージョンを使っていた人が「この機能はどこへ行った?」と
ならないように残しているのではないかと思います。
そうはいっても、Excel2000でも、コンパイル操作なしに実行できますから、
当たってないかもしれません。
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-In …
・VB@Wikipedia (VBAもVBの類。ちょっと説明あり)
http://ja.wikipedia.org/wiki/Microsoft_Visual_Ba …
かなりがんばりました。
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-In …
・VB@Wikipedia (VBAもVBの類。ちょっと説明あり)
http://ja.wikipedia.org/wiki/Microsoft_Visual_Ba …
かなりがんばりました。
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の内部的な話なのでよくわからないところです。
※以下は、感想程度に思っていただいて、あてにしないでください。
本題と関係するのか微妙ですし。)
No.2
- 回答日時:
「VBAProjectのコンパイル」はPコードをファイルに保存する機能。
ソレしなくても、初回実行時にコンパイルしてるらしいですよ。更に、VBEのオプションで「順次コンパイル」をONにすると、コード入力した端からコンパイルされていくんだとか・・・。インタプリタ的な動きをするけど、Pコードで高速化。もう、インタプリタ言語ともコンパイラ言語とも呼べない、別の何か。何ていうんだろうw
ただ、「VBAProjectのコンパイル」に関しては、初回コンパイルよりファイルサイズの方が気になる。。。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
アプリケーションのDLLファイル...
-
<unistd.h>をVisualStudioでつ...
-
math.hに含まれる関数が使えない
-
共有ライブラリの内容確認について
-
実行後にコンパイルに失敗しま...
-
シリアル通信の受信待ちについて
-
c言語プログラミングでアルファ...
-
ARDUINO <MsTimer2.h> にわかに...
-
不明なプラグマ・・・?
-
#If True Then の # って何??
-
Makefileでのコンパイル方法
-
C言語で作ったらWindowsでもMac...
-
すべてのリビルド: 0 正常、 0 ...
-
サクラエディタとコンパイラ
-
#if~#end ifについて
-
[COBOL] ソースの復帰
-
メモリへの負荷
-
Verilog_HDLでのdefineとifdef
-
Borland C++ Compiler 5.5の使...
-
ソースコードのコンパイルについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
<unistd.h>をVisualStudioでつ...
-
アプリケーションのDLLファイル...
-
実行後にコンパイルに失敗しま...
-
math.hに含まれる関数が使えない
-
すべてのリビルド: 0 正常、 0 ...
-
C言語で作ったらWindowsでもMac...
-
共有ライブラリの内容確認について
-
c言語です コンパイルした時に...
-
ビープ音が鳴りません・・・
-
64ビットのlinuxで32ビットメモ...
-
C#で char型とstring型の比較で...
-
ヘッダーファイル『windows.h』...
-
lhafileをインストールしたい
-
[COBOL] ソースの復帰
-
自作DLLの中身を暗号化
-
gcc バージョン違いによるコン...
-
プレコンパイルの意味を教えて...
-
<math.h>ヘッダを入力している...
-
gcc コンパイル killed
-
Verilog_HDLでのdefineとifdef
おすすめ情報