- ベストアンサー
Excel コンマ以下の秒を表示したい
いつもお世話になっております。 エクセルでタイマーを作っているのですが、セルの書式設定の時刻だと何秒までしか表示できません。その次のコンマ以下(例 3.56秒)を表示させたいのですが どうすればいいか教えて下さい。 よろしくお願いします。
- みんなの回答 (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
その他の回答 (4)
- KenKen_SP
- ベストアンサー率62% (785/1258)
こんばんは。 > 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ミリ秒程度の精度です。
お礼
丁寧なご教授ありがとうございました。まだまだ勉強不足です。いろいろ試してみます。
- zap35
- ベストアンサー率44% (1383/3079)
任意のセルに =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関数等の使い方を具体的にご教授願えませんか? よろしくお願いします。
- mshr1962
- ベストアンサー率39% (7417/18945)
セルの書式設定をユーザー定義で [s].00"秒" としてください。
補足
早速の回答ありがとうございます。秒のところは表示しますが、コンマ以下が「00」のままです。
- nanndemoii
- ベストアンサー率39% (106/267)
セルの書式設定で「ユーザー定義」で「0.00"秒"」では駄目ですか?
お礼
丁寧な回答ありがとうございました。いろいろ試してみます