ExcelマクロVBAサンプル集 | 時刻になったら音を鳴らして知らせる(OnTime) | ExcelマクロVBAの実用サンプル、エクセル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引数が鳴らすミリ秒です。

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

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

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

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

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

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





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

ユーザー定義関数でフリガナを取得する(GetPhonetic)
ユーザー定義関数でハイパーリンクのURLを取得(Hyperlink)
カラーのコード取得、256RGB⇔16進変換
時刻になったら音を鳴らして知らせる(OnTime)
指定文字、指定数式でジャンプ機能(Union)
「値の貼り付け」をショートカットに登録(OnKey)
「セルの結合」をショートカットに登録(OnKey)
半角カナのみ全角カナに変換する
計算式の元となる数値定数を消去する(Precedents)
Beep音で音楽(Beep,Sleep)
日付の検索(配列の使用)

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

数値範囲で表検索するVLOOKUP近似一致|エクセル関数超技(10月5日)
エクセルVBAでのシート指定方法|VBA技術解説(9月8日)
VBAのクラスとは(Class,Property,Get,Let,Set)|VBA技術解説(8月28日)
VBAこれだけは覚えておきたい必須基本例文10|VBA技術解説(8月22日)
VBAの省略可能な記述について|ExcelマクロVBA技術解説(8月11日)
複数条件判定を行う時のコツ|ExcelマクロVBA技術解説(7月11日)
For Next の使い方いろいろ|VBA技術解説(6月14日)
VBAを定型文で覚えよう|ExcelマクロVBA技術解説(3月26日)
VBAスタンダード試験対策まとめ|MOS VBAエキスパート対策(3月16日)
ユーザーフォームとメニューの操作|MOS VBAエキスパート対策(3月14日)

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

1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.変数とデータ型(Dim)|ExcelマクロVBA入門
4.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
5.RangeとCellsの使い方|ExcelマクロVBA入門
6.定数と型宣言文字(Const)|ExcelマクロVBA入門
7.ひらがな⇔カタカナの変換|エクセル基本操作
8.マクロって何?VBAって何?|ExcelマクロVBA入門
9.繰り返し処理(For Next)|ExcelマクロVBA入門
10.とにかく書いて見よう(Sub,End Sub)|VBA入門



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

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


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





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

    本文下部へ

    ↑ PAGE TOP