プロが教える店舗&オフィスのセキュリティ対策術

 
最近 勉強を始めました、ご教授願います。

Excel2010 PC XPです。

* 下記の方法で計算させて セルに労働時間を表示させています。
 
*起動後、 最初の退社時間入力後、労働時間の表示が遅いです。

  次以降は すぐに表示されます。
 (休息・入社時間は決まった時間ですので入力済)。

*入社時間c1、退社時間d1、休憩時間e1、労働時間f1
 Function・を使用して セルf2に=労働時間(c2,d2,e2)と入れてます。

Function 労働時間(ByRef 入社時間 As Date, ByRef 退社時間 As Date, ByRef 休息時間 As Date)
各種 計算等.... 

End Function

上記の方法はネットにて検索して そのまま 利用しております。
 
 よろしくお願いいたします。

A 回答 (2件)

こんにちは。



残念ですが、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になるのは、今のところ、引数そのものを忘れた以外には考えられませんが、引数そのものを入れなければ、エラーになるはずですから、不要かもしれません。

この回答への補足

WindFaller様


 ご回答 誠にありがとうございます。
ここ数日、悩んでいました。

Dimも Byrefも必要はありませんでした。

 ご指摘の生成に時間が掛かるですが
2秒位かかり まさかと思っていました。

Dimも無意味に変更していました。

(結局その後、同じ状態になってしまいました。 )

 色々、試していたところ 未完成の数日前のBOOKを起動しましたら
 すぐに結果がでましたのでビックリして調べてみました。

違いは他のセルに 記述エラーの(=時間())がありました。

それを削除すると、初回入力が遅くなるのに気が付いたところでした。
 まさか? エラーーコード?があると 初期の計算が止まる?と・・
又、訳の分からない事を考えて、コードを削除しシートに再計算のSubを入れましたら
パッと結果がでるようになりました。

a=入社時間 + 退社時間 ですが 
休日は 入社、退社、休息は空白です。
(労働時間=退社時間-休息時間-入社時間)が 0:00になるので、
a =0の場合は 労働時間=””で 空白にしてます。
 
 再計算が正しいかどうかは 分かりません。
とりあえずは 大丈夫のようですが 命令を理解するのがとても難しいです。
 これからも よろしくお願いいたします。
ありがとうございます。

補足日時:2013/02/07 23:58
    • good
    • 0

例えばパソコンのメモリーが1GBとか


少ないって事はないですか?
⇒XPだと3.2GB位までは認識できますから、
2~3GBまで増やしてみるとか?

あるいは常駐ソフトが多いとかでも
影響するかな???

遅いってレベルがどの位なのかはわかりませんが、
その後と比べてちょっと遅いって事なら
割り切ってしまうのも手ですけどね。

この回答への補足

 
 
 
初歩的な記述ミス?が あったようです。

動作していたので気がつきませんでした。
---
If 入社時間 + 退社時間 = 0 Then

多分? これがダメのようでした。
---
変更後
Dim a As Date
a=入社時間 + 退社時間
If a =0 Then ・・・

補足日時:2013/02/04 16:52
    • good
    • 0
この回答へのお礼

n-jun 様 お騒がせいたしました。
ありがとうございました。

お礼日時:2013/02/04 16:53

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

このQ&Aを見た人はこんなQ&Aも見ています