dポイントプレゼントキャンペーン実施中!

VBAで現在時刻を取得する時は秒以下は取得できないですか?

Sub Nowを取得する()
Debug.Print Now
End Sub

だと、秒までしか取得できません。
APIなどを使えば秒以下の取得は可能でしょうか?

A 回答 (3件)

>Debug.Print Now


必要がなかったので、考えてもみなかったのですが、確かに、

Sub Test1()
Dim myDate As Date
Dim myTime As Date
Dim ret As Double
ret = Time
MsgBox Format(ret, "hh:nn:ss.000")
End Sub

これでは、秒以下の数字は取れないようですね。確か、ワークシート側には、秒以下の表示はあったはずです。

以下のような、Win32 APIは、マニアックな世界なので、あまりお勧めしませんが、GetLocalTime を使って、以下のようにしてみたらいかがですか?実際は、秒以下そのものを用いるというよりも、自家製イベントなどに用いたりすることになるのでしょうから、その場合は、劇薬ですから、くれぐれも慎重にお使いください。

'//標準モジュール
Private Declare Sub GetLocalTime Lib "kernel32" (lpSystem As SYSTEMTIME)
Private Type SYSTEMTIME
   wYear     As Integer
   wMonth     As Integer
   wDayOfWeek   As Integer
   wDay      As Integer
   wHour     As Integer
   wMinute    As Integer
   wSecond    As Integer
   wMilliseconds As Integer
End Type
Private sysLocalTime As SYSTEMTIME

Sub Test2()
 GetLocalTime sysLocalTime
 MsgBox sysLocalTime.wHour & ":" & _
 sysLocalTime.wMinute & ":" & _
 sysLocalTime.wSecond & ":" & _
 sysLocalTime.wMilliseconds
End Sub
    • good
    • 0
この回答へのお礼

どうもありがとうございました。

お礼日時:2012/10/22 21:09

3.4 1/1000秒単位の時間を取得


http://www.happy2-island.com/excelsmile/smile04/ …
時間を取得するときは、VBAのTime関数(※)で取れますが、Time関数で取得できるのは1秒単位です。ゲームを作る場合には「0.02秒毎に…」や「アニメーションの間隔は1.57秒」など1/100秒単位の制御をすることが多いのでTime関数では物足りません。
こんな場合(1/1000秒を取得したい場合)は、APIのGetTickCount関数、またはtimeGetTime関数を使います。ちなみに、この関数で取得できる値はWindowsが起動してから何ミリ秒経過したかという値です。
GetTickCount関数、またはtimeGetTime関数は、どちらを使ってもほとんど同じ情報を取得できますが、推奨はGetTickCount関数です。
また、これらの関数では一応1/1000秒までの時刻を取得できますが、1/1000の位はかなりいい加減なので、基本的には1/100秒単位の時間を計るときに使うと考えてください。
--------------------------------------------------------------------------------
※Timer関数という関数で1/100単位の時間を取得できますが、日付が変わるたびに0に戻るという性質上から省略しています。なお、GetTickCount関数、またはtimeGetTime関数は、Windows起動から50日弱は0に戻りません。
GetTickCount関数を定義する
API「GetTickCount関数」または「timeGetTime関数」を使うときですが、まずはこの関数がどこにある、どんなヤツなのかなど、この関数を使うための準備(宣言)を行います。
この関数を使うときは、標準モジュールを準備し(General)(Declarations)の所へ次のように記述します。なお、標準モジュールの追加方法はエクセルスマイルの「4.マクロを書く場所/標準モジュール」をどうぞ。
'標準モジュールの(General)(Declarations)へ記述します
Declare Function GetTickCount Lib "kernel32" () As Long
Declare Function timeGetTime Lib "winmm.dll" () As Long
 ※このエクセルマクロは標準モジュール内へ記述するマクロです
簡単に説明すると、DeclareはDLLの中にある関数を呼び出すときに付ける物で、Functionは関数の宣言、次が関数名(GetTickCountまたはtimeGetTime)、Libで関数の居場所を指定します。居場所には、GetTickCountにはkernel32を、timeGetTimeにはwinmm.dllを指定してください。なお、これらの関数の戻り値はLong型です。
    • good
    • 0
この回答へのお礼

どうもありがとうございました。

お礼日時:2012/10/22 21:09

キーワードを「VBA FORMAT 書式 ミリ秒(1/1000秒)を求める」で検索すると


サンプルを公開なさってるWebページが見つかります。
    • good
    • 0
この回答へのお礼

どうもありがとうございました。

お礼日時:2012/10/22 21:08

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

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