2011年5月29日日曜日

時刻の関数 (2)

時刻関連の関数の続き。
  
Sub ExampleTimeFunction2()
       Dim objSheet As Object
       Dim objCell As Object

       objSheet = ThisComponent.CurrentController.ActiveSheet
       '
       'TimeSerial 関数
       objCell = objSheet.getCellRangeByName("A1")
       objCell.String = "22:56:23のシリアル値 (1)"
       objCell = objSheet.getCellRangeByName("B1")
       objCell.Value = TimeSerial(22, 56, 23)

       '
       'TimeValue 関数
       objCell = objSheet.getCellRangeByName("A2")
       objCell.String = "22:56:23のシリアル値 (2)"
       objCell = objSheet.getCellRangeByName("B2")
       objCell.Value = DateValue("22:56:23")

End Sub
  
上記マクロの実行結果は下記の通り :
  
1. TimeSerial 関数
   引数に指定した時、分、秒の時刻のシリアル値を取得する。DateSerial

   関数と違い、特定の時刻を基準からの経過時間ではないので、値が
   一体何を意味するかは不明。但し、時刻間の時間計算には使用できる、
   とヘルプには書いてあるが、個人的には、意味不明な値を使うのには
   抵抗がある。
   それはさて置き、書式は下記の通りとなる :
        
      TimeSerial(HourMinuteSecond)
  
   Hour には時間を表す 0 ~ 23 の整数を指定する。
   Minute には分を表す 0 ~ 59 の整数を指定する。
   Second  も同様に、秒を表す 0 ~ 59 の整数を指定する。
   この関数の戻り値は、既述の通り、時刻のシリアル値を表す整数を返す。

  
   さて、この TimeSerial 関数について、ヘルプには、例として
    
      「12, -5, 45 は 11, 55, 45 と見なされます」
  
   との記述がある。意味がわからなかったので Excel の TimeSerial 関数の
   ヘルプを参照したら、どうやら、
  
      「12 時 5 分前 45 秒の TimeSerial 関数の値は、TimeSerial(11, 55, 45)
       と同じこと」
  
   ということを意味することが判明したので、実験してみると、
  
      「アクションは支援されません。無効なプロシージャーの呼び出し」
  
   というエラーメッセージが表示されてしまう (Excel は問題なく動作)。 
   結局、Calc では、TimeSerial 関数の引数としては上述の通りの値しか指定
   できないようである。
  
2. TimeValue 関数
   引数で指定した時刻文字列を日付のシリアル値に変換し戻り値として返す。
   書式は下記の通り :
  
      TimeValue(TimeString)
  
   TimeString には HH:MM:SS 形式の、時刻として妥当な文字列を指定する。
   この関数の戻り値も、既述の通り、時刻のシリアル値を表す整数を返す。

0 件のコメント:

コメントを投稿