• ベストアンサー

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

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

  • 自作のコストパフォーマンスについて

    初めて自作をしようとしているのですが、PCに詳しい友人から、以前ぽろっと「自作はコストパフォーマンス悪いよ」と聞いたことがあります。その友人とは今連絡が取れないのでこちらで質問させて頂いた次第です。 一旦PCケースを買ったら使いまわせたり、何かのパーツが壊れたらそこだけ交換すれば良さそうなイメージを持っているので逆に最初はお金がかかってものちのちは安上がりになって結局コストパフォーマンスは良さそうに思うのですが、実際のところはどうなのでしょうか?

  • 関数 について その2

    前回、関数について質問させて頂きました。 前回の質問内容:http://okwave.jp/qa/q7693762.html 前回の質問内容で、関数の定義に関して教えて頂きました。 今回は、前回の質問内容を整理させて頂いている途中で 気になった点について質問させて頂きます。 質問(1) y=ax^2+bは、「yはxの関数」と言います。 z=x+iyは、「zはx,yの関数」という表現は正しいですか? 有理式についても同様に、 ax+by+zにおいて、a,bを実数、x,y,zを変数とすると ax+by+zは、「実数を係数とするx,y,zの有理式」という表現は正しいですか? 質問(2) 前回頂いた回答の中に、 log(exp( 1 + 1/x )) は有理関数だと教えて頂きました。 有理関数の定義は有理式で表された関数だと認識しています。 有理式の定義は、 (多項式)/(多項式) と表せる式で、 多項式は (定数)×(変数)^(非負整数定数) の0個以上の和 と定義されています。 なぜ、log(exp( 1 + 1/x )) は有理関数になるのでしょうか? 質問(3) 多価関数について質問させて頂きます。 y=±√xは2価関数と呼ばれますが、 この他に3価関数や4価関数などがあるのでしょうか? 以上、ご回答よろしくお願い致します。

  • 関数 方程式 について

    前回関数について質問させて頂きました。 前回の質問:http://okwave.jp/qa/q7693762.html 関数については、ご回答のおかげで理解する事が できました。ありがとうございました。 今回、方程式について質問させて頂きます。 y-x^2=0は方程式ですが、関数とは言わないと思います。 y=x^2は関数ですが、これは方程式と言って良いのでしょうか? y=x^2を方程式としているものを見たことが無いのでダメだと認識しています。 y=x^2を方程式と言わない理由を教えて下さい。 方程式には厳密な定義があるのでしょうか? 言葉が正しいかわかりませんが(ニュアンスは伝わると思います)、 陽関数表現されていなければ関数と言わないのでしょうか? 陰関数表現されていなければ方程式と言わないのでしょうか? 以上、お手数をお掛けしますがいろいろ調べてもわからなかったので ご回答何卒よろしくお願い致します。

  • INDIRECT関数で指定のセルを表示したい

    こちらの質問でINDIRECT関数を使って指定のセルを指定できました。 http://okwave.jp/qa/q6920409.html だたエラーになってしまします。 おそらく1つ1つ値の更新をしないといけないと思います。 これではかなり手間なのでINDIRECT関数を使って指定のセルを自動で表示できませんか? 同じフォルダ内のブックを使います。

  • 逆関数についてもうちょっとわかりやすく

    http://okwave.jp/qa/q9131214.html ↑以前質問していただいた際に逆関数についてよくわからなかったので、もう少し具体的にわかりやすく教えてください。 お願いします。

  • 情報端末自作

    こんにちは、情報端末を自作しようと思い、それについてご指南いただかせております。 前回、↓のような質問をさせていただきました。 http://questionbox.jp.msn.com/qa5290476.html そこで「端末さえできれば・・・」という指南をいただきました。 そこで、まず端末を作り、そこにプログラムを入れていこうと思うのですが、具体的にどのようにすればよいでしょうか? 今いくつか案を考えているのですが、どれも浅い考えで成功に結びつくとは到底思えません。 ゆえに、まず皆様からアドバイスを教授させていただきたく思います。 リンク先の質問に書いている通り、私が作ろうとしているものはプロトタイプのようなものであり、ネットワークに接続しようとは思いません。また、実用も考えてはいません。

  • エクセル関数を教えて下さい。

    http://okwave.jp/qa/q6822393.html  こちらで 質問して 解決しましたが  新たに 混乱しましたので 助けて下さい。  画像参照して頂き C1に入る エクセル関数を教えて下さい。  

  • エクセルの関数に詳しいかた教えてください!

    以前→の質問をしたものです。http://okwave.jp/qa/q7256942.html 今回は前回のものに新たに条件を付け足した場合なのですが、詳しい方よろしくお願いします。 次のようなゲームをした場合の成績を、エクセルの関数を使って計算したいのですが、詳しい方お願いします。 例) A列: × × × ○ × ○ ○ × × × × ○ ○ ○ B列:0 0 0 1 0 0 0 0 0 0 1 2 0 0    C列:0 0 0 +1 0 0 0 0 0 0 -1 +1 0 0 損益:+2 最大賭数:2(B列) 最大マイナス:-1(C列) A列がゲームの結果(○が勝ち、×が負け)、B列が賭数、C列が損益を表します。 ゲームのルールですが、 (1)まず×が三回続いたら賭けはじめるとします。(追加) (2)まず最初に1を賭け、勝てば1の利益で1セット終了。 (3)最初に1を賭け、負ければ次は2を賭ける。 (4)外れ続けると、1を足し続けて賭ける。 (5)あたると1減らして賭ける。 (6)利益が0以上になったら1セット終了とし、また1から賭けなおす。 ---------------------------------------------------------------------- いまエクセルのA列に○と×が並んでいる状態で、そこから上に書いたB列、C列を関数をつかって計算し、最終的に損益、最大賭数、最大マイナスを求めたいのです。 行と列が逆になっているので、できれば直してご回答願いたいです。 例の数字の並びがきれいじゃありませんが、うまくいかないのでご容赦ください。

  • ACCESS 開いている表を閉じるには右上のX(バッテン)をクイックしますが、これをVBで操作するには?

    先日、クエリをVBで実行するには こんな風に↓やる、と聞いたのですが DoCmd.OpenQuery "myクエリ1", acViewNormal, acEdit http://oshiete1.goo.ne.jp/qa2661049.html 例えば、myクエリ1、が画面に表示するクエリだったりすると 今度、画面に表示された、表を閉じるには VBで操作するには、どうするのですか よろしくお願いします

  • INDEX関数に関すること

    ご回答くださり、ありがとうございました。 下記の内容に対して質問させていただきたいのですが、 よろしいでしょうか? https://okwave.jp/qa/q9583284/a26763834.html C2に「001,002,003」をリスト化する意味はどのようなことでしょうか? あと、E2のINDEX関数を入力しますと、 隣のD2が未入力ですと「補助科目2」が表示されてしまいます。 それは配列数式にしても同じです。 お時間のあるときで構いません。 よろしくお願いいたします。

ファックスの自動印刷について
このQ&Aのポイント
  • ファックスを受信した際に自動で印刷する方法について教えてください。
  • お使いの環境や接続方法について教えてください。
  • アナログ回線を使用しています。
回答を見る

専門家に質問してみよう