• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:タイマー残り時間をExcel Vbaから利用したい)

Excel Vbaからタイマーの残り時間を参照する方法とは?

このQ&Aのポイント
  • Excel Vbaからタイマーの残り時間を参照する方法を教えてください。
  • タイマー残り時間をExcelのVbaから参照する方法について教えてください。
  • Excel Vbaでタイマーの残り時間を参照する方法について教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.2

こんばんは どのように組み込めばいいのか分かりませんが、 ユーザーフォームを用意して、 ラベルを一つ、ボタンを3つ用意して、ユーザーフォームのコードに Option Explicit Private Sub CommandButton1_Click()   Dim i As Long   ' スタートボタンが押された。   Call Initial   QIventer = "EWordChoose"   Range("問題").Value = EwordChoose   s = Timer   i = 1   Do Until Timer - s > t     Me.Label1.Caption = "残り" & Format(t - Timer + s, "#0.0") & "秒"     DoEvents   Loop End Sub Private Sub CommandButton2_Click()   s = Timer - t End Sub Private Sub CommandButton3_Click()   Unload Me End Sub こんな感じにコードセットして、標準モジュールの方で、 Public s As Single Public Const t As Long = 30 Sub test()   UserForm1.Show 0 End Sub として、 Private Sub CommandButton1_Click()   Call test End Sub のようにボタンでユーザーフォームを起動します。 ボタン1でタイマーを残り(定数t)30秒からカウントダウンします。 途中で止めるときはボタン2で、閉じる時はボタン3で。 ユーザーフォームをUserForm1.Show 0 で起動すると、表示された状態で セルに入力出来ます。 Public Sub Initial の中のタイマー関連の設定は外します。 入力シートの Private Sub Worksheet_Change(ByVal Target As Range) の中で何をしているのかはっきり分からないですが、タイマーが0になった時の 処理を組み込まないとダメかと思います。

EulerKnowsNo
質問者

お礼

ushi2015さん、ありがとうございました。 うまく目的を果たすことができました。アドバイスの通りユーザーフォームを作成しました。後、ご指摘の (1)「Public Sub Initial の中のタイマー関連の設定は外します。」 (2)「入力シートの Private Sub Worksheet_Change(ByVal Target As Range) の中で何をしているのかはっきり分からないですが、タイマーが0になった時の 処理を組み込まないとダメかと思います。」 の2か所を変更すれば期待通りに動きました。 (1)その通りにしました。 (2)条件判定の1行だけの変更でOKでした。 本当に助かりました。制限時間付き教材を作るとき是非利用したいと思います。Microsoft Officeのvbaで使えることが分かりましたので、次はWordで試します。

その他の回答 (1)

  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.1

こんにちは (2)はどのようなマクロになっていますか?

EulerKnowsNo
質問者

お礼

補足が遅くなって申しわけありません。タイマーに関係しそうなところだけを簡単に分かりやすく示すことができたか分かりませんが、よろしくお願いします。話はそれますが英単語ピングの説明用にpdfファイルとWordファイルを作ったのですが画像が入っています。OKWAVEでのやりとりで使えますか。

EulerKnowsNo
質問者

補足

 タイマー関連(といっても終了時刻だけをチェック)のコードを示しました。  スタート時点で開始時刻と終了時刻を設定し、シート「入力」の二つのセルの更新イベントを使って処理を進めています。 不満な点はタイマーのように残り時間を刻々と表示しないことです。設定作業時間を表示したままなので。 '1 「スタート」ボタンのマクロ ※シート「入力」にある Private Sub CommandButton1_Click() ' スタートボタンが押された。 Initial QIventer = "EWordChoose" Range("問題").Value = EwordChoose End Sub '2 終了時刻等を初期設定 Public Sub Initial() ' 処理の最初に必ず実行 Dim tempTime As Date Dim IsHogoOk As Boolean 'シートが保護できるか '*** タイマー関連 *** '終了時刻設定 StartTime = Time tempTime = DateAdd("n", Range("分"), StartTime) EndTime = DateAdd("s", Range("秒"), tempTime) '終了時刻 '*** タイマー関連 *** Set shtAnswer = ActiveWorkbook.Sheets("入力") Set shtWords = ActiveWorkbook.Sheets("英単語帳") '変わる可能性ある Set shtScores = ActiveWorkbook.Sheets("英単語タイピング成績") '変わる可能性ある ' sheets("入力")の「change」イベントを引き起こす(呼び出す)オブジェクト、処理名 ' イベントを起こす側で、起こす前に値を設定する。フラッグとして利用する QIventer = "EWordChoose" ' "Cleaner", 他にあれば AIventer = "User" ' "Cleaner", 他にあれば '各フラッグ、パラメータ設定 With shtAnswer .Range("正答数").Value = 0 .Range("解答数").Value = 0 End With ' 'シートの保護 IsHogoOk = Sheet_Protect("入力", "Gauss") If IsHogoOk = True Then ' MsgBox prompt:="シート「入力」が保護されました。", Buttons:=vbOKOnly Else ' MsgBox prompt:="シート「入力」が保護できませんでした。", Buttons:=vbOKOnly End If IsHogoOk = Sheet_Protect("英単語タイピング成績", "Gauss") If IsHogoOk = True Then ' MsgBox prompt:="シート「英単語タイピング成績」が保護されました。", Buttons:=vbOKOnly Else ' MsgBox prompt:="シート「英単語タイピング成績」を保護できませんでした。", Buttons:=vbOKOnly End If IsHogoOk = Sheet_Protect("英単語帳", "Gauss") If IsHogoOk = True Then ' MsgBox prompt:="シート「英単語帳」が保護されました。", Buttons:=vbOKOnly Else '' MsgBox prompt:="シート「英単語帳」が保護できませんでした。", Buttons:=vbOKOnly End If ' ' 日本語訳の表示チェック ' CheckBox1.Value = True ' 入力シート表示 shtAnswer.Activate End Sub '3 シート「入力」のChange イベント Private Sub Worksheet_Change(ByVal Target As Range) ' ' 変更されたセルが問題、解答、それ以外によって処理を分岐する ' 問題(のセル内容)はプログラムからのみ変更可 ' 生徒が変更できるのは解答のセル内容のみ ' それ以外のセルはプログラムからのみ変更可 ' Dim score, Qnum As Integer Dim restTime As Single Dim IsHogoOk As Boolean 'シートが保護できるか On Error Resume Next ' Debug.Print Target.Address ' MsgBox prompt:=Target.Address & QIventer & AIventer & "セルが変更されました。", Buttons:=vbOKOnly Select Case Target.Address Case Range("問題").Address '問題セルがクリアされたか、または問題が更新された。 ' MsgBox prompt:="QIventer=" & QIventer & " AIventer=" & AIventer & "問題セルが更新された。", Buttons:=vbOKOnly Select Case QIventer Case "EWordChoose" 'QIventer = "EWordChoose" ' MsgBox prompt:="解答セルが更新されます。By EWordChoose", Buttons:=vbOKOnly If CheckBox1.Value = True Then Sheets("入力").Range("日本語訳").Value = JWord '日本語訳更新 Else 'No operation End If Sheets("入力").Range("解答").Select '解答にフォーカス AIventer = "Cleaner" Sheets("入力").Range("解答").Value = "" '解答をクリア、後このイベントが発生 Case "Cleaner" 'QIventer = "Cleaner" ' MsgBox prompt:="問題セルがクリアされた。By Cleaner", Buttons:=vbOKOnly Case "Closer" ' MsgBox prompt:="問題セルがクリアされた。By Closer", Buttons:=vbOKOnly AIventer = "Closer" Sheets("入力").Range("解答").Value = "" '解答をクリア、後このイベントが発生 Case Else 'No Operation End Select Case Range("解答").Address '解答セルがクリアされたか、または生徒が解答を入力した。 ' MsgBox prompt:="QIventer=" & QIventer & " AIventer=" & AIventer & " 解答セルが更新された。", Buttons:=vbOKOnly Select Case AIventer Case "Cleaner" 'AIventer = "Cleaner" ' MsgBox prompt:="解答セルが更新された。By Cleaner", Buttons:=vbOKOnly Sheets("入力").Range("解答").Select '解答にフォーカス AIventer = "User" Case "User" 'AIventer = "User" ' MsgBox prompt:="解答セルに入力された。By User", Buttons:=vbOKOnly

関連するQ&A