残り時間をフォーム上に表示するようにVBAコードを修正します。以下のコードでは、フォームにラベルを追加し、タイマーの残り時間をリアルタイムで表示する仕組みを作ります。
手順
1. Excelを開き、Alt + F11でVBAエディタを開きます。
2. Insert > UserFormを選択し、フォームを作成します。
3. UserFormに以下のコントロールを追加します:
スタートボタン(CommandButton1)
ラベル(Label1): 残り時間を表示するためのもの
4. 以下のコードをフォームとモジュールに追加します。
フォームコード
フォームに配置したスタートボタン(CommandButton1)のクリックイベントを設定し、残り時間を更新する処理を追加します。
Private Sub CommandButton1_Click()
StartPomodoro
End Sub
モジュールコード
残り時間を表示しながらタイマーを進行させるためのコードを以下に示します。
Option Explicit
Private running As Boolean ' タイマーの実行中を示すフラグ
Sub StartPomodoro()
Dim startTime As Double
Dim duration As Double
Dim breakTime As Double
Dim pomodoroCount As Integer
Dim totalPomodoros As Integer
Dim soundPath As String
' 設定:25分勉強、5分休憩、4セット
duration = 25 * 60 ' 25分を秒に変換
breakTime = 5 * 60 ' 5分を秒に変換
totalPomodoros = 4 ' ポモドーロのセット数
soundPath = "C:\Windows\Media\notify.wav" ' 音ファイルのパス
running = True ' タイマー開始フラグ
' ポモドーロループ開始
For pomodoroCount = 1 To totalPomodoros
' 勉強タイマー
UpdateTimer duration, "勉強時間: 残り "
If Not running Then Exit Sub
BeepSound soundPath
MsgBox "25分経過!休憩時間です。"
' 休憩タイマー
UpdateTimer breakTime, "休憩時間: 残り "
If Not running Then Exit Sub
BeepSound soundPath
MsgBox "5分休憩終了!次のポモドーロに移りましょう。"
Next pomodoroCount
BeepSound soundPath
MsgBox "全てのポモドーロセットが完了しました!お疲れ様でした。"
End Sub
' 残り時間を更新するサブプロシージャ
Sub UpdateTimer(ByVal timeInSeconds As Double, ByVal labelPrefix As String)
Dim startTime As Double
Dim remainingTime As Double
Dim minutes As Integer
Dim seconds As Integer
startTime = Timer
Do While Timer < startTime + timeInSeconds
remainingTime = timeInSeconds - (Timer - startTime)
minutes = Int(remainingTime / 60)
seconds = Int(remainingTime Mod 60)
' ラベルに残り時間を表示
UserForm1.Label1.Caption = labelPrefix & minutes & "分 " & seconds & "秒"
DoEvents ' 他の処理を行えるようにする
If Not running Then Exit Sub
Loop
End Sub
' WAVファイルを再生するサブプロシージャ
Sub BeepSound(soundPath As String)
Dim snd As String
snd = soundPath
Call sndPlaySound(snd, 1)
End Sub
' WAVファイルを再生するAPI
Declare PtrSafe Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" _
(ByVal lpszSoundName As String, ByVal uFlags As Long) As Long
説明
1. 残り時間の表示: UpdateTimer サブプロシージャは、残り時間をラベル (Label1) に更新しながらタイマーを進行させます。勉強時間と休憩時間それぞれに残り時間をリアルタイムで表示します。
2. running フラグ: running というフラグを追加し、ユーザーがフォームを閉じたり、処理を中断できるようにしています。これは、途中でタイマーを終了させたい場合に対応します。
3. 音の再生: タイマーが終了したら、音を鳴らすために BeepSound を使用します。
使用方法
1. フォームを実行し、スタートボタンを押すとタイマーが開始します。
2. 残り時間がラベルにリアルタイムで表示されます。