- ベストアンサー
Excelの計算結果で音を1回で止める方法
- 計算結果で音を1回で止める方法を教えてください。以前、こちらで教えてもらったものを使わせてもらっているんですが、これを少し改造したいんですが、色々イジってもわかりませんでしたのでご教授ください。
- A3やA7の計算結果で、注文数が在庫数を超えるとセルの表示が変わり、各種設定した各フルーツ追加の音が鳴る設定なんですが、ブドウ注文数4個になり、ブドウ在庫数3個を超えるとセルの表示がブドウ追加となり、ブドウ追加!と音が鳴るんですが、更にブドウが5個6個と追加されると、ずっとブドウ追加!と音が鳴り続けます。これをブドウ追加!と音が鳴ったら、それでブドウ追加音は鳴らないようにしたいんです。バナナが追加状態になった場合も、バナナ追加!と1回鳴って、それ以降、バナナ追加が続いても音は終了と。つまりA3やA7の計算結果1個につき、1回で音は終了にしたいんです。
- Excel2003のBOOK1の中での計算結果で音を1回で止める方法を教えてください。ブドウ注文数2個(RSSによりランダムでリアルタイムで変わる)、ブドウ在庫数3個(固定数字)、バナナ注文数2個(RSSによりランダムでリアルタイムで変わる)、バナナ在庫数3個(固定数字)の計算結果で、注文数が在庫数を超えるとセルの表示が変わり、各種設定した各フルーツ追加の音が鳴る設定なんですが、ブドウ注文数4個になり、ブドウ在庫数3個を超えるとセルの表示がブドウ追加となり、ブドウ追加!と音が鳴るんですが、更にブドウが5個6個と追加されると、ずっとブドウ追加!と音が鳴り続けます。これをブドウ追加!と音が鳴ったら、それでブドウ追加音は鳴らないようにしたいんです。バナナが追加状態になった場合も、バナナ追加!と1回鳴って、それ以降、バナナ追加が続いても音は終了と。つまりA3やA7の計算結果1個につき、1回で音は終了にしたいんです。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
関数を使わずにChangeイベントで処理しました。 '標準モジュールに '↓Privateを外しています Declare Function PlaySound Lib "winmm.dll" Alias "PlaySoundA" ( _ ByVal lpszName As String, _ ByVal hModule As Long, _ ByVal dwFlags As Long) As Long '↓PrivateをPublicに変更 Public Const SND_SYNC As Long = &H0 ' 同期再生 Public Const SND_ASYNC As Long = &H1 ' 非同期再生 Public Const SND_PURGE As Long = &H40 ' 再生停止 'シートモジュールに Private Sub Worksheet_Change(ByVal Target As Range) Dim WaveFileName As String With Target If .Count > 1 Then Exit Sub If .Address = "$A$1" Then If Range("A1").Value > Range("A2").Value Then If Range("A3").Value <> "ブドウ追加" Then Range("A3").Value = "ブドウ追加" WaveFileName = "G:\着信ボイス\koke.wav" End If Else Range("A3").Value = "在庫あり" End If ElseIf .Address = "$A$5" Then If Range("A5").Value > Range("A6").Value Then If Range("A7").Value <> "バナナ追加" Then Range("A7").Value = "バナナ追加" WaveFileName = "G:\着信ボイス\koke.wav" End If Else Range("A7").Value = "在庫あり" End If End If End With If WaveFileName <> "" Then Call PlaySound(WaveFileName, 0&, SND_SYNC) End Sub
その他の回答 (5)
- watabe007
- ベストアンサー率62% (476/760)
>セルはそのままでいいんですもんね↓ >A3のセルの関数↓ >=IF(A1>A2,"ブドウ追加"&PlayWave("C:\Sound\ブドウ追加音.wav"),"在庫あり") もう一度だけ言います。!! 私のUPしたコードではA3セルには関数は使いません A3及びA7の関数は消してください。 以下のコードをシートモジュールに貼り付けてください (シートモジュールが解らなければネットで調べてください。) Private Sub Worksheet_Change(ByVal Target As Range) Dim WaveFileName As String With Target If .Count > 1 Then Exit Sub If .Address = "$A$1" Then If Range("A1").Value > Range("A2").Value Then If Range("A3").Value <> "ブドウ追加" Then Range("A3").Value = "ブドウ追加" WaveFileName = "C:\Sound\ブドウ追加音.wav" End If Else Range("A3").Value = "在庫あり" End If ElseIf .Address = "$A$5" Then If Range("A5").Value > Range("A6").Value Then If Range("A7").Value <> "バナナ追加" Then Range("A7").Value = "バナナ追加" WaveFileName = "C:\Sound\ブドウ追加音.wav" End If Else Range("A7").Value = "在庫あり" End If End If End With If WaveFileName <> "" Then Call PlaySound(WaveFileName, 0&, SND_SYNC) End Sub
- watabe007
- ベストアンサー率62% (476/760)
こんばんは 今、自宅PC WindowsXP Excel2002で確認しましたが こちらでは、問題なく動作しています。 一度、新規ブックで試されては如何でしょうか >A3のセルが在庫ありの表示から#NAME?に変わり、音も鳴りません。 関数名が正しくないために#NAME?というエラーがでているのです。 私のUPしたコードではA3セルには関数は使いませんが? Changeイベントをシートモジュールに貼り付けていますか?
お礼
watabe007さん、度々ありがとうございます。 セルはそのままでいいんですもんね↓ A3のセルの関数↓ =IF(A1>A2,"ブドウ追加"&PlayWave("C:\Sound\ブドウ追加音.wav"),"在庫あり") うむむむ、新規でやっても#NAME?になってしまいます。。。 何度もチャレンジしてみます。凡ミスなどないかも再度確認します!
- watabe007
- ベストアンサー率62% (476/760)
No.3です WaveFileName = "G:\着信ボイス\koke.wav" ↓ファィル名を変更してくださいね WaveFileName = "C:\Sound\ブドウ追加音.wav"
お礼
watabe007さん、できました! 完全に凡ミスでした! ちゃんと1回鳴ったら、次はその数を超えても鳴りません! しかも、追加もできるし、音声もそれぞれ変えれる 完璧ですッ、、、本当にありがとうございます。 感謝感謝感謝です!良かったぁ、ホントにありがとうございます!
- imogasi
- ベストアンサー率27% (4737/17069)
>=IF(A1>A2,"ブドウ追加"&PlayWave("C:\Sound\ブドウ追加音.wav"),"在庫あり") のような書き方で音を鳴らすのは、私のレベルでは理解できない。 質問の目的を誤解していたら無視してください。 ーー 別の方法で Sheet1のシートのChangeイベントで Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$A$1" Or Address = "$A$2" Then If Range("A1") > Range("A2") Then Beep End If End If End Sub で A1セルの値がA2セルに値より大に変化したとき、Beep音を1回ならす、 ではダメなのであろうか。 Beepの行は Application.Speech.Speak "Currency Up" 'Range("C1").Speak など音声が聞こえるなどもできる。 For NextでBeep行を繰り回せば少し長い時間鳴る。 鳴ったままということはない。 ーー A1,A2の値が変化したにしても A2>A1の状態からA2<A1に変わったときだけ鳴らすことも 出来ると思う。A1,A2の値の大小関係が変化したときだけ鳴らすこと。 「大小関係が変化しない変化」では鳴らさないということ。 A1,A2の一回前の値を覚えて置けば出来そう。
お礼
imogasiさん、回答ありがとうございます。 >=IF(A1>A2,"ブドウ追加"&PlayWave("C:\Sound\ブドウ追加音.wav"),"在庫あり") のような書き方で音を鳴らすのは、私のレベルでは理解できない。 上記は勿論、マクロがあっての話ですので。 あとBEEP音ではちょっとダメなので。 でも回答頂いただけでありがたいです。
- ASIMOV
- ベストアンサー率41% (982/2351)
私の環境で確認できないので、参考という事で... 一度、鳴らしたら、その音の名前を記憶しておき、前の名前と同じならパスします 名前を記憶するために、セルを一個使用します 仮に「A10」とします(都合が悪ければ変えてください) ------------------------------------------ Public Function PlayWave(ByVal WaveFileName As String) As String ' @引数 WaveFileName : 再生する Wave ファイル名 ' 必ず長さ0の文字列を返す if cells("A",10) <> WaveFileName then '追加 Call PlaySound(WaveFileName, 0&, SND_SYNC) PlayWave = vbNullString cells("A",10) = WaveFileName '追加 endif '追加 End Function -------------------------------------- 3行追加します ちょっと副作用があります 終了時にブックを上書きすると、最後の音の名前が残ってしまいます 上書きの前に「A10」を消すか Private Sub Workbook_Open() cells("A",10)="" End Sub を、入れておくと、起動時に消してくれます
お礼
ASIMOVさん、少し訂正です。 ASIMOVさんの3行を入れて、 エクセルのA1部分に4と入れると A3の部分が#VALUE!に変わります。 通常なら、 エクセルのA1部分に4と入れると A3の部分がブドウ追加となり、ブドウ追加音が鳴ります。 ※再度、A1に4と入れたり、5と入れたりすると、またブドウ追加音が鳴ります。これを1回鳴ったら、2回目は鳴らないようにしたいんです。
補足
ASIMOVさん、回答ありがとうございます。 早速やってみたのですが、3行追加した時点で、 A3やA7の計算結果の部分(音が出る、出ない部分)が #VALUE!となってしまい、音も一回も出ない状態です。 A3やA7の計算結果の部分なので、A10をA3にしてダメでした。 (A10のままでもダメでした) たぶん、すごくもうちょっとって感じだと思うんですが、、、
お礼
watabe007さん、回答ありがとうございます。 (以前も回答くれてますよね、感謝です) もらった回答のものを貼り付けて、 WaveFileNameを変えて、A1の所へ4と入れてやってみたんですが、 A3のセルが在庫ありの表示から#NAME?に変わり、音も鳴りません。 ※通常なら、A1の所に4を入れると A3のセルがブドウ追加と表示が変わり、ブドウ追加音が鳴ります。