- ベストアンサー
VBAの記述位置で起動時間は変りますか?
- VBAの記述位置によってExcelの起動時間が変化するのか疑問です。
- 現在UserForm上に多くの記述をしており、起動時間が遅くなってしまいました。
- Moduleに記述しなおすことは可能ですが、時間がかかるようです。どちらが良いか教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。Wendy02です。 >ちなみに記述量についてですが、空白行 や ’説明文 >は影響あるものなのでしょうか? この話は聞いたことがあります。それに、コメントを削除するツールってありますよね。渡辺 ひかるさんという方が作られた "VbePlus" というものがありますね。どちらかというと、VBAの整形ツールです。 http://www.vector.co.jp/soft/win95/prog/se176543.html 時々、議論になる話ですね。VBAとVisual Basic などのコンパイリングするプログラムとの根本的な違いのようですから、理屈からすると、やっぱりコメントはないほうがよいですね。でも、可読性が落ちますね。 後は、 Range("A1").Select と With ActiveSheet .Range("A1").Select End With では、後者のほうが速いと聞きます。数千分の1秒の世界ですけれども。 後は、Unload Me(=UserForm) と、UserForm.Hideとの違いかな?片方は、メモリから解放されていますが、片方は確保されたままですね。これらは、枝葉末節で、人が関知する時間(0.5秒ぐらい?)以内だとは思いますが。
その他の回答 (1)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。Wendy02です。 >VBAの記述位置で起動時間は変りますか? それは、はっきりとしませんね。たぶん、根本的な解決策はないと思います。 モジュールの読み込み自体は順序はありますが、一旦、全て読み込んだ後のことに関しては、あまり区別がないような気がします。 UserFormモジュールの場合は、UserFormコントロール + モジュールの記述量ですから、あまり大きすぎるモジュールは重くなるのかなっていう心配を感じる時があります。 だから、UserForm間で共有するものは、標準モジュールに記述していきますね。 私の個人的な感覚では、他にコントロールを背負わない、つまり、親(Parent)が、Application に直結する、標準モジュールのほうに書くのが、全体の設計(主にメモリ配分)には良いとは思いますが、他のコントロールの呼び出しに手間が掛かるなら、同じことだと思います。 >現状 UserForm1から5に多く記述しています。 これ自体は問題なんだろうと思います。マルチページにできれば、そのほうがよいだろうと思います。UserFormは、Excelアプリケーションとは別の独立したコントロール・モジュールなので、標準モジュールを呼び出せば、その分の多少のロスはあるはずですが、それ以上に、UserForm間の切り替えが遅いように感じます。
補足
ご回答有難う御座います。 少し理解出来た気がします。 UserFormを1から5に分けたのは、それぞれ違う作業 (ユーザーにフォーム上で入力してもらった内容の貼り付けや印刷)を行なう為ですのでマルチページは考えませんでした。 コントロールの数も多いし、記述量も多いので仕方ないのかなと思いました。 共有できる記述がないか、見直してみます。 ちなみに記述量についてですが、空白行 や ’説明文 例えば Private Sub CommandButton2_Click() 'キャンセルボタン Unload UserForm2 'フォームを閉じる Range("A1").Select 'セルA1を選択 End Sub と Private Sub CommandButton2_Click() Unload UserForm2 Range("A1").Select End Sub は影響あるものなのでしょうか? 別質問みたいですみません。
お礼
Wendy02さん 再度のご回答有難う御座います。 >コメントはないほうがよいですね。 やはり、そうなんですか。 プログラム中はコメントを残さないと、自分で以前に組んだ箇所まで「ん・・?」 となるので、コメントを記述していますが、最終的にユーザーに渡すときには コメントを削除しようかな、と思いました。 >Range("A1").Select >With ActiveSheet > .Range("A1").Select >End With 行数が短い方が早い訳でもないのですね。 Unload と Hide は使い分けています。 入力されたテキストをあえて残しておく必要のあるVBA箇所があるので。 でも、これも時間に影響する事は知りませんでした。 貴重なお話とURLも有難う御座いました。