- ベストアンサー
エクセルのセルに時計表示するには?
パソコンのシステム時計を使って、エクセルの1つのセルにリアルタイムに時刻を表示させる方法を教えてください。 システム時計でなくても、インターネットから標準時を取り込む方法でも良いと思います。 リアルタイムの時刻をエクセルのデータのひとつとして使いたいのです。 よろしくお願いします。
- みんなの回答 (14)
- 専門家の回答
質問者が選んだベストアンサー
追伸です。 # VRAMメモリのバッファの関係や仮想メモリの問題で、表示の問題は、PCの環境の問題ではないかと思います。 もう少し説明すると、Excelのワークシートに毎秒書き込むという作業そのものが負担なのです。こちらでは、その違いが分りませんが、ユーザーフォームではなく、例えば、ラベルやExcelのApplication.Caption を使うなどして、あまり、下位のRangeオブジェクトのプロパティにアクセスすることを避けるのがよいかもしれません。Rangeオブジェクトは、複合的な存在なのですね。
その他の回答 (13)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。Wendy02です。 >(A,1)の表示が2秒ごとに進むという不具合が目立ちます。 残念ながら、VRAMメモリのバッファの関係や仮想メモリの問題で、表示の問題は、PCの環境の問題ではないかと思います。 おそらく、それ自体は、セル上ではどうしようもないことのような気がします。秒を表示するのは多少無理があります。しかし、私の環境のCRTでは、そういう現象は出てこないのです。おそらく、ユーザーフォーム上で処理すれば、解決するのではないかと思います。(保証はいたしません)コード自体は同じですから、後は、ユーザーフォームに移植すれば、表示自体は楽になると思います。ただし、記録自体は、ワークシートが良いかもしれません。 完全な正確性をお考えになるようでしたら、C++ など、直接 Windowsのシステムから取れるものにするか、Visual Basic .NET などのほうがよいと思います。とても、Excelなどの重装備のオブジェクトを持っているソフトウェアでは不可能だと思います。書き入れたときに、わずかですが、表示が阻害されます。 >左辺 StartCell.Offset(, lngCount).Value のOffset中に左記のように ( , )を加え>ました。 >それでも3回目の表示データ以後は、差分の差分が加算されて表示されているようです。 横型でしたら、 StartCell.Offset(, lngCount).Value = Range("A2").Value - WorksheetFunction.Sum(Range(StartCell, StartCell.Offset(, lngCount))) 例: A2の表示は 「12 」 時系列→ 10 0 1 1 0 >Option Explicit など 他にも分からないことがまだまだいっぱいあります。 Explicit の意味は、明示的という意味です。つまり、明示的に型の宣言をしています、ということです。 >例えば Call TimerRefresh を始めとする特殊な時間関数の意味や使い方など、インターネット上のどこかで参考にできるようなページがあるのでしょうか? もう、ここらのレベルでは、たまたま誰かが掲示したということでないと、Webで参考になるページはないはずです。少し掘り下げたものは、ほとんどインターネットではヒットしません。地道に本で勉強するしかないと思います。 >1台のパソコンで4方向の交通量が同時に自動測定記録できれば、大幅に効率向上できます。 これは、保留です。 今でも、表示系で重いようですから、なかなか、問題が多いような気がします。 ただ、繰り返しますが、多少、無理が見えてきました。 もう一度、大幅な変更をすべきか、迷うところです、API関数を使用して、システムから時間を取るべきか、なんとも言えませんが、ワークシート上から、ユーザーフォームに変えたほうがよいかもしれません。
お礼
追伸まで含めて、早速、詳しくご回答いただき、たいへんありがとうございます。 恐縮に存じますが、補足説明を読んでいただいてもう一度ご教示いただけると幸いです。 よろしくお願いします。
補足
早速、詳しくご回答いただき、たいへんありがとうございます。 差分の横型表示はうまくいきました。 初心者が苦心してもこんがらがって解決できなかったのに、簡単に解けてしまうとは ”さすがVBAの有段者!” と感心いたします。 初心者の私には、まだまだエクセルVBAの奥深さなど窺い知ることはできませんが、今回の質問テーマ(リアルタイム時刻の表示とその応用処理)は、そのエクセルVBAにとっても負担が重く感じられるものであるとご指摘いただいているようです。 ここまで教えていただいた内容だけでも大進歩で、今後、この内容を実際に利用・応用できるように進めたいと思っています。 実際問題として交通量把握の上で重要なことは、1秒ごとの通過台数や通過台数の変化を正確に求めることではなく、 例えば5分あるいは10分程度ごとの交通量やその変化の様子が掴めれば、目的は十分に達成できます。 このとき、1方向(箇所)だけの測定より、例えば4方向(4箇所)同時に自動測定・記録できれば、格段に効率が向上します。 そこで、前回の補足質問として記入した 「ひとつの測定用基準時間を用い、各4方向ごとの合計通過台数の入力データ(これまでの(A2)セルのデータに相当)がそれぞれ(B3)(B4)(B5)(B6)に並べて表示されるときに、各測定インターバルごとの差分通過台数をそれぞれ(C3)(C4)(C5)(C6)から始まって横方向に100個まで表示させる方法」 を是非実現したいと思っています。 どれがもっともふさわしいのかまだ分かりませんが、「For … Next」 や 「if … Then Else 」 などのステートメントを組合わせれば、同じ処理を4回実行させるのはできないことではないと思っていますが、単純すぎるでしょうか? せっかくここまでできているのですから、このままの状態にしておくのでは本当にもったいないと思います。 私もこの4回処理の実現に挑戦したいと思いますが、何せまだまだ初心者なものであちこちで躓き続け、結局出口が分からないということに至る可能性大です。 もしWendy02さんがこの4回処理の方法について、ご検討していただけるなら、たいへんありがたいことだと思います。 なお、1秒ごとの表示が2秒ごと表示になってしまう問題についは、表示上だけの問題であり、極端に言えば現状表示であっても用は十分に足りています。 また別のパソコンで実行すれば解決しているのかもしれません。 また、時間は刻んでも表示は隠したり、「時間計測中」などの表示で代用することも可能だと思っています。 以上勝手なお願いで、たいへん恐縮ですが、できれば11月4日ご教示のモジュールと11月10日ご教示の差分の横型表示の内容を組合わせたものを元にして、 4回繰返し処理をさせるVBAについて、もう1度お知恵を拝借できればたいへんありがたいと思っています。 よろしくお願いします。
- Wendy02
- ベストアンサー率57% (3570/6232)
kinseiさん、こんにちは。Wendy02です。 作り直しました。 一気に作らないので、自分のコードが見えなくなって、遅くなってしまいました。 最初に、 >2番目のストップウオッチでは、最初は20秒間隔でカウントされ、その後1分間隔でカウ>ントされるようです。 >なぜ20秒間隔なのかは分かりませんが。 テストでは、20秒間隔で行っていたからですが、その辺りも見直しました。 以下のコードの中で、秒で指定してください。 ただし、注意点があります。例えば、300秒でしたら、記録は 301 秒後になります。記録は、1秒のズレがあります。気になるようでしたら、TIMEVALUE("00:00:01") PresentTime = Now -TIMEVALUE("00:00:01") '現在の時刻 としてください。 現在は、STARTCELLNAME に記録した場所から、横に表示するようになっています。 '======================================== 'シートモジュール Private Sub CommandButton1_Click() 'スタートボタン Range("A1").NumberFormatLocal = "h:mm:ss" Range("A1").Value = 0 On Error GoTo ErrHandler If Range(STARTCELLNAME).Value > 0 Then If MsgBox("上書きされますがよろしいですか?", vbOKCancel) = vbCancel Then Exit Sub End If End If If (Columns.Count - Range(STARTCELLNAME).Column) < LASTCOUNT Then MsgBox "回数は、列数に依存します。" & LASTCOUNT & "を減らしてください。" Exit Sub End If myStartTime = TimeValue(Now) lngCount = 0 CommandButton1.Enabled = False Call TimerRefresh Exit Sub ErrHandler: MsgBox Err.Number & " : " & Err.Description End Sub Private Sub CommandButton2_Click() '終了ボタン lngCount = 0 Call TimerRefreshStop CommandButton1.Enabled = True End Sub '======================================== '標準モジュール Option Explicit Private myOnTime As Date Public lngCount As Long Public myStartTime As Date '==================== '*******設定値******* Public Const STARTCELLNAME = "D7" 'スタートセル Public Const LASTCOUNT = 100 'カウント数(データ数) Private Const MY_INTERVAL As Long = 300 '秒数 (5分 = 300) '==================== Sub TimerRefresh() Dim TimeDifference As Date Dim TimeCount As Long Dim StartCell As Range Dim PresentTime As Date If StartCell Is Nothing Then Set StartCell = Range(STARTCELLNAME) End If TimeDifference = Time() - myStartTime TimeCount = TimeDifference * 60& * 60 * 24 ''Cells(10, 1).Value = TimeCount 'Count検査用 Cells(1, 1).Value = Format$(Now + TimeDifference, "h:nn:ss") myOnTime = Now + TimeSerial(0, 0, 1) '秒単位 DoEvents Application.OnTime myOnTime, "TimerRefresh" PresentTime = Now '現在の時刻 If TimeCount > MY_INTERVAL Then '累計方式 'StartCell.Offset(lngCount).Value = Range("A2").Value - WorksheetFunction.Sum(Range(StartCell, StartCell.Offset(lngCount))) StartCell.Offset(-1, lngCount).Value = Format$(PresentTime, "h:nn:ss") StartCell.Offset(, lngCount).Value = Range("A2").Value lngCount = lngCount + 1 If lngCount > LASTCOUNT Then Set StartCell = Nothing Call TimerRefreshStop End If Beep TimeCount = 0 myStartTime = TimeValue(Now) End If End Sub Sub TimerRefreshStop() '終了用 On Error Resume Next Application.OnTime myOnTime, "TimerRefresh", , False myStartTime = 0 End Sub '----------------------------------------
お礼
毎度まいどお世話になります。できあがったものの中身を調べるのでさえややこしいのに、そのVBAを新しく何度も作っていただき、本当にありがとうございます。 (A2)に値を入れ忘れていて、おかしいなと調べるのに長い時間を取られてしまったりなどの へま を重ねながら検討を進めています。でも カウント結果を縦に並べたり、同じセルに上書きさせたりなど できるようになりました。VBAの基礎の、基礎は理解できてきたようです。 例えば Call TimerRefresh を始めとする特殊な時間関数の意味や使い方など、インターネット上のどこかで参考にできるようなページがあるのでしょうか? Wendy02様などのような超上級者でなければ知り得ない知識なのでしょうか? Option Explicit など 他にも分からないことがまだまだいっぱいあります。 今回の不具合と追加質問について、補足に書きます。
補足
さて、今回の時計は ・(A,1)の表示が2秒ごとに進むという不具合が目立ちます。当方で修正を試みましたが、力及ばずでした。なお、インターバル秒数後にデータを新しく表示すると、(A,1)の時刻表示も第6行のデータ時刻も、正常値に戻ります。しかしその後 また(A,1)は2秒ごと進むようになります。 ・1回ごとの差分表示(累計方式)は正しい計算、表示ができていないようです。 先ず、表示方向を縦ではなく横に並べるために、左辺 StartCell.Offset(, lngCount).Value のOffset中に左記のように ( , )を加えました。 それでも3回目の表示データ以後は、差分の差分が加算されて表示されているようです。 ・また、記録の1秒のズレはご提案の方法では解決できず、インターバルを1秒短く設定することで対処しました。 上記不具合、特に2秒ごと表示の問題と正しい差分表示の問題について、解決策のご検討をぜひよろしくお願いします。 新しい質問が次々といつまでも続いて出てくるのは、たいへんご迷惑かと思いますが、 最後に「4方向の通過車両台数を同時に記録する方法」について、是非教えていただきたくよろしくお願いします。 1台のパソコンで4方向の交通量が同時に自動測定記録できれば、大幅に効率向上できます。 そこで、ひとつの測定用基準時間を用い、各4方向ごとの合計通過台数の入力データ(これまでの(A2)セルのデータに相当)がそれぞれ(B3)(B4)(B5)(B6)に並べて表示されるときに、各測定インターバルごとの差分通過台数をそれぞれ(C3)(C4)(C5)(C6)から始まって横方向に100個まで表示させる方法を教えてください。 時間ごとの差分通過台数であれば交通量変化の様子を直接容易に掴むことができると思います。 たいへんお世話を掛けますが、ぜひよろしくお願いいたします。
- Wendy02
- ベストアンサー率57% (3570/6232)
kinsei様、もう少し、お待ちください。 どうも、不手際申し訳ありません。お話は了解しましたし、変更もさほどむつかしくはありません。私は、前々からこのテーマをどうしてもしたかったので、両天秤を掛けたことがいけなかったようです。公開するものは、最初のものに、的を絞って進めていきます。今回書いた内容が、越えそうで越えないテーマの1つなのですね。 みなさんが、出来ないと思ったのも当然でしたし、前の私も同じでした。Excelでこんなことまでできるというのは、留まるところがありませんね。しかし、書籍購入費も留まるところがありません。 >「超図解Excel マクロ&VBA プログラミング」 なかなか、分りやすい本だと思います。最初に、こういう本を買っておけば、私は失敗しなかっただろうなって思います。 >私も自分でマクロやVBAを使えるようになりたいと思っています。 私自身は、2年までは調子良く進んだのですが、その後が、長い長いトンネルをまだ抜け出せません。今は、我慢して、諦めないようにするだけです。 なお、 >2番目のストップウオッチのボタン動作が正しくないようです。 やっぱりそうでしたか。なぜか良く分りませんが、特に、二度打ちしたりすると良くないようです。 >2番目のストップウオッチでは、最初は20秒間隔でカウントされ、 作成中は、20秒で行っていたからで、それは簡単に直せますが、その流れ自体を換えることにしました。ただ、1番目側を進めていくようにします。 今、直しているのは、時間表示に戻しますが、クリックの開始時刻は、その始めた時からの時間にしています。 それでは、もう少し、お待ち願います。
お礼
お手数を煩わせて申し訳ありません。 超図解の本を読み進んでいますが、なかなか面白いですね。たいへん分かりやすく書かれています。取り敢えず、第4章の「VBA文法の基礎」までは早急にマスターしたいと思っています。 この本1冊でかなりのことができそうに思いますが、その後は、どれだけ多くの種類の関数や命令語が自由に使いこなせるかというのが、VBA使いこなしのレベルを決めるように思います。命令語辞典があってもたいへんそうですね。 引き続きよろしくお願いします。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。Wendy02です。 やっと、出来ました。二つのものを考えてみました。どうしても、気が乗らないと作れない種類のものです。 最初に紹介したものと同じパターンのものと、二重線から下のコードは、APIを使ったもので、私には、多少不安定要素が含まれるような気がします。ただ、時間の書き込み中に占有されません。 なお、時間表示は、ストップウォッチになっています。 表示レイアウト A B C ボタン1 0:01:24 30 45 5 10 ボタン2 0 'シートモジュール '------------------------------------- Private Sub CommandButton1_Click() Range("A1").NumberFormatLocal = "h:mm:ss" Range("A1").Value = 0 myStartTime = TimeValue(Now) CommandButton1.Enabled = False Call TimerRefresh End Sub Private Sub CommandButton2_Click() Call TimerRefrshStop CommandButton1.Enabled = True End Sub '標準モジュール '------------------------------------------------------ Private myOnTime As Date Private lngCount As Long Public myStartTime As Date Sub TimerRefresh() Dim TimeDifference As Date '掲示板に出したもの 'A1に表示が出ます。 TimeDifference = Format$(Time() - myStartTime, "h:nn:ss") Cells(1, 1).Value = TimeDifference myOnTime = Now + TimeSerial(0, 0, 1) '1秒単位 DoEvents Application.OnTime myOnTime, "TimerRefresh" If Second(TimeDifference) = 0 Then If Range("C65536").End(xlUp) = 0 Then Range("C65536").End(xlUp) = Range("A2").Value - lngCount Else Range("C65536").End(xlUp).Offset(1).Value = Range("A2").Value - lngCount End If lngCount = Range("A2").Value End If End Sub Sub TimerRefrshStop() On Error Resume Next Application.OnTime myOnTime, "TimerRefresh", , False lngCount = 0 myStartTime = 0 End Sub '------------------------------------------------------ '========================================================== '以下は、同じモジュールには登録はしてはいけません。 '単独のモジュールです。なるべく、他のブックといっしょには用いないでください。 'シートモジュール '--------------------------------------------------------- Private Sub CommandButton1_Click() 'スタートボタン Call StartTimer CommandButton1.Enabled = False End Sub Private Sub CommandButton2_Click() '終了ボタン Call TimerStop CommandButton1.Enabled = True End Sub '標準モジュール '------------------------------------------------------- Private Declare Function GetTickCount Lib "kernel32" () As Long Private Declare Function SetTimer Lib "user32" (ByVal Hwnd As Long, ByVal nIDEvent As Long _ , ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long Private Declare Sub KillTimer Lib "user32" (ByVal Hwnd As Long, ByVal nIDEvent As Long) Private lngTimerID As Long Private myCell As Range Private lngStartTime As Long Private lngStock As Long Sub StartTimer() Dim lngInterval As Long lngInterval = 1000 Set myCell = Range("A1") myCell.NumberFormatLocal = "h:mm:ss" Range("A1").Value = 0 lngStartTime = GetTickCount() lngTimerID = SetTimer(0&, 0&, lngInterval, AddressOf s_Timer) End Sub Sub s_Timer(ByVal Hwnd As Long, ByVal uMsg As Long, ByVal idEvent As Long, ByVal dwTime As Long) Dim dblTime As Double dblTime = (GetTickCount() - lngStartTime) / (60& * 60 * 24 * 1000) On Error Resume Next myCell.Value2 = dblTime If Second(dblTime) Mod 20 = 0 Or Second(dblTime) = 0 Then If Range("C65536").End(xlUp) = 0 Then Range("C65536").End(xlUp) = Range("A2").Value - lngStock Else Range("C65536").End(xlUp).Offset(1).Value = Range("A2").Value - lngStock End If lngStock = Range("A2").Value End If End Sub Sub TimerStop() KillTimer 0&, lngTimerID Set myCell = Nothing lngStock = 0 End Sub
お礼
すばらしいものを教えていただきました。ありがとうございます。先日は時計、今回はストップウオッチ2例です。 エクセルって本当に何でもできるんだなーと、感心してしまいます。先日、早速 「超図解Excel マクロ&VBA プログラミング」 を買って来てしまいました。 これから先、長いと思いますが、私も自分でマクロやVBAを使えるようになりたいと思っています。 お礼の方は字数が限られていますので、補足の方に教えていただいた今回の2例についての不具合の問い合わせと、追加の質問を書きます。
補足
教えていただいた今回の2例についての不具合の問い合わせと、追加の質問です。 質問についての方が簡単に回答できそうに思いますので、こちらを早めに教えていただければ、使い勝手やレイアウトなどいろいろ検討比較に早く着手できます。よろしくお願いします。 (不具合1)今回の2例とも、通過台数が0台だったときに、最初の1分については正しく0台と表示されますが、続けて0台だったときは2回目以降の0台のデータが追加されません。 また0台が2回以上続いた後に0台以外のデータが入ると、最初の0台のデータに上書きされてしまい、最初の0台のデータが残りません。 (不具合2) 2番目のストップウオッチのボタン動作が正しくないようです。 コマンド2のボタンでリフレッシュされない、コマンド1ボタンでリフレッシュされるが正しく再スタートできない、など不安定なようです。 また2番目のストップウオッチでは、最初は20秒間隔でカウントされ、その後1分間隔でカウントされるようです。 なぜ20秒間隔なのかは分かりませんが。 (不具合3)3つ目の不具合は、1番目2番目のストップウオッチとも、リフレッシュしてもカウント台数はリフレッシュ前の台数をおぼえているようです。 トータル台数のデータはリフレッシュされません。 この時計をいろいろ応用できるように、私もマクロの勉強を進めたいと思っていますが、今回のプログラムについて、教えてください。 (質問1) 1分ごとのカウントはどこで指定されているのでしょうか?それを5分ごとや20秒ごとに変更するのにはどういじればよいのでしょうか? (質問2)今回はカウントの差分が(c,1)から始まって(c,2)(c,3)…とc列に表示されますが、 これを(d,7)から始まって(e,7)(f,7)…のように最初のセルを指定して、第7行に、データを100個まで表示させるようにするには、どうすればよいのでしょうか? (質問3-1)上記の場合に(d,6)(e,6)(f,6)…の第6行のセルに測定時刻も同時に表示させるにはどのようにすればよいのでしょうか? (質問3-2)測定時刻データが残せるなら、先日の現在時刻の時計が意外に使いやすそうです。こちらの場合についても時刻を並べて表示する方法を教えていただけると幸いです。 以上、よろしくお願いします。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。Wendy02です。 >ついでにお聞きしたいのですが、最終的には、 >この時計をA1のセルに表示させ、通過車両台数の計数値をA2のセルに表示させながら、 >これができるまでの道のりはまだまだ遠いのでしょうか? ちょっと考えさせてください。(今日は、ちょっと無理ですが、より良いものを考えます。もともと、私が、この問題は、ずっと前から手がけていた内容なのです。このご質問が、もし私の考えたものと合えばと思って、それで様子をみていたのです。Visual Basic カテゴリでは、回答の反応自体がありませんでした。久々の名作?(迷作)だと思ったのですが。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=1721584 コンセプトは同じですが、こちらよりも、はるかにむつかしい内容です。) >私が初心者でかつ十分には時間が取れていないので、レスポンスが遅くなってし >まうと思います。 それは構いません。やりながら、学べばよいです。入門編ぐらいは、1ヶ月ぐらいで卒業できますから。それから、私は、VBAを使って、自分の発言を画面から取得しリスト化して、気になるものは、すぐに開けられるようにしてあります。どんなに、時が経っても、こちらが、もうダメと判断しなければ、リストには残ります。(言葉よりもずっとすごいです。(^^;) それから、お礼側に返事をつけたものに関しては、メールが届きますので分ります。時間的なものは気にしなくてよいです。また、つけなくても、1ヶ月先でも、2ヶ月先でも、今は、十分にチェックできます。 >ネット上のどこを見れば参考にできるのか、そのページを教えていただけるとあ >りがたいと思っています。 このご質問の件に関しては、たぶん、どこにも出てこないかもしれません。私の勧めるところは、今は、Microsoft のMSDNぐらいしかありません。
お礼
昨夜読ませていただきましたが、感激しただけで お礼の記入を忘れていました。 遅くなりましたが、取り敢えずお礼だけ申し述べさせていただきます。 引き続きよろしくお願いします。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。Wendy02です。 ボタンの取り付け方: メニューの何もないところで、右クリック-コントロールツールボックス とすると、 コントロールツールバーが出てきます。 次に、□(長方形)のボタンをクリック ワークシートにマウスを移すと、マウスカーソルが、+ になります。 それで、斜めにドラッグすれば、ボタンが出来上がります。 それをもう一度行ってください。 そうしたら、そのボタンを右クリック-[コードの表示] で、そのまま、 Private Sub CommandButton1_Click() 'ココ End Sub というのが、出来上がりますので、そこに、Call TimerRefresh を入れ、 Private Sub CommandButton2_Click() 'ココ End Sub に、 Call TimerStop Beep を入れ、今度は、現在のVisual Basic Editor 画面のまま、メニューから 挿入-標準モジュールをクリック 今度は、標準モジュール側のコードを貼り付けます。 貼り付けたら、Alt キーを押しながら、Q (または、ファイル(F)-終了してExcelへ戻る) まだ、コントロールツールバーが出ていたら、青い三角定規のコマンドボタンが凹んでいたら、クリックして、元に戻します。 (ただ、もし、シート上のコマンドボタンの名前などを変える場合は、右クリックして、コマンドボタンオブジェクトから、名前を変更してから、青い三角定規のコマンドボタンをクリックします。) そして、メニューの何もないところで、右クリック-コントロールツールボックスをクリックして、ツールバーを消します。 >多少時間がかかるかも知れませんが、 時間さえ掛ければ、これは何とかなりますし、より良いものが得られると思います。なお、時間表示中にも入力は可能であることを前提として考えています。 コードを取り付ける方法は、いくつかのサイトでは、スクリーン・キャプチャで取った画面の絵で説明出ているものがあるかと思います。
お礼
時間が取れなくて、お礼が遅くなってしまい、申し訳ありません。 時々刻々と動く時計を表示させることができました。これで大幅前進です。ありがとうございました。 ついでにお聞きしたいのですが、最終的には、 この時計をA1のセルに表示させ、通過車両台数の計数値をA2のセルに表示させながら、 測定開始から1分ごとの計数結果の台数をC1のセルからCnのセルに順番に表示させて記録したいのですが、 これができるまでの道のりはまだまだ遠いのでしょうか? 私が初心者でかつ十分には時間が取れていないので、レスポンスが遅くなってしまうと思います。 ネット上のどこを見れば参考にできるのか、そのページを教えていただけるとありがたいと思っています。 よろしくお願いします。
- Wendy02
- ベストアンサー率57% (3570/6232)
kinseiさん、こんばんは。 お話の要点が見えないので、少し、様子を見させていただきました。 #6さんの >エクセルでは、デジタル時計のように、何もしなくても自動的に時間表示が変わるということはできないですね。 いくつか方法はあります。本来は、VBでは標準的なのに、VBAでは、どうやるのか、探してみましたが、出てきませんでしたし、私が出来ても、該当するActiveX コントロールを持っていない人には使えません。 (問題ある場合は、また、負担の少ない方法を考え直します。ただし、明日は、すぐにお答えできないですが、私でなくても、それが、できる方がここにはいらっしゃいます。) また、「インターネットから標準時を取り込む方法でも良いと思います」というのは、一回、システム時計を修正するだけのマクロになってしまいます。サーバー経由ですので、若干、cmd.exe /c のコプロからExcelのワークシートに戻ってくるまでのタイムラグが生じて、繰り返しするにはロスが出てしまいます。やはり、システム時計を使わないと、うまくいきません。 シートにコントロールツールのボタンを二つ用意してください。 ここでは、シート1 にボタンを取り付けるとします。 '------------------------------------------------- Private Sub CommandButton1_Click() 'スタートボタン Call TimerRefresh End Sub Private Sub CommandButton2_Click() '終了ボタン Call TimerStop Beep End Sub '------------------------------------------------- 標準モジュールには以下のようにしてください。 '------------------------------------------------ Private myOnTime As Date Sub TimerRefresh() 'シート1 のA1に表示が出ます。 Sheet1.Cells(1, 1).Value = Format$(Time(), "h:nn:ss") myOnTime = Now + TimeSerial(0, 0, 1) '1秒単位 DoEvents Application.OnTime myOnTime, "TimerRefresh" End Sub Sub TimerStop() Application.OnTime myOnTime, "TimerRefresh", , False End Sub 若干、VBAメソッドですから、多少の、負荷・負担があります。他にも方法があります。
お礼
なんだか教えていただいたらできそうな雰囲気、ありがとうございます。ご足労を掛けますがよろしくお願いします。 でも私は初心者で特にVBAは始めてのものですから、実際に教えてもらった内容を理解して進めるには、同時にエクセルやVBAの基礎勉強も進める必要があります。自分でもあっちこっち参考にしながら勉強しますので、多少時間がかかるかも知れませんが、よろしくお願いします。 >シートにコントロールツールのボタンを二つ用意してください。 >ここでは、シート1 にボタンを取り付けるとします。 コントロールツールのボタンを用意して、シート1に取り付けるには、 ・[ツール]メニュー [ユーザ設定] [コマンド]タブ [分類]ボックスで、マクロをクリックすればよいのでしょうね? ・ また、[コマンド]ボックスから ユーザ設定ボタンを コントロールツールボックスに2個ドラッグすればよいのでしょうか? ・その後の、マクロの登録やスタートボタン、終了ボタン、標準モジュールについて、それらの内容と取扱い方がよく分かりません。 明日、他のページを参考にしながら勉強してみます。
- lilact
- ベストアンサー率27% (373/1361)
エクセルでは、デジタル時計のように、何もしなくても自動的に時間表示が変わるということはできないですね。 ただ、「=now()」を埋め込んだセルを参照した計算をする場合、表示が過去の時間になっていても計算を実行した時間を参照して計算しますから使えるとは思います。同時に時間表示も更新されます。 マクロに埋め込むこともできますし、どのような計算をするかを書かれると、回答しやすいかと思います。
補足
やはりエクセルで時計機能を簡単に実現するのは難しいようですね。 交通量の調査で、今は、調査員がカウンタを手に持って時間当たりに何台通ったかをカウントしています。電子カメラの映像情報の変化を認識して台数をチェックしカウントすれば、無人で24時間の監視・チェックができます。 1分ごとにデータを取れば、10分ごとに集計し直したり、1時間ごとに集計し直したりもできます。1日の中での朝昼晩の変化も掴めますし、1週間の平均的な変化の様子も定量的に把握できます。 このようなことを自動化するのには、やはり専用のソフト開発が必要なのでしょうか? 今のエクセルで実現できればありがたいと思っていますが、エクセル以外でも自動的にデータを蓄積してカウントする方法はあるのでしょうか? 多くの方の知恵を拝借できれば、と思っています。
- imogasi
- ベストアンサー率27% (4737/17069)
関数では =TEXT(NOW(),"ggg.e年mm月.dd日hh時mm分ss秒") というところでしょうか。 ただF9を押さないと現在時刻に更新されません。 即時(的)に(1分1秒単位で)更新させるには、エクセルVBAレベルで組むのは難しいのではないかと思います。 あとはフリーソフトやアドインを見つけるとか。 取得できる単位の問題 http://www.happy2-island.com/excelsmile/smile04/capter00304.shtml ある時点からXX秒後に一回起動などならできる(Timerなど)が、永久にXX秒ごとに割り込みを掛けて何か(この場合は時刻表示)をするのは、一段高いスキルがいるように思う。
- pippiiiii
- ベストアンサー率0% (0/3)
セルに =NOW() と入力するだけで 日付と時刻がリアルタイムで表示するようになります。
- 1
- 2
お礼
出張、不在などで時間が経ってしまいました。 いろいろ教えていただいてありがとうございました。 まだ実際に使えるところまでには至っておりませんが、少々気長に検討してみます。