アプリ版:「スタンプのみでお礼する」機能のリリースについて

いつもお世話になっております。
エクセルでタイマーを作っているのですが、セルの書式設定の時刻だと何秒までしか表示できません。その次のコンマ以下(例 3.56秒)を表示させたいのですが
どうすればいいか教えて下さい。
よろしくお願いします。

A 回答 (5件)

こんばんは。



>VBAでのGetTickCount関数等の使い方を具体的にご教授願えませんか?

実際は、以下のようにしても、動きが速くて何も見えません。今まで、同じような質問を受けましたが、せいぜい、1秒~2秒ぐらいの表示です。それに、セルに表示するときのロスが多少ありますので、100分の1のタイム自体をExcelで計るのは無理だと思います。

だから、
 If TimeDiff Mod 1000 = 0 Then  ~ End If
 
などを使って表示を遅らせたりします。以下は、標準数値です。時間表示ではありません。


Private Declare Function GetTickCount Lib "kernel32" () As Long

Sub TimeCountCheck()
Dim StarTime As Long
Dim TimeDiff As Long
Dim TimeLimit As Long

TimeLimit = 10 '10秒 間
TimeLimit = TimeLimit * 1000
 StartTime = GetTickCount
 Do
  DoEvents
  TimeDiff = GetTickCount - StartTime
  Cells(1, 1).Value = TimeDiff / 1000
 Loop While TimeDiff < TimeLimit
End Sub
    • good
    • 1
この回答へのお礼

丁寧な回答ありがとうございました。いろいろ試してみます

お礼日時:2006/12/07 09:02

こんばんは。



> VBAで下記のようにしていたのですが、ミリ秒まで取得していなかったと
> 言うことですね。

NOW も Timer もミリ秒まで取得できます。実験用サンプルコードです。
ご参考までに。

' API タイマー関数
Declare Function timeGetTime Lib "winmm.dll" () As Long

' // 現在時刻を10ミリ秒単位で A1 セルに表示
Sub TimerSample1()

  ' ※終了するには、[ESC]キーか、[Ctrl]+[Pause] です
  ' 補足:timeGetTime 関数は一番条件の良い環境でも最短15ミリ秒
  '   :程度のインターバルなので、信頼できるのは100ミリ秒単位です。
  
  Const INTERVAL = 10
    
  With Cells(1, 1)
    .NumberFormat = "h:mm:ss.00"
    .Formula = "=NOW()"
    ' 無限ループ(表示の更新間隔は INTERVAL ミリ秒)
    Do
      .Calculate
      Call Wait(INTERVAL)
    Loop
  End With

End Sub

' // ウェイト処理
Private Sub Wait(ByVal Milisecond As Long)
  Dim t As Long
  t = timeGetTime() + Milisecond
  While t > timeGetTime()
    DoEvents
  Wend
End Sub

ちなみに、このマクロを実行するとセル編集中でもマクロが実行できるのが
わかります。

以下は、参考情報です。

・Timer 関数
 Excel(VBA) 標準のタイマー関数で、0 時からの経過時間をミリ秒で返す。
 戻り値は Single 型。

 ヘルプには「午前 0 時 (真夜中) から経過した秒数を表す...」と記載
 されてますが、実際にはミリ秒です。

・GetTickCount、timeGetTime
 API のタイマー関数で、Windows 起動時からの経過時間をミリ秒で返す。
 戻り値は Long 型。

使ってみると分かりますが、VBA のTimer 関数は非常に使い難いです。
なぜなら...

 ・0 時で自動リセットΣ(゜д゜lll)え?....

それで、VBA でも時間計測処理などは API のタイマー関数が良く使われます。

なお、VBA の Timer 関数を含め、これらのタイマーはいずれも最短1ミリ秒の
インターバルとされてますが、実際には15ミリ秒程度の精度です。
    • good
    • 0
この回答へのお礼

丁寧なご教授ありがとうございました。まだまだ勉強不足です。いろいろ試してみます。

お礼日時:2006/12/07 09:03

任意のセルに =NOW() と入力して、書式を「h:mm:ss.00」にしてF9(再計算)を押下すると


 10:29:35.84
のように表示されるはずです。(秒未満は1/100秒刻みです)

タイマーをどのように作られたか分かりませんが、VBAの Timeでは秒単位までしか取得できません。ミリ秒単位で時間を取得するにはWindow APIのGetTickCount関数やtimeGetTime関数を使用します

サンプルは検索すれば色々と出てきます

この回答への補足

早速の回答ありがとうございます。
VBAで下記のようにしていたのですが、ミリ秒まで取得していなかったと言うことですね。
Sub スタート時刻の設定()
Range("b2").Activate
ActiveCell.Value = Now()
End Sub

VBAでのGetTickCount関数等の使い方を具体的にご教授願えませんか?
よろしくお願いします。

補足日時:2006/12/06 11:09
    • good
    • 0

セルの書式設定をユーザー定義で


[s].00"秒"
としてください。

この回答への補足

早速の回答ありがとうございます。秒のところは表示しますが、コンマ以下が「00」のままです。

補足日時:2006/12/06 10:01
    • good
    • 0

セルの書式設定で「ユーザー定義」で「0.00"秒"」では駄目ですか?

    • good
    • 0

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