出産前後の痔にはご注意!

Excelで子供に試験問題を作っているのですが、シート内にボタンをつけて、スタートボタンをクリックすると時間を測りはじめて、終了ボタンを押すと、かかった時間を指定したセルに表示するようにしたいのですが、どのようにすれば良いでしょう?・・・ボタンの作り方はわかりますが、関数もしくはVBAの式がわかりません。 よろしく御願いします。Excelは2000です。

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

A 回答 (3件)

セルに書き込むのではなく、画面で表示できれば良いと言うことなら、以下のサンプルでどうでしょう。


標準モジュールに、以下のコードを貼り付けてください。

Public myTime As Date
Public myFlg As Boolean

Sub StopWatch()

If myFlg = False Then
'スタート
myTime = Now '現在の日時を変数に記憶します。
myFlg = True
Else
'ストップ
MsgBox "かかった時間 " & Format(Now - myTime, "h:mm:ss") 'かかった時間を表示。
myFlg = False
End If

End Sub

ボタンは1つ(スタート/ストップ兼用)でいいです。
そのボタンに、このマクロを貼ってください。
    • good
    • 0
この回答へのお礼

バッチリです! ありがとうございました。

お礼日時:2003/06/02 19:48

Public timer



Sub StartTimer()
timer = Time

End Sub

Sub EndTimer()
term = Time - timer
Sheet1.Cells(1, 1) = Second(term) 'かかった秒数をA1に表示
End Sub

こんなかんじもOKです。
開始ボタンにStartTimer、終了ボタンにEndTimerをマクロ登録してください。
    • good
    • 0

VisualBasic Editorを立ち上げ、標準モジュールを作成してください。


そこに、以下のコードを貼り付けます。


Sub StartButton()
Range("A1").Value = Now '現在の日時をセルA1に書き込みます。
End Sub

Sub StopButton()
Range("C1").Value = Format(Now - Range("A1").Value, "h:mm:ss") 'かかった時間をセルA1に書き込みます。
End Sub

そして、
シート上にボタンを作成し、開始ボタンにStartButtonマクロを、終了ボタンにStopButtonを登録してください。

なお、このサンプルでは、開始ボタンを押すとA1に開始時刻が記入されます。
そして、終了ボタンを押すとC1にかかった時間(秒数)が記入されます。
セルの番地などは、適宜書き換えてください。

この回答への補足

ありがとうございます。ただ、問題が生じました。説明に書かなかった私が悪いのですが・・・
シート内容は、子供向けの問題なんですが、式にRAND関数を使っていますので、ストップボタンを押すと問題が変わってしまうのです。RAND関数とストップボタンの両立はむりなのでしょうか? また他に、問題内容を新しくするためのボタンをCalculate を使って作ってあります。

補足日時:2003/06/02 18:05
    • good
    • 0

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

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

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

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

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

QExcelのストップウォッチについて

ExcelのVBAを利用して、ストップウォッチ機能をつけたいと思っております。
現在別の方で作っていただいたのが以下になります。
①ストップウォッチのボタンを押したら、ストップウォッチ画面が表示される。
②表示された画面のスタートをクリックしたら画面に表示されるカウントがスタートされ、
スタートボタンもストップに変更される
③カウント中にストップを押したらスタートボタンに変更され、ストップウォッチの時間がコピーされ、I列の一番下が選択される
④再度スタートをクリックすると②~③が繰り返し行われる
⑤閉じるのマークをクリックするとストップウォッチ画面が消えるというところまではできています。

これを以下の2つの機能を追加したいと思っています。
②スタートをクリックしたときに、C6セルに”〇”を記入、D6セルにもともと入っている数字+1をし、
カウントアップがスタートし、スタートボタンもストップに変わる
③ストップを押したときに、カウントした時間をR1へ記載する。もしR1がすでに入力されているならR2へ、R1もR2も記載されていたらR3へ記載・・・をR5まで行う

今作っているのが以下のVBAになります。
Sub stopWatch(Form)
On Error GoTo ending
Dim dblTimer As Double, CB As New DataObject
If blnStart = True Then
With Form
.StartStopB.Caption = "START"
.StartStopB.BackColor = &H8000000D
End With
blnStop = True
Exit Sub
End If
blnStart = True
blnStop = False
dblTimer = Timer
With Form
.StartStopB.Caption = "STOP"
.StartStopB.BackColor = &HC0&
End With

Do Until blnStop = True
Form.TimeText.Value = TimeValue(CStr(CDate(Int((Timer - dblTimer)) / 86400#)))
DoEvents
If blnStop = True Then Exit Do
Loop
blnStart = False
blnStop = False

'クリップボードに値を格納

CB.SetText Form.TimeText.Value '変数の値をDataObjectに格納する
CB.PutInClipboard 'DataObjectのデータをクリップボードに格納する
AppActivate Application.Caption
Call 時間最終行をセレクトする
ending:
End Sub

お分かりになる方どうぞよろしくお願いします。

ExcelのVBAを利用して、ストップウォッチ機能をつけたいと思っております。
現在別の方で作っていただいたのが以下になります。
①ストップウォッチのボタンを押したら、ストップウォッチ画面が表示される。
②表示された画面のスタートをクリックしたら画面に表示されるカウントがスタートされ、
スタートボタンもストップに変更される
③カウント中にストップを押したらスタートボタンに変更され、ストップウォッチの時間がコピーされ、I列の一番下が選択される
④再度スタートをクリックすると②~③が繰り返し...続きを読む

Aベストアンサー

こんにちは。

>お分かりになる方どうぞよろしくお願いします。
うーん、何度読んでも、分かりませんね。Form というのはExcel VBAでは直接使わないし、どういう人が書いたかは知りませんが、本当に動くことさえ、そのコードからは読み取れません。それで、私が、VBAのプログラムの力量がないと判断するのは自由だけれども、一度、私の書いたコードを御覧ください。構造的には同じ内容だと思います。内容的には、かなりオーソドックスです。

ご質問者さんのご要望には、特にお応えしていくつもりはありませんが、前からご質問はアップしていたのは見ていましたので、少し考えてみました。なお、以下は正確なストップウォッチとは言えません。浮動小数点誤差も考慮されていません。正確さでは、Win32 APIを使ったほうがよいのですが、ブルースクリーンのリスクが高く、UserFormに取り付けるには、Excel に対する子のWindow になるらしく、手間が増えるようになるようです。

それと、オプションを付けた分だけ、コードは読みにくいようです。

'UserForm モジュール以外のモジュール
Sub UserFormUP()
'起動用のボタン1
 UserForm1.Show 0
End Sub

'UserForm モジュール(添付画像)
Private stpFlg As Boolean
Private FormerTime As Single
Private DiffTime As Single
Private Sub UserForm_Activate()
  CommandButton1.BackColor = &HC0&
  DiffTime = 0
  FormerTime = 0
  Range("C6:D6").ClearContents
  Range("R1:R5").ClearContents
End Sub

Private Sub CommandButton1_Click()
 'スタートボタン
 Dim myStartTime As Single
 Dim myTimer As Single
 Dim myTime As Double
 Dim myInterval As Long
 Dim i As Long
 Dim fScnd As Long
 myInterval = 100
 myStartTime = Timer()
 DiffTime = 0
 stpFlg = False
 CommandButton1.BackColor = &H8000000F
 CommandButton2.BackColor = &H8000000D
 If FormerTime = 0 Then
  Range("C6").Value = "◯"
 End If
 Do While stpFlg = False
  myTimer = Timer()
  Do While Timer() - myTimer < myInterval / 1000
   DoEvents
   If Not stpFlg Then Exit Do
  Loop
  DiffTime = (Timer() - myStartTime)
  myTime = (DiffTime + FormerTime) / (60& * 60 * 24)
  TextBox1.Text = Format$(myTime, "h:mm:ss")
  'カウント
  If Second(myTime) - (fScnd + 1) = 0 Then
    Range("D6").Value = Range("D6").Value + 1
  End If
  fScnd = Second(myTime)
 Loop
 'R列の書き込み
 i = Cells(Rows.Count, "R").End(xlUp).Row
 If i > 5 Then MsgBox "これ以上は機能しません。", vbExclamation: Exit Sub
 If Cells(i, "R").Value = "" Then
  Cells(i, "R").Value = Format$(myTime, "h:mm:ss")
  Else
  Cells(i + 1, "R").Value = Format$(myTime, "h:mm:ss")
 End If
 Label1.Caption = FormerTime
 Label2.Caption = DiffTime
 FormerTime = FormerTime + DiffTime '繰越
 DiffTime = 0
End Sub

Private Sub CommandButton2_Click()
CommandButton1.BackColor = &HC0&
CommandButton2.BackColor = &H8000000F
'ストップボタン
  stpFlg = True
End Sub
Private Sub UserForm_Terminate()
Unload Me
End 'すべての進行中のマクロは止める
End Sub

こんにちは。

>お分かりになる方どうぞよろしくお願いします。
うーん、何度読んでも、分かりませんね。Form というのはExcel VBAでは直接使わないし、どういう人が書いたかは知りませんが、本当に動くことさえ、そのコードからは読み取れません。それで、私が、VBAのプログラムの力量がないと判断するのは自由だけれども、一度、私の書いたコードを御覧ください。構造的には同じ内容だと思います。内容的には、かなりオーソドックスです。

ご質問者さんのご要望には、特にお応えしていくつもりはありませんが、...続きを読む

QVBAでのストップウォッチの質問です

今のコードを載せます
Sub test_StopwatchCell()
If did Then
kStopwatch
Else
kStopwatch Range("a1")
End If
End Sub
上のコードはエクセルワークシートにフォームのボタンを配置して、test_StopwatchCell 関数を登録し、クリックで測定開始し、もう一度クリックで測定停止するマクロですが、一時停止のボタンを新たに作りたいのですが、どうしたらいいのか教えて下さい。お願いします。

Aベストアンサー

No.2です。
そうですね・・・
「開始/停止(トグル)」と書いてあったので、てっきりその時間から始めると思ってしまいました。
勝手にプログラムに手を加えるのは良くないかもしれませんが・・・
たとえば標準モジュールの
Sub kStopwatch(Optional obj As Object)
の中の8行目位の
>dstart = timeGetTime
が、
dstart = timeGetTime - obj.Value * 86400000 '86400000=60*60*24*1000
だったら、現在の時間から始めるかもしれません。

QEXCELのセルへ、デジタル時計を表示できますか?

excelのセルへリアルタイムの時計を表示することは
できるのでしょうか?
=now()では入力時の時刻が落ちるだけですよね・・・

HPではjavascriptなどで比較的簡単のようですが
エクセルでは難しいのでしょうか??

Aベストアンサー

以下の手順でやってみてください。
ワークシートを開き、

1.AltキーとF11キーをいっしょに押してVisualBasicEditorを呼び出します。
2.メニューから挿入、標準モジュールで出てきたコードウィンド(右側の白い広い部分)に以下のコードをコピペします。

Sub test01()
With Sheets("Sheet1").Range("A1")
.Value = Time
.NumberFormatLocal = "h:mm:ss"
End With
Application.OnTime Now + TimeValue("0:00:01"), "test01"
End Sub

3.Alt+F11キーでワークシートへもどります.
4.メニューから、ツール、マクロ、マクロで出てきたマクロ名(test01)を選択して実行します。

これでSheets("Sheet1")のA1に毎秒ごとに時刻が表示されます。

QExcelでタイマーの一時停止するボタンのコードは

Excelでタイマーを作ったけど、一時停止できないとやっぱ面白くないと気づき、一時停止機能を付け加えたいが、まだ勉強し始めたばかりなので自分でコードが書けません。

なので、一時停止させるコードがわかる方教えてください。

<タイマーのコード>
Sub タイマー()

Dim EndTime
Dim PassTime

EndTime = Timer + Range("D5").Value * 60 + Range("F5").Value


Do

PassTime = Timer
Range("D5").Value = (EndTime - PassTime) \ 60 '分
Range("F5").Value = (EndTime - PassTime) Mod 60 '秒
DoEvents
Loop Until EndTime - PassTime <= 0

Beep

MsgBox "時間です"

End Sub

Aベストアンサー

#1さんのように突っぱねることが、本来は親切なのだと思います。ただ、掲示板というのは、締め切りはあっても、書かれたものは、時間というものが存在しない世界(一期一会)ですから、回答をせざるを得ないのは、ご容赦願います。

以下は、ある程度マクロが書ける人なら、考えつくはずです。
本来は、マクロの実行中に、割り込みが利かないのですが、なぜ可能なのか分かりますか?
それが分かりさえすれば、割り込み方法も思いつきます。

'//
Dim blnSw As Boolean 'スイッチ
Private Sub CommandButton1_Click()
 Dim EndTime As Double
 Dim PassTime As Double
 EndTime = Timer + Range("D5").Value * 60 + Range("F5").Value
 Do
  PassTime = Timer
  Range("D5").Value = (EndTime - PassTime) \ 60 '分
  Range("F5").Value = (EndTime - PassTime) Mod 60 '秒
  DoEvents
  If blnSw Then blnSw = False: Exit Sub
 Loop Until EndTime - PassTime <= 0
 Beep
 MsgBox "時間です"
End Sub

Private Sub CommandButton2_Click()
'途中で止める
 blnSw = True
End Sub

#1さんのように突っぱねることが、本来は親切なのだと思います。ただ、掲示板というのは、締め切りはあっても、書かれたものは、時間というものが存在しない世界(一期一会)ですから、回答をせざるを得ないのは、ご容赦願います。

以下は、ある程度マクロが書ける人なら、考えつくはずです。
本来は、マクロの実行中に、割り込みが利かないのですが、なぜ可能なのか分かりますか?
それが分かりさえすれば、割り込み方法も思いつきます。

'//
Dim blnSw As Boolean 'スイッチ
Private Sub CommandButton1_Click(...続きを読む

Qエクセルでの現在時刻入力

簡潔に。
エクセル(2002.SP3)で現在時刻を入力するのに
「Ctrl」+「*」で入力できるかと思いますが
「分」までしかデータがありません。
「秒」の単位まで簡単に入力したいのですが
いい方法ありますでしょうか?
え~残念ながら今手元に解説本も何もない状態です。
くわしくご親切なかた オネガイシマス。

Aベストアンサー

TIME関数を使えばよいと思います。

     ↓

参考URL:http://t_shun.at.infoseek.co.jp/My_Page/KansuuManual/kansuu_page_5.htm#Ⅴ-5

Q[EXCEL]ボタン押す→時刻が表に入る方法

会社で勤務時間をEXCELで管理することになりました。(タイムカードのように)
毎日、出勤時、退勤時にその時刻を入力していく必要があり、少しでも操作の手間を省きたいので、
ボタンのようなものを設置して、今の時刻が表の中の必要なところに入るようにしたいのですが、
EXCELでそういうことはできますか?

Aベストアンサー

可能なのだが、エクセルVBAを知ってないと、うまく行かないし、他人にデータ入力を任せる場面があるなら、それなりの防御機能を考えないとだめです。
しかし今でも、誤ったら他人の行にデータを入れ放題ですか。
こういうのはお金(給与)や名誉(遅刻)に関連することで、個人が所有CDの整理表を自分で作るなどとは違うのです。
エクセルなどというソフトはそういうことに適してないのです。
既に回答で言及の在るフォームなどを使って、他人(他行)のデータは隠したり(見えないように)し足りは出来ますが、VBAも中級程度のならないと。ある程度システム思考に慣れないと無理です。
CTRL+:、CTRL+;などの操作を覚えてもらうほうが良いでしょう。ボタンクリックとそう手間は変わらない。

Q秒を時分秒に変換する

EXCELで秒を時分秒に変換することは可能でしょうか?
19827635秒を何時間何分何秒に変換するもの

Aベストアンサー

A1に19827635秒が入っているとして
別のセルに
=TEXT(A1/24/60/60,"[h]時間mm分ss秒")
とすれば出きそうです。
5507時間40分35秒

QVBAでのタイマー使用例

お世話になります。

Office2003のエクセルVBAでの質問です。
シートにボタンがあり、ボタンをクリックしたらタイマーが動き出してセル内の数字のカウントアップが始まるってような事を行いたいと考えております。

ボタンを押したらタイマーが動きだし、そのタイマーイベントの中でセル内の数字をカウントアップすると考えたのですが、タイマーの使い方がわかりません。

タイマーを使った簡単なサンプルを教えていただけないでしょうか?

Aベストアンサー

こんにちは。

>VBAではJavaでいうスレッドのようにバックで動くクラスは無いのでしょうか?

Excel VBAの場合は、そういう機能に対するものは、おそらくはクラスとは言わないですが、厳密にはありませんね。

>これだと毎5秒ごとにマクロを実行ができないですよね。なのでスレッドを考えました。

それは出来ますが、ワークシートの作業に対して、完全にバックで動かし、影響をなくすのは難しいです。実際は、以下でいう、'指定時刻に実行するマクロ名' マクロの内容にも依存してきます。このマクロ側が、どういう性格なものか分からないと、ちょっと難しいですね。ここのカテゴリで一番良くある例としては、楽天のRSSがあります。

お礼側に出ていコードに手を加えてみました。

'おそらく、標準モジュールのほうがよいでしょう。

Private MacroStop As Boolean
Sub 指定時刻にマクロを実行する()
Dim myWait As Integer
Dim 指定時刻 As Date
  myWait = 5 '秒
  指定時刻 = Now + TimeSerial(0, 0, myWait)
  If MacroStop = False Then
    Application.OnTime 指定時刻, "指定時刻にマクロを実行する"
    Call 指定時刻に実行するマクロ名
  Else
    MacroStop = False
    End
  End If
End Sub

Sub 指定時刻に実行するマクロ名()
  Cells(1, 1).Value = Cells(1, 1).Value + 1
  
End Sub
Sub タイマー停止()
   MacroStop = True
End Sub

こんにちは。

>VBAではJavaでいうスレッドのようにバックで動くクラスは無いのでしょうか?

Excel VBAの場合は、そういう機能に対するものは、おそらくはクラスとは言わないですが、厳密にはありませんね。

>これだと毎5秒ごとにマクロを実行ができないですよね。なのでスレッドを考えました。

それは出来ますが、ワークシートの作業に対して、完全にバックで動かし、影響をなくすのは難しいです。実際は、以下でいう、'指定時刻に実行するマクロ名' マクロの内容にも依存してきます。このマクロ側が...続きを読む

QACCESSでストップウォッチの作成

ACCEESS2013を利用しています。

VBAでストップウォッチを作成したいのです。

自作では、簡単なのはできたのですが、

スータト⇒ストップ⇒スタート ⇒このとき0秒の戻ってしまいます。

スタート ストップ 一時停止がほしいのですが、
一時停止の作成ができません。

ネットで調べても、見つけることができませんでした。
ほぼ、丸投げ状態ですが、ご教唆お願いします

Aベストアンサー

教唆はいけません。
『人にいろいろ暗示を与えて、悪事・犯罪などを犯すように仕向けること』ですから「教示」ですね。

さて、本題。
フォームにコマンドボタンを二個(名前をそれぞれ BtnStart と BtnReset にします)
テキストボックスを一個(名前を TxtTime にします)
フォームのモジュールに

Option Compare Database
Option Explicit
'下記二行は宣言部
Private FormTime As Single
Private PassedTime As Single

Private Sub BtnReset_Click()
  Me.TimerInterval = 0
  FormTime = 0
  PassedTime = 0
  Me!TxtTime = 0
  Me!BtnStart.Caption = "Start"
End Sub

Private Sub BtnStart_Click()
  If Me.TimerInterval = 0 Then
    FormTime = Timer - FormTime
    Me!BtnStart.Caption = "Stop"
    Me.TimerInterval = 100
  Else
    Me!BtnStart.Caption = "Start"
    Me.TimerInterval = 0
    FormTime = PassedTime
  End If
End Sub

Private Sub Form_Timer()
  Dim sMod As Long
  PassedTime = Timer - FormTime
  sMod = Int((PassedTime - Int(PassedTime)) * 100)
  Me!TxtTime = CDate(PassedTime / 60 / 60 / 24) & Format(sMod, "\.00")
  'Me.Repaint
End Sub

※なお、Timer関数を使用している都合上、日付をまたがって使用していると誤表記されます。
投稿用にタブインデントの代わりに全角スペースを使用しています。
Access2010での動作確認です。

教唆はいけません。
『人にいろいろ暗示を与えて、悪事・犯罪などを犯すように仕向けること』ですから「教示」ですね。

さて、本題。
フォームにコマンドボタンを二個(名前をそれぞれ BtnStart と BtnReset にします)
テキストボックスを一個(名前を TxtTime にします)
フォームのモジュールに

Option Compare Database
Option Explicit
'下記二行は宣言部
Private FormTime As Single
Private PassedTime As Single

Private Sub BtnReset_Click()
  Me.TimerInterval = 0
  FormTime = 0
  PassedTi...続きを読む

Qエクセルで、タイム計測の管理をしたいと考えています

エクセルで、タイム計測の管理をしたいと考えています。

具体的には、
・1分23秒456 が計測されたタイム結果だったとします。
・エクセルに、連続して「123456」と入力し、
・その結果の表示として、「1:23.456」となって欲しい。

数多くのタイム計測を行う必要があり、さらに順位付けする必要があります。極力タイム入力の手間を省きたいと考えています。
お知恵をお貸しください。

Aベストアンサー

 入力値を時間データとして計算処理に使用する場合には、データを入力するセルと、結果を表示するセルを分けて、関数を使用して入力値を時間データに変換します。
 今仮に、データを入力するセルがA1セルで、入力値は常に1000分の1秒の桁まで入力される(例えば、12分34秒丁度の時には「1234000」、0分12秒34の時には「12340」と入力される)とした場合には、まず、結果を表示するセルに次の数式を入力して下さい。

=INT(A1/100000)/1440+VALUE(RIGHT(A1,5))/86400000

 次に、以下の操作を行って、セルの書式設定を行って下さい。

結果を表示するセルにカーソルを合わせて、マウスを右クリック
  ↓
現れた選択肢の中から、[セルの書式設定]を選択してクリック
  ↓
現れた[セルの書式設定]ウィンドウの[表示形式]タグをクリック
  ↓
[分類]欄の中から、[ユーザー定義]を選択してクリック
  ↓
[種類]欄に

[m]:ss.000

と入力する
  ↓
[セルの書式設定]ウィンドウの[OK]ボタンをクリックする

 以上です。

 入力値を時間データとして計算処理に使用する場合には、データを入力するセルと、結果を表示するセルを分けて、関数を使用して入力値を時間データに変換します。
 今仮に、データを入力するセルがA1セルで、入力値は常に1000分の1秒の桁まで入力される(例えば、12分34秒丁度の時には「1234000」、0分12秒34の時には「12340」と入力される)とした場合には、まず、結果を表示するセルに次の数式を入力して下さい。

=INT(A1/100000)/1440+VALUE(RIGHT(A1,5))/86400000

 次に、以下の操作を行って、セル...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング