• ベストアンサー

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

条件がそろったらアラーム音を出してくれるマクロを作りたいです。 どなたか教えて頂けたら幸いです。 内容としてはエクセルの計算式で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

  • エクセルで…関数かマクロか?

    エクセル2007を使っています。 3列のシートがあるとしますね。 それぞれの列は、「A 現金残高」、「B 収入」、「C 支出」とします。 たとえば、3行目から数値を入れるとします。 普通ならば、B3 (収入)のセルに 1000(円) と数字を打ち込めば、 A3 (現金残高)のセルに同じく 1000が入るよう、=B3 とすればいいと思います。 同様に、C3のセルに1000と入力すれば、 A3のセルには -1*(C3) とすることで、現金残高が収入と支出によって、 プラスマイナスされるようにし、あとで各列を∑すれば済みますね。 でも、いま僕がやりたいのは、 たとえば現金残高 A3のセルに -1000 と入力すると、自動的に C3のセルに 1000 と 表示され、A3に 1000 と入力すると、 B3のセルに 1000と表示されるようにしたいのです。 要するに、現金残高に入力した数値がプラスかマイナスかによって、 数字が表示されるセルを個別に指定し、指定したセルに計算結果を表示させたいわけです。 IF関数で、数値のプラスマイナスは判断できますが、任意のセルを指定させる方法が わかりません。 「もし…だったら 『任意のセルに』○○せよ」  というような指定はできるのでしょうか? もしくは、マクロを使わないとできないのでしょうか? いろいろサイトも調べてみましたが、力不足で回答にたどり着くことができませんでした。 よろしくご教授お願いいたします。

  • 【エクセル】マクロ

    すみません。 エクセルのマクロのプログラム教えてください。 セルA1~A30に 「1」~「5」のいずれかの数字が 入っています。 そのA列の数字をもとにB1~B30のセルの書式を 変えたいと思っています。 例えば、「1」なら赤色、「2」なら青色、「3」なら緑色・・・ となるように考えています。 for文で1~30まで繰り返し、if文とswitch文で実行すると 思うのですが、どのようなプログラムを書けばいいですか? よろしくお願いします。 3種類なら条件式書式が使えるのですが、4種類以上だと使えないので マクロで実行しようと思っています。

  • エクセルでマクロの作成

    a列の1行目が『No』の項目名以下の行が空欄になっています。 b列に『あ』があれば同じ行のa列を空白にして、次のb行が空欄であれば同じ行のa列に1の数字を、b列の空白行に対しa列には連続番号が入るようにしたいのですが、マクロがどうしてもうまくできません。 どなたか、初心者向けに解りやすい解説と実際のマクロを教えていただけませんか? 初心者でうまく説明できてないかもしれませんがよろしくお願いします。

  • エクセルマクロについてです

    以下のようなマクロで、条件A1~A4のいずれかを満たした場合は、その時点でFor-Nextを抜け(例えばi=1のときにどれかの条件を満たせばi=2,3,4は検討しない)、 さらにNの数字が増えたときに、If以下の検討をするとき、条件A1~A4の中で既に満たされた条件が含まれている行は無視する、 というようにしたいのですが、どのようにすればよいでしょうか。 N=0 Do Until N = 10 For i = 1 To 4    If 条件A1 Then B1        ElseIf 条件A2 Then B2        ElseIf 条件A3 Then B3      ElseIf 条件A4 Then B4      EndIf Next i N = N + 1 Loop

  • エクセルのマクロで教えてください

    エクセルのマクロで教えてください A1に入っている値が変化するごとにD列に順にその変化を出力していきたいのですが マクロではどのようにしたらいいでしょうか A1には=C1+C2というような計算式が入っていてC2の数字を変えて計算結果が変わるごとに出力したいのですが

  • Excelのマクロ作成について

    電車の時刻表がありまして   A   B    C    D    E    F    G    H    I    J    K    L    M    N 1  2 あ       1054  1425  1555  1725 3 い   0   1059  1430  1600  1730 4 う   5   1104  1235  1435  1505  1605  1735 5 え   7   1105  1237  1437  1507  1607  1737 6 お   9   1108  1239  1439  1509  1608  1739 7 か       1110  1240  1430  1440  1510  1610  1740  1840 8 き 9 く A列は駅の名前、B列の数字は0と入力した駅からそれぞれの駅までの平均的な所要時間でC列以降は時刻です(:は抜いて対応) マクロで作りたいことは、 0と書かれた行の時刻を1セルずつ見ていき、そのセルに色を付けます。 次にB列の最終行の数字の所までそれぞれ足して合致していいるものがあれば色を塗る。 もし途中で合致しないものがあればその瞬間今まで色を塗っていたものを元の状態(色を塗っていたものを全て真っ白)に戻して次のセルを見ていき、最後のセルまで行う。 上の例の場合 (1)まず0と書かれた行の最初のセルC3を見て確認のため色を付けます。 (2)次にC3とB4の時刻を足して合致するものが4行目にあれば色を付けます。このときC4に1104がありますので色を付けます。 (3)今度はC3とB5の時刻を足して合致するものが5行目にあれば色を付けるのですが、このとき5行目には1106はないので、この瞬間、C3とC4に付けた色をデフォルトの状態にし以降のチェックは行わず、D3のチェックに移ります。 (4)次はD3に移り、C列同様、D3とB4~B6の時刻を足したものがそれぞれ4行目、5行目、6行目にあるかチェックします。省きますが、全部あるのでD3、E4、E5、E6に色が付き、E3に移ります。 (5)E3も同様に行います。E3とB4~B5の時刻を足して対応したものがそれぞれ3行目、4行目にあるのですが、E3+B6の時刻が6行目には無いのでE3、G4、G5の塗ったセルをもとに戻し、F3に移動します。 (6)F3に移動し以下同様です。対応するものがあるのでF3、H4、H5、H6に色が付き、0と書かれた行の最終行なので処理が終了します。 ※B列の平均所要時間はいつもB3から入れるわけではなく、ケースバイケースで変わってきます。 一応、この例をマクロを使って無事動いた時の画像も載せておきます といったマクロを作りたいのですが、初心者のため手も足も出ません。 時間もないので、マクロ作成に自信のお有りの方、もしよろしければこれを実装するためのコードを教えて頂けないでしょうか? 丸投げで誠に申し訳ございません。 長文失礼足しました。

  • エクセルのマクロについて教えてください。

    エクセルのマクロについて教えてください。     a b c d A   1 2 3 4 B  5 6 7 8    ↓    aA1    bA2    cA3    dA4    aB5    bB6    cB7    dB8 という並びになるようにしたいので、よろしくお願いします。

  • エクセル マクロ

    エクセルを使って12桁の数字をsheet A と sheetBとの違いを調べる、表?をつくりたいのですが、マクロを使えば簡単と聞きました、マクロは全くわからないので、マクロを使わなくてもいいのですが、良い方法はありますか?  例えば エクセルの sheet A に 12桁の数字を50, sheet Bに12桁の数字を50, その中からsheetAにはあってsheetBには無いもの、sheetAには無くてsheetBには有るもの を色をつけてわかるようにしたいと思っています。 みなさんよろしくお願いいたします。

  • エクセルのマクロ

    セルA1に、a2からa90までの任意の文字を入力した後にマクロを実行します。 セルA1にa7と入力されている時はセルB1にa6と表示され、セルA1にa86と入力されている時はセルB1にa85と表示されるようなマクロを教えてもらいたいのですが。 B1は必ずA1の数字の部分が1つ少なくなるということです。      

  • エクセルかマクロで・・・

    エクセル関数かマクロで作りたいのですが、   A列に数字B列に個数を入力していくとします。   A列の数字をB列の個数分だけC列に表示したいのです。  例えばA1に300、B1に5、A2に500、B2に6と入力した場合、   C1からC5に300、C6からC11に500、と表示するにはどうしたらよい  でしょうか。 よろしくお願いいたします。

BOSS DD-2のランプが消える
このQ&Aのポイント
  • 昔の古いエフェクターBOSS DD-2で、インジケーターランプが点灯してすぐに消えてしまう現象が発生しています。
  • DCアダプターが中古品であることや、他のエフェクターとの接続方法も関係している可能性があります。
  • 9V電池を使用すると正常に作動するため、DD-2の故障ではなく電源の問題かもしれません。
回答を見る