
No.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
No.2
- 回答日時:
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型です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VB.NETで DataRow()を利用して...
-
データ数をカウントしたいのですが
-
count(*)で取得した値をJAVAの...
-
Spreadの選択行の取得について
-
動的SQLのCOUNTのとり方
-
エクセルVBAで複数選択できるよ...
-
C#でネットワーク(LAN)上のPC...
-
ListView 項目の選択/選択解除...
-
PHP8でWarning:Undefined varia...
-
リストビューに条件による表示
-
システム日付の表示方法
-
別フォームのスプレッドの内容...
-
利用者側のMACアドレスを取得し...
-
getParameter と getAttribut...
-
like演算子内に変数って使えな...
-
VBA:小数点以下の数字を取得で...
-
エクセルVBAで範囲内での位置取...
-
RegQueryValueExwでエラー
-
「Excel VBA」 Webクエリ マク...
-
javaで週の最初の日(例:月曜日...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB.NETで DataRow()を利用して...
-
PHP8でWarning:Undefined varia...
-
count(*)で取得した値をJAVAの...
-
ListView 項目の選択/選択解除...
-
VBAでActiveDirectoryのユーザ...
-
VBA:小数点以下の数字を取得で...
-
JSP+Servletでのページングの常識
-
データ数をカウントしたいのですが
-
Flexgridで選択行の列の値を取...
-
利用者側のMACアドレスを取得し...
-
getParameter と getAttribut...
-
like演算子内に変数って使えな...
-
JavaScriptにおいてコンピュー...
-
郵便番号検索APIにてget Elemen...
-
DataGridView 複数選択で行番...
-
URIでのページの移動について
-
Spreadの選択行の取得について
-
指定のURLのタイトルを取得...
-
EXCELのリストボックスを選択し...
-
ListViewで複数選択された項目...
おすすめ情報