アプリ版:「スタンプのみでお礼する」機能のリリースについて

先日こちらで質問したものですが
いくつか自作関数を作ってクエリを表示させてみたところ、
心なしか表示が遅いし画面がぶれる気がするのですが
自作関数は最初から用意されている関数より
パフォーマンスが悪いのでしょうか?

前回質問:http://okwave.jp/qa5373030.html

A 回答 (3件)

確実に悪いです。


SELECT table1.field1, myFunc(table1.field2) FROM table1
table1 が 1000行なら myFunc は 1000回呼び出されますよね。
    • good
    • 0
この回答へのお礼

やはりそうなんですね。有難うございます。

お礼日時:2009/10/25 10:11

こんにちは。



VBAは、一旦、実行時前に中間言語(Pコードと言う)に変換され確保されています。[順次コンパイル]モードにしておければ、そのつど、翻訳されることはありません。だから、この時点ではそんなに遅いということではありません。もちろん、組み込み関数で作られているC言語とは比較にはなりませんが、Basic のようなインタープリタ言語よりは、非常に高速です。VBなどにも、ビルド前のデバッグモードのときに存在するものです。

しかし、Application とVBA をつなぎますから、オブジェクトから引数を取得したりする場合は、どうしても遅くなってしまいます。

また、IIF関数は、その中の判定をすべて通っていきますので、VBAのユーザー定義関数には向かないもののひとつです。Access のヘルプにも、これは書かれていたはずです。

ACC2000: Visual Basic for Applications Is Both a Compiler and an Interpreter
以下は機械翻訳
http://support.microsoft.com/kb/209176/ja

http://oshiete1.goo.ne.jp/qa1431672.html
    • good
    • 0
この回答へのお礼

ありがとうございます。特にIIF関数はむかないのですね。

お礼日時:2009/10/25 19:24

VBAはインタープリターですから遅いです。


呼ばれるたびに機械語に翻訳されて実行される。
この翻訳が負荷の大きい処理なのです。
使う場面を十分の考えましょう。
    • good
    • 0
この回答へのお礼

なるほど。有難うございます。

お礼日時:2009/10/25 10:11

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!