投稿者 るしぇ  () 投稿日時 2008/7/5 02:22:00
>>14 
更なるステップアップのために 
 
>Dim genzai As Date  
>Dim strTime As Date  
>Dim toyoubi As String  
カプセル化の意味から、Private 宣言で問題無い変数に関しては Dim 宣言を 
避け Private 宣言することを推奨します。 
 
>Dim strTime As Date  
変数の命名規則としてPREFIX(接頭子)を使う場合、str は String 型を意味 
します。Date 型に変更したのであれば接頭子も dat とかに変更します。 
他の変数名と命名規則が違いますが、可読性を高めるために「コーディング規約」 
について調べることをお勧めします。 
 
データ型を意識したプログラミングをするために、ファイルの先頭に 
Option Strict On 
と書いてみてください。 
>genzai = TimeValue(Now) 
の Now にエラー 
「Option Strict On で 'Date' から 'String' への暗黙的な変換はできません。」 
が出ましたか?関数 TimeValue の引数は文字列です。つまり、ここでは 
Now(Date型)⇒文字列(String型)への暗黙の変換処理が行われます。 
 
そして関数 TimeValue で再び Date 型へ。Date 型は数値と同じような 
内部構造をしてますから、数値⇔文字列を行うのと同じくらいのコストが 
掛かります。PCの性能が格段に良くなっている現在では、1度や2度の変換コスト 
を重く感じることは無いでしょう。ただし上級者になって数千万件のデータを 
扱った場合、このような無駄な処理は避けるべきです。 
 
TimeValue 関数は日付情報が 1 年 1 月 1 日に設定された日付型を返すので 
時刻だけ抜き出す処理としては面白い発想です。 
ただし、効率よいプログラムを作成したいなら、せっかく日付型になっている 
ものを他の型に変換するのは避けます。 
 
考え方として時と分が合えばいいのであれば、 
  genzai = Now 
  strTime = TimeValue("4:00:00") 
  If genzai.Hour = strTime.Hour AndAlso genzai.Minute = strTime.Minute Then 
    '時・分が一致の処理 
  End If 
と書けます。秒まで一致なら更に Second の条件を追加します。 
 
ここまではプログラミングの基礎的な部分に関しての改善点です。 
基礎的な知識を身につければ解決案も出せるでしょう。