許せない心理テスト

http://www.excellenceweb.net/vba/api/what_window …
のページを参考にPC起動時間を取得したいのですが
サンプルは単位がミリ秒になっています。

--------------------------------------------------
Declare Function GetTickCount Lib "kernel32.dll" () As Long

Sub TEST1()
Dim Tickcount As Long
'GetTickCount関数から、起動からの時間が返される
Tickcount = GetTickCount()
MsgBox "PC起動から " & Tickcount & " ミリ秒経過しています"
End Sub
--------------------------------------------------
○時間○分○秒にしたいのですが
どうすればいいでしょうか?

Formatを使うと思うのですが
どういうコードを書けばいいのかわかりません。

ご教授よろしくお願いします。

A 回答 (7件)

MsgBox CStr(CInt(DateAdd("s", Tickcount, 0))) & "日と" _


& Format(TimeValue(DateAdd("s", Tickcount, 0)), "hh時間nn分ss秒")
に差し替えてください。
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/02/22 00:02

こんなのとか




Declare Function GetTickCount Lib "kernel32.dll" () As Long

Sub TEST1X()
Dim Tickcount As Long
'GetTickCount関数から、起動からの時間が返される
Tickcount = GetTickCount() / 1000
MsgBox CLng(DateAdd("s", Tickcount, 0)) & "日と" & TimeValue(DateAdd("s", Tickcount, 0))
End Sub
    • good
    • 0
この回答へのお礼

できました。ありがとうございました。

お礼日時:2012/02/22 00:02

#3で間違えたって書いたんですけどねえ。


それから、C言語のlocaltime関数は呼び出し規約が__cdeclだから、VBAから呼び出せませんよ。
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/02/22 00:02

GetLocalTime は時刻を返す関数ですから、時間を計算するのはかえって面倒になりますよ。


C言語の localtime 関数なら秒から時刻に変換できます。ミリ秒から変換する必要がありますが。

確かに一般に、誰でも使う機会がある機能を再発明するのはよくないとされていますが、この場合は当てはまらないでしょう。
正直に言って、プログラミングの勉強の前に小学校の算数をやり直すことをお勧めします。
    • good
    • 0
この回答へのお礼

ありがとうございました。数学の勉強からし直します。

お礼日時:2012/02/22 00:02

GetLocalTimeじゃなくて、GetSystemTimeの誤りでした、大変失礼。


ただ、残念ながら、どちらを使っても無理みたいですねえ。
MSDNを見た限りでは、GetTickCountのミリ秒から時分秒に変換できるAPIは無いようです。
自力で変換するしかないと思います。VBの割り算は四捨五入なのでFix関数を通さないと計算結果が狂うみたいです。
とりあえず、これで出来ませんかね。因みに、Microsoft Office Excel 2007 VBAで試してます。

Declare Function GetTickCount Lib "kernel32.dll" () As Long

Type HMS

h As Long
m As Long
s As Long

End Type

Sub MS2HMS(ByRef r As HMS, ByVal tick As Long)

tick = tick / 1000
r.h = Fix(tick / 3600)
r.m = Fix((tick - (r.h * 3600)) / 60)
r.s = tick - ((r.h * 3600) + (r.m * 60))

End Sub


Sub TEST1()
Dim Tickcount As Long
Dim result As HMS
'GetTickCount関数から、起動からの時間が返される
Tickcount = GetTickCount()
MS2HMS result, Tickcount
MsgBox "PC起動から " & Tickcount & " ミリ秒経過しています"
MsgBox "" & result.h & " 時 " & result.m & " 分 " & result.s & " 秒 "
End Sub
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/02/22 00:02

GetTickCountじゃなくて、GetLocalTimeだったら一発で取得できて変換の必要はないと思うんですが、駄目なんですかね。



http://wisdom.sakura.ne.jp/system/winapi/win32/w …
http://msdn.microsoft.com/ja-jp/library/cc429760 …
    • good
    • 0
この回答へのお礼

がんばってみます。有難うございます。

お礼日時:2012/02/18 18:09

専用のAPIは無いかということ?


あるかもしれないけど、小学生でもわかる計算だし、探すより自分で計算したほうが早いのでは。
    • good
    • 0
この回答へのお礼

計算が難しいんです・・・

お礼日時:2012/02/18 18:08

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


おすすめ情報