ExcelマクロVBAサンプル集 | 時刻になったら音を鳴らして知らせる(OnTime) | Excelマクロの実用サンプル、エクセルVBA集と解説



最終更新日:2013-05-14

時刻になったら音を鳴らして知らせる(OnTime)


エクセル作業に夢中になって、時間を忘れて大慌てって事ありませんか。

えっ、無い、そうですか、ではさようなら・・・

あると言う人は以下のプログラムをどうぞ。

まず、このようなシートを作ります。




そして、標準モジュールに以下を追加します。

Sub 時刻で起動()  On Error Resume Next
  With ThisWorkbook.ActiveSheet
    Dim i As Long
    For i = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
      If .Cells(i, 1) <> "" And .Cells(i, 2) <> "" Then
        If .Cells(i, 2) >= Now And _
          .Cells(i, 3) <> "済" Then
          Application.OnTime .Cells(i, 2), "メッセージ表示"
          Exit For
        End If
      End If
    Next
  End With
End Sub

Private Sub メッセージ表示()
  Dim i As Long, j As Long  On Error Resume Next
  With ThisWorkbook.ActiveSheet
    For i = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
      If .Cells(i, 1) <> "" And .Cells(i, 2) <> "" Then
        If .Cells(i, 2) <= Now And _
          .Cells(i, 3) <> "済" Then
          .Cells(i, 3) = "済"
          Beep
          MsgBox (.Cells(i, 1))
          Exit For
        End If
      End If
    Next
    Call 時刻で起動
  End With
End Sub

Application.OnTime 起動時刻, "起動するマクロ"

これで、「起動時刻」になると、「起動するマクロ」が、起動されます。

Beep
は、ビープ音がなります。

沢山鳴らしたい時は、ダミーのカウントアップ等でループさせて、

一定時間をおいて、Beepを実行すれば、何回も続けて鳴らす事ができます。

または、Application.Waitで待たせる方法でも良いです。

(現在の高速なPCでは、間隔をあけずに連続Beepでは1回しか鳴りません。)

また、MsgBoxの表示時にも音がなりますので、どちらかで良いです。

この間に、他のブックを扱っていても問題はありません。

その為のプログラムですからね。

ただし、数式バーで入力中の時は、その状態が解除されるまで、この処理は待たされます。

セルへの入力終了直後に起動されることになります。

注意
このようなマクロを裏で動かしている場合は、

作業中のブックは普段以上に、こまめに保存して下さい。

このプログラムの異常で作業中のブックを道連れに死ぬことのないように、

念の為、On Error Resume Nextを入れています。

ここでは、指定時刻にしていますが、

指定時間後にしたければ、

Now + Timevalue("1:0:0")、これなら1時間後になります。

これを、Application.OnTimeに指定すれば良いです。

ビープ音が鳴らないと言う人がいると思われます。

私のノートPCもなりません

サウンドの設定等を見ても問題なし、コマンドプロンプトで「echo ^G」(^GfCtrl+G)では、ビープ音がする。

はっきり言って、Windowsに問題ありなんだと思います。

自分でセットアップして、さらにいろいろソフトを入れたりしているPCでは、鳴らないPCもあるようです。

その場合は、以下のように、APIを使って音をならします。

Option Explicit
Public Declare Function Beep Lib "kernel32" (ByVal dwFreq As Long, ByVal dwDuration As Long) As Long
Sub 時刻で起動()
  ・・・ここは上と同じEnd Sub
Private Sub メッセージ表示()
  ・・・  CallBeep 'ここだけ修正、Beep→CallBeep
  ・・・End Sub
Private Sub CallBeep()
  Call Beep(500, 250)
End Sub

これで鳴るようになります。

これでも鳴らなかったら、サウンドが壊れています。

Beep(500, 250)
は、第1引数が音の周波数、第2引数が鳴らすミリ秒です。

この周波数と、時間、間隔をいろいろ組み合わせると、音楽が作れるらしいのですが、

私には、その才能のかけらもありません、つまり音痴です。(笑)

本来は、時間を意識して、作業はするべきでしょうね、

この作業は、何時間で、何時まで、と決めてやるのが正しいでしょう。

でもね、人間だから、気が付いたら、時間が過ぎてたって事もありますからね。

特に集中していると、時間を忘れちゃいますよね。





同じテーマ「ExcelマクロVBAサンプル集」の記事

指定文字、指定数式でジャンプ機能(Union)
「値の貼り付け」をショートカットに登録(OnKey)
「セルの結合」をショートカットに登録(OnKey)
半角カナのみ全角カナに変換する
計算式の元となる数値定数を消去する(Precedents)
Beep音で音楽(Beep,Sleep)
日付の検索(配列の使用)

新着記事 ・・・新着記事一覧を見る

SUMIFの間違いによるパフォーマンスの低下について|エクセル関数超技(6月17日)
条件式のいろいろな書き方:TrueとFalseの判定とは|ExcelマクロVBA技術解説(6月15日)
空白セルを正しく判定する方法2|ExcelマクロVBA技術解説(5月6日)
フルパスをディレクトリ、ファイル名、拡張子に分ける|ExcelマクロVBA技術解説(4月15日)
テキストボックスの各種イベント|Excelユーザーフォーム入門(4月9日)
フォルダ(サブフォルダも全て)削除する、Optionでファイルのみ削除|ExcelマクロVBAサンプル集(4月4日)
最後の空白(や指定文字)以降の文字を取り出す|エクセル関数超技(3月26日)
先頭の数値、最後の数値を取り出す|エクセル関数超技(3月26日)
Excelファイルを開かずにシート名をチェック|ExcelマクロVBAサンプル集(3月23日)
数式の参照しているセルを取得する|ExcelマクロVBAサンプル集(3月18日)

アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|ExcelマクロVBA入門
2.RangeとCellsの使い方|ExcelマクロVBA入門
3.徹底解説(VLOOKUP,MATCH,INDEX,OFFSET)|エクセル関数超技
4.Range以外の指定方法(Cells,Rows,Columns)|ExcelマクロVBA入門
5.変数とデータ型(Dim)|ExcelマクロVBA入門
6.セルのコピー&値の貼り付け(PasteSpecial)|ExcelマクロVBA入門
7.セルの参照範囲を可変にする(OFFSET,COUNTA,MATCH)|エクセル関数超技
8.ひらがな⇔カタカナの変換|エクセル基本操作
9.定数と型宣言文字(Const)|ExcelマクロVBA入門
10.CSVの読み込み方法|ExcelマクロVBAサンプル集



  • >
  • >
  • >
  • 時刻になったら音を鳴らして知らせる(OnTime)

  • このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


    記述には細心の注意をしたつもりですが、
    間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
    なお、掲載のVBAコードは自己責任で使ってください。万一データ破損等の損害が発生しても責任は負いません。

    ↑ PAGE TOP