今、卒研でVBを使ってよるのですが、そのプログラミングで悩んでいます。
タイマーを使って時間を取得しようと思い、パソコン画面右下の時間表示から取っているのですが、そうすると時間、分は表示できるのですが秒までは表示できません。
このやり方で秒まで表示できませんか?
違った方法でもVBを使って秒まで表示できるプログラミングがあったら教えてください。

VBを使って10分の1秒単位での時間の取得はできませんか?
できたら2つのフォームにまたがって同じタイマーを使用したいのですが、何か方法はありませんか?
すみません。
お願いします。

このQ&Aに関連する最新のQ&A

A 回答 (10件)

蛇足ながら補足です。



WindowsAPIで細かい時間を取得するには
GetTickCount()と既に出ているマルチメディアタイマーが
あります。
両方とも、Windowsが起動されてからどれくらい経過したか?
をms単位で返します。
(だから現在時間を知るには役に立ちません)

一般的に正確なのはマルチメディアタイマです。
GetTickCountはWin95/98では55ms単位でしか解りません。
NTなら、マルチメディアタイマと一緒で正確です。

しかしマルチメディアタイマも
BeginTimePeriodを呼び出してからでないとそんなに正確じゃありません。

詳細はMSDNをどうぞ。
引数なしの関数で、DWORDを返すだけですから
VBからでも気軽に呼び出せます。
    • good
    • 0

 んとねぇ私が気にしているのは...。


 もし、使い方が、『機器制御で”正確に10分の1秒”単位で時刻が欲しい』って事だと、使うべきAPIが変って来るって思っただけです。

 また、10分1秒単位(100ミリ秒単位)で、時刻が欲しいって事だとGetLocalTimeよりも、Timerオブジェクトのイベントで100ミリ秒を指定してイベントを待った方がよいのかなぁって思ったのです。

 後は、時刻表示を100ミリ秒単位で行うって事も考えましたが...。

 っとまぁいろいろ場面が想定出来るので、まずは何に使用したいのが知りたいのですよね。


 そんでぇマルチメディアタイマーとは...(ちょっと説明が長くなりますが)
 通常のWindowsAPI(SetTimer()関数 - 最高で1/18秒単位)よりも高精度と制御性能(ミリ秒単位)で大枚ベントをスケジュール出来るAPI群
 但し、単純に現在時刻が欲しい場合には適しません。
    • good
    • 0

mnabeさまの


>精度が低くなります
・・・ご本人も10分の1秒と言っているし、そのコンピュータが正確な時間を刻んでいるとも限らないから、勘弁してくださいな。
ところでそのマルチメディアタイマーとは何者?

ってこんなところで質問しちゃっていいのかな。
    • good
    • 0

> yoshiozさん、Nowはステートメントではなく関数ですよ。


でしたぁ♪
    • good
    • 0

haporun 様の回答への補足です。



 GetLocalTime で取得出来る値は、1000分の1秒までは取得できますが、実際に動作させるパソコンの性能に依存して、100分の1秒以下の値は不正確な値になってしまします。且つ、VBで作成されたモジュールの場合には、100ミリ秒以下は精度が低くなります。

 同じタイマーを使用したいとの事ですが、タイマーでイベントが欲しいとか、100ミリ秒単位に何かの機器の制御がしたいとか...なると、GetLocalTimeではちょっと処理が難しくなります。
 何をしたいのかをもう少し補足下さい。

 ちなみに、マルチメディアタイマーを使用すれば、VBでもある程度の精度でタイマを取得する事が出来ます。
    • good
    • 0

VBだけではおそらくムリです。


APIのGetLocalTimeという関数を使うと、1000分の1秒単位で取得できます。
--------------------------------------
Public 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

Public Declare Sub GetLocalTime Lib "kernel32" Alias "GetLocalTime" (lpSystemTime As SYSTEMTIME)
--------------------------------------

を標準モジュールの最も上に貼り付けると、この関数は使えるようになります。

例:
--------------------------------------
Dim ST As SystemTime
GetLocalTime ST
MsgBox ST.wSecond + ST.wMilliseconds / 1000
--------------------------------------
などとやれば、現在の秒が1000分の1単位でわかります。
    • good
    • 0

なんだかみなさん、同時に同じ質問に飛びついてしまいましたね。


運良く私が1番目だったようで。
yoshiozさん、Nowはステートメントではなく関数ですよ。
mnabeさん、mm:dd:ssでは月:日:秒になってしまうのでは?
    • good
    • 0

よく見えないのですが...単純に



Format$(Now, "mm:dd:ss")

で、文字列で現在時刻の”時分秒”を取得できます。
    • good
    • 0

現在の時分秒を持ってきたいだけなんですよね?


そしたらNowステートメントを使うとDate型で
今日の日付から時分秒まで返ってくるので
それを使えばいいと思います。
ためしにイミディエイトで「?Now」と
入力してEnterキーを押してみてください。
    • good
    • 0

すみません、なんだかおっしゃる事が理解できないのですが。


タイマーというのはタイマーコントロール?
右下の~はタスクバーの時計?

タスクバーの時計の表示方法を変えるソフトはあります。
プログラムのソースも公開しているそうです(Cでしょうが)。

時間を取得したいだけなら、Now関数を使えばよいのでは。
Format(Now, "hh:mm:ss")などとやれば、秒まで含んだ時間の文字列が出来上がります。

何か私が見当違いなことを言っているようなら、補足ください。

参考URL:http://homepage1.nifty.com/kazubon/tclock/indexj.html
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qタイマーに時差をつけたい

こんにちは。

タイマーAとタイマーBがあって、タイマーA実行の後
時差(例:0.1秒)でタイマーBを動かす方法を教えてください。
よろしくお願いします。

Aベストアンサー

タイマーCを使ってタイマーA開始0.1秒後にタイマーBを開始する

Qミリ秒を○時間○分○秒にしたい

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

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

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

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

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

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

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

Sub TEST1()
Dim Tickcount As Long
'GetTickCount関数から、起動からの時間が返される
Tickcount = GetTickCount()
MsgBox "PC起動から " & Tickcount & " ミリ秒経過しています"
End Sub
---------------------...続きを読む

Aベストアンサー

MsgBox CStr(CInt(DateAdd("s", Tickcount, 0))) & "日と" _
& Format(TimeValue(DateAdd("s", Tickcount, 0)), "hh時間nn分ss秒")
に差し替えてください。

Qデロンギオイルヒーターのタイマーの故障

デロンギのオイルヒーターの本体についているスイッチON・OFFをするための赤い棒を上げ下げするタイマーが故障して、常にスイッチON状態になりました。そこで電源タイマーにコンセントをさして使おうかと思うのですが、その際本体に悪影響はないでしょうか?また、電源タイマーで時間の狂いにくいのはどれでしょうか?
タイマーの修理はお金がかかると思うので電源タイマーで代用したいのです。

Aベストアンサー

No.2の方に補足ですが、
デロンギのオイルヒータと同じ24時間タイマーの製品もあります。
WH3301WPなど。
これは、別の電気ヒータのサービス品として使われているもので、
オイルヒータにも使えると思います。

また、デジタル式としては、
REVEX デジタルプログラムタイマー PT60D
というのが、Amazonにレビューが書いてありました。
抵抗負荷(ヒータ)で1500WはOKと思われます。

ご参考まで

参考URL:http://ctlg.national.jp/product/info.do?pg=04&hb=WH3301WP

Q●分●秒 時間 表示形式

時間を取得するコードを使っていますが

Declare Function timeGetTime Lib "winmm.dll" () As Long

Sub Sample()
Dim nStart As Long
Dim nEnd As Long

nStart = timeGetTime()


nEnd = timeGetTime

Debug.Print (CDbl(nEnd) - CDbl(nStart)) / 100 & "秒"
End Sub


これだと結果が、
11607271.9221569秒
秒になってしまいました。

●分●秒で取得したいのですが、
どのような書式にすればよいですか?

Aベストアンサー

timeGetTime関数を使用するのなら戻り値はミリ秒(1/1000)ですから1000で割らないと秒になりません。
また、秒以下を切り捨てていいのならダブル型へのキャストも不要です。

Sub Sample()
  Dim nStart As Long
  Dim nEnd As Long
  Dim nTime As Long

  nStart = timeGetTime()
   ・・・
   ・・・
   ・・・
  nEnd = timeGetTime
  nTime=(nEnd - nStart)/1000

  Debug.Print nTime \ 60 & "分" & nTime Mod 60 & "秒"
End Sub

Qオイルヒーター用後付タイマー

タイマー無しのオイルヒーターをタイマー制御したいのですが
ホームセンターなどで販売しておる
タイマー 1000円から4000円ぐらいまでのもの
すべてにオイルヒーターには使用できませんとの記述があります。
オイルヒーターにもつかえるタイマーはございませんでしょうか?

Aベストアンサー

オイルヒーターは最大1500W(15A)も消費する製品です。
ヒーター使用中に電源コードをさわると微熱を持つのが判ると思います。
電源コードは当然抵抗値が小さいのですが、15Aという電流はそれでも熱するほどの大電流です。


簡素なタイマーで15Aも流すと内部が発熱して溶解、発火の原因となります。
1500Wまで対応を謳ったタイマーでなければなりません。

一応1500Wに対応した製品を紹介します。
 デジタルプログラムタイマーII グレーPT50DG
 http://www.amazon.co.jp/dp/B002YWD0ZE

アマゾンのレビューでもオイルヒーターに利用している方がいるようです。

Q【VB】現在の時間に10秒足して表示したい

お世話になっています。

大変基本的な質問で申し訳ありません。
time関数についてあまり理解ができていないのです。

表題通りに表示するには、Time関数は少数値を持っているので
label1.caption=TIME+10
のように単に10を足しただけではでたらめな数値になります。

目的通りにするにはどういう式にしたらいいのですか?
よろしくお願いします。

Aベストアンサー

time + timeserial(0,0,10)

Qキッチンタイマーについて

キッチンタイマーについて教えてください。

複数の料理を並行して行う時にどうしてもタイマーが一つでは足りない場合があるのですが、複数の時間を設定できるタイマーって売っていますか?

例:10分後と20分後・40分後と1つのタイマーで複数の時間設定ができるものを探しています。

もしそのような商品がありましたら、教えてください。
キッチンタイマーでなくても複数設定できるものでしたら教えてください。

宜しくお願いします。

Aベストアンサー

下記にようなタイマーがありますよ。

タイマー3つ設定
http://www.amazon.co.jp/dp/B0002ZLCNM/ref=nosim/?tag=biglobe06-src-link-22&linkCode=as1

タイマー2つ設定
http://www.amazon.co.jp/s/ref=nb_ss_k?__mk_ja_JP=%83J%83%5E%83J%83i&url=search-alias%3Dkitchen&field-keywords=T-177BK&x=19&y=16

Qカウントダウンタイマーでのタイマーの表示方法

VBを始めたばかりなです。
プログラムで-していく、カウントダウンタイマーを作成したのですが、1:30と設定すると90秒表示となり、どうしても01:30という分と秒の表示が出来ません。
カウントされる数字が、何分何秒という表示にさせる方法を教えて下さい
表示のプログラムは以下の通りです。
hyouji.Text = Format(waitsecond, "##:##")
※hyouji.textはタイマーを表示させる部分の名前です。

Aベストアンサー

Format(waitsecond,"##:##")ですと 単に数値を桁あわせするだけです
1:30 1:29 といった形で表示するなら waitSecondを DateTime型に変換して 書式を"mm:ss"といった具合にして見ましょう
hyouji.Text = Format(TimeSerial(0,0,waitsecond), "mm:ss")

Qテレビをオンタイマーでつけたい。

家に2台(リビング・寝室)テレビがあるのですが、
配置を変えようと思います。

現在、寝室に置いてあるテレビはオン&オフタイマー付のもので
リビングのものには、オフタイマーしかありません。
メーカーは、どちらも同じなのですが・・・(関係ないですね。)

このオンタイマーの付いていないテレビを
オンタイマーでつける方法は、ないでしょうか?

オンタイマーでテレビが朝つかないと起きれないのです。。。

宜しくお願いします。

Aベストアンサー

>コンセントにつなぐタイマー類を使うときには、
寝るときは、テレビを消して布団に入らないといけないのでしょうか??

オンオフを何種類も設定できるので付けておいても大丈夫ですよ。

QVB6.0でMSChartをタイマーを使い徐々にグラフを伸ばしたい。

VB6.0でMSChartをタイマーを使い徐々にグラフを伸ばしたいのですが、上手くいきません。コマンドボタンを使いクリックしたと同時にタイマーを作動させて、ある値までグラフを増加させたいと思っているのですが、初心者同然なので詳しくお願いします。
Dim dat(4, 3) As Integer
Dim a As Long

Private Sub Command1_Click()
With MSChart1
.chartType = VtChChartType3dBar
.ColumnCount = 3
.RowCount = 4

For i = 1 To .RowCount
For j = 1 To .ColumnCount
.Column = j
.Row = i
.Data = dat(i, j)
Next j
Next i
.DataGrid.ColumnLabel(1, 1) = "(1)"
.DataGrid.ColumnLabel(2, 1) = "(2)"
.DataGrid.ColumnLabel(3, 1) = "(3)"
.DataGrid.RowLabel(1, 1) = "1月~3月"
.DataGrid.RowLabel(2, 1) = "4月~6月"
.DataGrid.RowLabel(3, 1) = "7月~9月"
.DataGrid.RowLabel(4, 1) = "10月~12月"
.Visible = True
End With

Timer1.Enabled = True

End Sub

Private Sub Form_Load()
a = 0
MSChart1.Visible = False

End Sub

Private Sub MSChart1_OLEStartDrag(Data As MSChart20Lib.DataObject, AllowedEffects As Long)
End Sub

Private Sub Timer1_Timer()
a = a + 10
dat(1, 1) = a: dat(1, 2) = 100: dat(1, 3) = 110
dat(2, 1) = 30: dat(2, 2) = 110: dat(2, 3) = 110
dat(3, 1) = 40: dat(3, 2) = 120: dat(3, 3) = 110
dat(4, 1) = 50: dat(4, 2) = 130: dat(4, 3) = 110

If a = 100 Then
Timer1.Enabled = False
End If
End Sub

VB6.0でMSChartをタイマーを使い徐々にグラフを伸ばしたいのですが、上手くいきません。コマンドボタンを使いクリックしたと同時にタイマーを作動させて、ある値までグラフを増加させたいと思っているのですが、初心者同然なので詳しくお願いします。
Dim dat(4, 3) As Integer
Dim a As Long

Private Sub Command1_Click()
With MSChart1
.chartType = VtChChartType3dBar
.ColumnCount = 3
.RowCount = 4

For i = 1 To .RowCount
For j ...続きを読む

Aベストアンサー

データセットがボタンを押した時になってました。

一定間隔でグラフを伸ばすのであれば、
定期間隔でのイベント=タイマーイベント
で行うべきです。

ちょっと改造してみました。

Dim dat(4, 3) As Integer
Dim a As Long

Private Sub Command1_Click()
  'チャート初期設定
  With MSChart1
    .chartType = VtChChartType3dBar
    .ColumnCount = 3
    .RowCount = 4

    .DataGrid.ColumnLabel(1, 1) = "(1)"
    .DataGrid.ColumnLabel(2, 1) = "(2)"
    .DataGrid.ColumnLabel(3, 1) = "(3)"
    .DataGrid.RowLabel(1, 1) = "1月~3月"
    .DataGrid.RowLabel(2, 1) = "4月~6月"
    .DataGrid.RowLabel(3, 1) = "7月~9月"
    .DataGrid.RowLabel(4, 1) = "10月~12月"
    
  End With
  
  'タイマー起動
  Timer1.Enabled = True
End Sub

Private Sub Form_Load()
  a = 0            'タイマカウンタ初期化
  MSChart1.Visible = False  'チャート不可視
  Timer1.Enabled = False   'タイマー使用不可
  Timer1.Interval = 1000   '1000ms(1秒)ごとに更新
End Sub

Private Sub Timer1_Timer()
  Dim i  As Long
  Dim j  As Long
  
  'セットする値の作成
  a = a + 10
  dat(1, 1) = a: dat(1, 2) = 100: dat(1, 3) = 110
  dat(2, 1) = 30: dat(2, 2) = 110: dat(2, 3) = 110
  dat(3, 1) = 40: dat(3, 2) = 120: dat(3, 3) = 110
  dat(4, 1) = 50: dat(4, 2) = 130: dat(4, 3) = 110

  With MSChart1
    'データセット
    For i = 1 To .RowCount
      For j = 1 To .ColumnCount
        .Column = j
        .Row = i
        .Data = dat(i, j)
      Next j
    Next i
    
    'もし不可視なら表示する
    If Not .Visible Then
      .Visible = True
    End If
    '更新した値を画面に反映
    .Refresh
    

  End With
  
  If a = 100 Then
    Timer1.Enabled = False
  End If
End Sub

データセットがボタンを押した時になってました。

一定間隔でグラフを伸ばすのであれば、
定期間隔でのイベント=タイマーイベント
で行うべきです。

ちょっと改造してみました。

Dim dat(4, 3) As Integer
Dim a As Long

Private Sub Command1_Click()
  'チャート初期設定
  With MSChart1
    .chartType = VtChChartType3dBar
    .ColumnCount = 3
    .RowCount = 4

    .DataGrid.ColumnLabel(1, 1) = "(1)"
    .DataGrid.ColumnLabel(2, 1) = "(2)"
 ...続きを読む


人気Q&Aランキング

おすすめ情報