Excelマクロで作るキッチンタイマー

Excelマクロで作るキッチンタイマー

Excel上で動くキッチンタイマー(カウントダウンタイマー)のご紹介です。10分、1分、10秒のボタンが用意されていて、利用中はExcelの操作が可能です。加算時間を変更したり、時間がゼロになったときの音を変更するなどのカスタマイズができます。


動画版もあります

動画でも解説してます。テキストよりそっちのほうが好きという方はこちらからどうぞ!

ダウンロード

こちらからzipファイルをダウンロードして、展開してください。

DLの前にお読みください

Windows10/11、Microsoft365のExcelで動作確認を行っています。ご利用の際はOfficeを最新バージョンへアップデートしてください。OSやOfficeのバージョンが古い場合、一部動作しない可能性があります。

また、コードには細心の注意を払っておりますが、無保証のコントロールとさせていただいています。いかなる理由により損害等が発生しても一切責任を負いかねますので、あらかじめご了承のうえご利用ください。

ご注意

  • 汎用表計算ソフトで作ったタイマーっぽいおもちゃという感覚で遊ぶために作ったプログラムです
  • ミリ秒単位の正確性を保証するものではありません
  • 1つのExcelファイルの作業中でのご利用を推奨します
    • 複数のExcelファイル、複数のマクロ、別のアプリケーションとの併用は、自己責任でお願いします
    • 試した範囲だと、別で開いたExcelファイルを閉じたときにタイマーが強制終了してしまうなど、不安定な部分がありました
    • 複数ブック/マクロ/アプリ併用による不具合への対応予定はありません
  • 起動中にパソコンがスリープ状態になった場合は動作対象外です

以下の2つのファイルが入っています。

  • F_Timer.frm
  • F_Timer.frx

インポート

VBEのプロジェクトエクスプローラー内の「VBAProject」を右クリックして「ファイルのインポート」を選択し、「F_Timer.frm」を読み込みます。

プロジェクトエクスプローラーがこのようになっていれば、正しく読み込まれています。

標準モジュールをへコードを書く

ツールバーの「挿入」→「標準モジュール」をクリックします。

挿入した標準モジュールに以下をコピペします。

Sub showTimer()
  F_Timer.Show vbModeless
End Sub

起動

Excel画面で「開発」→「マクロ」または「Alt+F8」キーでマクロウィンドウを表示し、「showTimer」プロシージャを選択して実行します。

タイマーが起動するので、お好きな時間を設定して「スタート/ストップ」して使います。起動中もExcelの操作は可能です。

カスタマイズ

加算時間を変更する

時間を加算するボタンを、好きな間隔に変更することができます。VBEで「F_Timer」をダブルクリックして、好きなボタンのCaptionを変更します。例として「btn_1」を「5分」で解説します。

コード画面で、対象の「Private Sub ボタン名_Click()」のハイライト部分を以下のように書き換えます。5行目のDateAddは、日付や時間を計算する関数です。1ならDateAdd("n", 1, 対象)、1ならDateAdd("s", 1, 対象)のように指定します。

Private Sub btn_1_Click()
  '## ボタン1(5分)クリック時
  
  Dim cnt As Date '計算用変数
  cnt = DateAdd("n", 5, "00:" & Me.txb_display.Value) '加算
  Me.txb_display.Value = Format(cnt, "nn:ss") 'テキストボックスの表示を更新
  inProgress = False '実行中フラグをオフ
  Me.txb_hidden.SetFocus '隠しテキストボックスへフォーカスを移す
End Sub

終了時の音を変更する

デフォルトでは、OSのブザー音が鳴ります。「F_Timer」モジュールの「btn_startstop_Click」プロシージャの、以下の33行目をコメントアウトして34行目のコメントアウトを外すと、WindowsMediaPlayerを起動して任意ファイルの再生へ変更することができます。

34行目前半のC:\Program Files\Windows Media Player\wmplayer.exeはMediaPlayerの起動部分です。たいていの場合はこのまま動くと思いますが、メディアプレイヤーの場所を変更している場合は、その場所を指定してください。

34行目後半のC:\Sample\00.wavが、再生するファイルを指定する部分です。ここを任意のものに変更してください。

Private Sub btn_startstop_Click()
  '## スタート/ストップボタンクリック時
  
  '残り時間がゼロだったら中止
  If Me.txb_display.Value = "00:00" Then Exit Sub
  
  Dim endTime As Date '終了時刻用変数
  If inProgress Then
    '実行中フラグがオンの場合
    inProgress = False '実行中フラグをオフ
  Else
    '実行中フラグがオフの場合
    endTime = DateAdd("n", Left(Me.txb_display.Value, 2), Time) '現在時刻+指定秒
    endTime = DateAdd("s", Right(Me.txb_display.Value, 2), endTime) '現在時刻+指定分
    inProgress = True '実行中フラグをオン
  End If
  
  '隠しテキストボックスへフォーカスを移す(ボタン押し込み状態解除のため)
  Me.txb_hidden.SetFocus

  Dim cnt As Double '計算用変数
  Do Until Not inProgress Or Me.txb_display.Value = "00:00" '実行中フラグがオフまたは残り時間がゼロまで繰り返す
    'テキストボックスの表示を更新
    cnt = DateDiff("s", Time, endTime) '終了時刻-現在時刻
    Me.txb_display.Value = Format(TimeSerial(0, 0, cnt), "nn:ss") '分:秒 で表示
    
    'イベントを実行
    DoEvents
  Loop
  
  '実行中フラグがオンかつ残り時間がゼロだったら音を鳴らす
  If inProgress And Me.txb_display.Value = "00:00" Then
    'Beep 'ブザーを鳴らす
    Shell "C:\Program Files\Windows Media Player\wmplayer.exe C:\Sample\00.wav", vbNormalFocus 'メディアプレイヤーを起動
  End If
  
  inProgress = False '実行中フラグをオフ
End Sub

以上です!

動画のラストでもしゃべっていますが、純粋なタイマー機能としては、スマートフォンなどを使ったほうが使い勝手は良いです。ただ、コードを見て、いじってみるという自作体験はまた面白いものがあるので、ちょっと遊んでみようかな、とか、なにかの参考になりそうだなと感じられたら、試してみてくださいね。

公開日:2023/08/28

8件のコメント

  1. ゴエモン より:

    本文中の 
    ”VBEのプロジェクトエクスプローラー内の「VBAProject」を右クリックして「ファイルのインポート」を選択し、「F_Calendar.frm」を読み込みます。”

    F_Timer.frm の間違いですよね?

    • *yuko より:

      そのとおりです、間違いに気がつかずにすみません! 修正いたしました、ご指摘ありがとうございました!

  2. K.S より:

    yuko 様
    初めて連絡いたします。
    ご丁寧な説明に感謝しております。
    勝手な質問ですが、タイマーが 00:00 になる前(たとえば 3秒前とか5秒前)にBeep音をONするこは可能でしょうか。
    安易に If inProgress And Me.txb_display.Value = “00:03” Then にしてみましたが、反応しませんでした。
    よろしくお願いいたします。 

    • *yuko より:

      コメントありがとうございます。おもしろい使い方ですね。以下のようにしてみてください。

      Private Sub btn_startstop_Click()
        '## スタート/ストップボタンクリック時
        
        '略
      
        Dim cnt As Double '計算用変数
        Do Until Not inProgress Or Me.txb_display.Value = "00:03" '実行中フラグがオフまたは残り時間が00:03まで繰り返す
          'テキストボックスの表示を更新
          cnt = DateDiff("s", Time, endTime) '終了時刻-現在時刻
          Me.txb_display.Value = Format(TimeSerial(0, 0, cnt), "nn:ss") '分:秒 で表示
          
          'イベントを実行
          DoEvents
        Loop
        
        '実行中フラグがオンかつ残り時間が00:03だったら音を鳴らす
        If inProgress And Me.txb_display.Value = "00:03" Then
          Beep 'ブザーを鳴らす
        End If
        
        Do Until Not inProgress Or Me.txb_display.Value = "00:00" '実行中フラグがオフまたは残り時間がゼロまで繰り返す
          'テキストボックスの表示を更新
          cnt = DateDiff("s", Time, endTime) '終了時刻-現在時刻
          Me.txb_display.Value = Format(TimeSerial(0, 0, cnt), "nn:ss") '分:秒 で表示
          
          'イベントを実行
          DoEvents
        Loop
        
        inProgress = False '実行中フラグをオフ
      End Sub
      

      7~14行目で指定時間になるまでループしているので、先に7行目の時間を直しておかないと17行目をスルーしてしまうんです。それだけだと00:03で止まってしまうので、音を鳴らしたあとに00:00までカウントダウンさせたい場合は21~28行目を付け足します。お試しください。

  3. K.S より:

    yuko 様
    ご回答ありがとうございます。
    そもそも今回の話のスタートは、私を含めた気の短い”おやじ”たちの意見からです。
    Beep音が鳴った後では遅すぎる、「その前に知らせよ!」とのことでした。
    VBAについて基礎から学習しますとしか言いようが有りません。
    誠にありがとうございました。

    • *yuko より:

      フィードバックありがとうございます。作ってみたはいいものの需要はあんまりないかなと思っていたので、カスタマイズしたいと思ってもらえるほど使っていただけて嬉しいです! こちらこそありがとうございました。

  4. K.S より:

    yuko 様
    時報.wav (ピッ・ピッ・ピッ・ピー 00:00時、ピー) 及び カウントダウン.wav(3・2・1・0 00:00時、0)は好評です。
    今後の検討内容は、ユーザーフォーム上に ”複数のカウントダウンタイマーを表示・操作” です。
    私どもにとっては、難易度がかなり高い内容ですが検討中です。
    カウントダウンのスタートは同時が前提です。
    (中にはあきらめている人も・・・)

    • *yuko より:

      興味があって試してみたのですが、showTimerプロシージャを以下のように書けばフォームの複数起動は可能です。

      Sub showTimer()
        Dim myForm As F_timer
        Set myForm = UserForms.Add("F_timer")
        myForm.Show vbModeless
      End Sub
      

      ただ、複数タイマーも動作はするようですが、画面更新されるのが1つだけのようで、秒数のカウントダウンが目に見えるのは1つのフォームだけになってしまうので、実用するには厳しいかと思います。ご希望に添えずにすみません。


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

コメントは承認制ですので、反映までしばらくお待ち下さい。(稀にスパムの誤判定にて届かないこともあるようですので、必要な際はお問い合わせからお願い致します。)

YouTubeでQ&Aコンテンツを企画しています

運営しているYouTubeチャンネルで、ご相談やご質問を募集しています。動画のコメントやお問い合わせページからお気軽にご相談をお寄せください。