- 締切済み
Excel マクロ1回目の結果反応遅い以降は速い
最近 勉強を始めました、ご教授願います。 Excel2010 PC XPです。 * 下記の方法で計算させて セルに労働時間を表示させています。 *起動後、 最初の退社時間入力後、労働時間の表示が遅いです。 次以降は すぐに表示されます。 (休息・入社時間は決まった時間ですので入力済)。 *入社時間c1、退社時間d1、休憩時間e1、労働時間f1 Function・を使用して セルf2に=労働時間(c2,d2,e2)と入れてます。 Function 労働時間(ByRef 入社時間 As Date, ByRef 退社時間 As Date, ByRef 休息時間 As Date) 各種 計算等.... End Function 上記の方法はネットにて検索して そのまま 利用しております。 よろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- WindFaller
- ベストアンサー率57% (465/803)
こんにちは。 残念ですが、Excelの場合は、VBAにはVBAだけの割り当てのメモリがありますから、いくら物理的メモリを増やしたところで、初動時のスピードとは、直接関係がありません。初動時に遅くなるのは、すぐに、Excel用の仮想メモリが確保できているわけではありませんから、使おうとするVBAのコードのオブジェクトが生成するまでの間、時間が掛かるものだ考えられます。 最初の段階では、組み込み関数の数百倍ぐらいだと思います。だから、あまり単純な計算の場合は、ワークシートに数式を入れたほうが速いはずです。ただし、その違いを認識するのは、初動時だけです。それでも、VBA関数のほうが、十数倍遅いはずです。 >Function 労働時間(ByRef 入社時間 As Date, ByRef 退社時間 As Date, ByRef 休息時間 As Date) 戻り値は何か、質問のコードでは分かりませんが、そのコードでは、引数に、値だけを入れれば済むものですから、ByRefは不要なような気がします。なぜそうしているのか、その必要性が分かりません。ただし、この場合のByRefとByVal自体のスピードの違いは、ほとんど変わらないはずですが。 >If 入社時間 + 退社時間 = 0 Then '// >Dim a As Date >a=入社時間 + 退社時間 >If a =0 Then ・・ どちらでも変わらないと思います。 入社時間 + 退社時間が0になるのは、今のところ、引数そのものを忘れた以外には考えられませんが、引数そのものを入れなければ、エラーになるはずですから、不要かもしれません。
- n-jun
- ベストアンサー率33% (959/2873)
例えばパソコンのメモリーが1GBとか 少ないって事はないですか? ⇒XPだと3.2GB位までは認識できますから、 2~3GBまで増やしてみるとか? あるいは常駐ソフトが多いとかでも 影響するかな??? 遅いってレベルがどの位なのかはわかりませんが、 その後と比べてちょっと遅いって事なら 割り切ってしまうのも手ですけどね。
お礼
n-jun 様 お騒がせいたしました。 ありがとうございました。
補足
初歩的な記述ミス?が あったようです。 動作していたので気がつきませんでした。 --- If 入社時間 + 退社時間 = 0 Then 多分? これがダメのようでした。 --- 変更後 Dim a As Date a=入社時間 + 退社時間 If a =0 Then ・・・
補足
WindFaller様 ご回答 誠にありがとうございます。 ここ数日、悩んでいました。 Dimも Byrefも必要はありませんでした。 ご指摘の生成に時間が掛かるですが 2秒位かかり まさかと思っていました。 Dimも無意味に変更していました。 (結局その後、同じ状態になってしまいました。 ) 色々、試していたところ 未完成の数日前のBOOKを起動しましたら すぐに結果がでましたのでビックリして調べてみました。 違いは他のセルに 記述エラーの(=時間())がありました。 それを削除すると、初回入力が遅くなるのに気が付いたところでした。 まさか? エラーーコード?があると 初期の計算が止まる?と・・ 又、訳の分からない事を考えて、コードを削除しシートに再計算のSubを入れましたら パッと結果がでるようになりました。 a=入社時間 + 退社時間 ですが 休日は 入社、退社、休息は空白です。 (労働時間=退社時間-休息時間-入社時間)が 0:00になるので、 a =0の場合は 労働時間=””で 空白にしてます。 再計算が正しいかどうかは 分かりません。 とりあえずは 大丈夫のようですが 命令を理解するのがとても難しいです。 これからも よろしくお願いいたします。 ありがとうございます。