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)
日付の検索(配列の使用)

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

ファイルの一覧取得・削除(File)|Google Apps Script入門(1月24日)
フォルダの一覧取得・作成・削除(Folder)|Google Apps Script入門(1月24日)
フォルダとファイルを扱う(DriveApp)|Google Apps Script入門(1月24日)
スプレッドシートが非常に遅い、高速化するには|Google Apps Script入門(1月17日)
画像のトリミング(PictureFormat,Crop)|ExcelマクロVBAサンプル集(12月27日)
シート保護|Google Apps Script入門(12月24日)
表示の固定|Google Apps Script入門(12月24日)
グラフ|Google Apps Script入門(12月21日)
入力規則|Google Apps Script入門(12月13日)
並べ替え|Google Apps Script入門(12月12日)

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

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



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

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


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

    ↑ PAGE TOP