• ベストアンサー

自作関数の方がパフォーマンスが悪い?

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

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

  • ベストアンサー
回答No.1

確実に悪いです。 SELECT table1.field1, myFunc(table1.field2) FROM table1 table1 が 1000行なら myFunc は 1000回呼び出されますよね。

quygquygqu
質問者

お礼

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

その他の回答 (2)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 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

quygquygqu
質問者

お礼

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

  • rivoisu
  • ベストアンサー率36% (97/264)
回答No.2

VBAはインタープリターですから遅いです。 呼ばれるたびに機械語に翻訳されて実行される。 この翻訳が負荷の大きい処理なのです。 使う場面を十分の考えましょう。

quygquygqu
質問者

お礼

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

関連するQ&A