• ベストアンサー

エクセルのマクロでアラームを作成したいのですが

条件がそろったらアラーム音を出してくれるマクロを作りたいです。 どなたか教えて頂けたら幸いです。 内容としてはエクセルの計算式でAとBの2つの数字を使います。 A,B共に3~-3の間を0.1づつ変動しています。 条件は 1 AB共にプラスの状態でBがAより大きくなった瞬間にアラームを出す。 2 AB共にマイナスの状態でBがAより小さくなった瞬間にアラームを出す。 この2つの時にアラーム音を出したいのです。 どうかよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • sample_
  • ベストアンサー率76% (20/26)
回答No.1

Option Explicit Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long Private Const FILE_NAME As String = "C:\WINDOWS\Media\chimes.wav" Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$B$1" _ Or Target.Address = "$B$2" Then Call Check End Sub Sub Check() 'Aの値はB1に入っているとし 'Bの値はB2に入っているとする Dim A_Value As Integer: A_Value = Range("B1") Dim B_Value As Integer: B_Value = Range("B2") '指定された範囲の数字が入っているかのチェックは省略 '正×正 0以上 負×負 0以上なので If 0 < A_Value * B_Value Then 'アラームを鳴らす条件 If (0 < A_Value And A_Value < B_Value) _ Or (A_Value < 0 And B_Value < A_Value) Then 'アラームを鳴らす Call mciSendString("play """ & FILE_NAME & """", "", 0, 0) End If End If End Sub 前提: シートモジュールに記載しました。 B1にAの値 B2にBの値が入っていると過程し、-3~3の値のどれかが入力されているとしました。 (細かいチェックとかは省略していますということです。) 値を入力した際のChangeイベントをトリガーにアラームをならす条件に該当するかチェックし WindowsAPIを使って音をならしています。 mciSendString関数をネットで検索するとぽろぽろ情報がひっかかると思います。 コードの流れはこんな感じです。 もうちょっと細かい説明 ・Private Declare Function mciSendString ~ WindowsAPIを使いたいので宣言(Declare)してmciSendString関数が使えるようにしています。 ・Private Const FILE_NAME As String~ 今回アラームとして使ったサウンドです。 windowsXPに入っている標準の音を使っています。 ・Private Sub Worksheet_Change~ シート内の値変化をトリガーに利用するためこのイベントを使っています。 ・ If Target.Address = "$B$1" _ Aの値、Bの値は B1,B2に記載しているのでそれらの時だけ、値チェックするようにしています。 ・Sub Check()~ A、Bの値をチェックし条件をみたすとき音をならす関数です。 ・Dim A_Value~ A、Bの値を取得しておきます。 ・If 0 < A_Value * B_Value Then 両者が正の時 A<Bの時と 両者が負の時 B<Aの時を調べたいので 両者が正、または負の時はかけ算をすると必ず0以上になるのでこれで判定しています。 ・If (0 < A_Value And A_Value < B_Value)~ 両者が正 かつ AよりBが大きいとき ・Or (A_Value < 0 And B_Value < A_Value) Then または、両者が負の時で AよりBが小さい時 ・Call mciSendString("play """ & FILE_NAME & """", "", 0, 0) 音をならす 以上

perrault
質問者

お礼

誠にありがとうございます! おかげさまで問題が解決して本当に助かりました! 初めての質問投稿でしたがここまで詳しく丁寧にご返答頂けるとは思ってもみませんでした。 お礼申し上げます!

関連するQ&A