• ベストアンサー

別々のセルで音を鳴らせる設定

皆さん、すいません、4つ下ぐらいのところで質問をした者ですが、 もう一つだけご教授ください。 先ほどは、 BOOK1の中で セルA1にテストという文字が入ったらテスト.wavが鳴る というものをしたくて教えてもらって、うまくいったのですが、 本当にやりたいのは下記のようなことなんです。 ※一つ教えてもらったら、応用していけると思ったんですが、力不足、知識不足で無理でした、、 BOOK1の中で セルA1にテストという文字が入ったらテスト.wavが鳴る セルA2にトマトという文字が入ったらトマト.wavが鳴る セルA3にバナナという文字が入ったらバナナ.wavが鳴る セルA4にブドウという文字が入ったらブドウ.wavが鳴る ご教授できましたら、お願いします。 ----------↓先ほど教えてもらったものです↓--------- (1)標準モジュールに Public Declare Function Beep Lib "kernel32" (ByVal dwFreq As Long, ByVal dwDuration As Long) As Long (2)シートモジュールのChangeイベントに Private Sub Worksheet_Change(ByVal Target As Range) With Target '変化したセルがA1以外ならExit If .Address <> "$A$1" Then Exit Sub '変化した値に"テスト"が含まれていなければExit If Not .Value Like "*テスト*" Then Exit Sub End With Shell "mplay32.exe /play /close c:\サウンド\テスト.wav" End Sub

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

  • ベストアンサー
  • watabe007
  • ベストアンサー率62% (476/760)
回答No.4

Private Sub Worksheet_Change(ByVal Target As Range)   With Target     '一度に複数のセルの値が変化した時はExit     If .Count > 1 Then Exit Sub     '変化したセルがA1:A4のハインに無ければExit     If Intersect(.Cells, Range("A1:A4")) Is Nothing Then Exit Sub     Select Case True       Case .Value Like "*テスト*"         Shell "mplay32.exe /play /close c:\サウンド\テスト.wav"       Case .Value Like "*トマト*"         Shell "mplay32.exe /play /close c:\サウンド\トマト.wav"       Case .Value Like "*バナナ*"         Shell "mplay32.exe /play /close c:\サウンド\バナナ.wav"       Case .Value Like "*ブドウ*"         Shell "mplay32.exe /play /close c:\サウンド\ブドウ.wav"       End Select     End With End Sub

mensgoo
質問者

お礼

watabe007さん、前回も、今回もありがとうございます! 上の方が言ってる通り、他の皆さんが言ってる通り、 あえて答えを教えず、ヒントを与えるからあとは 自分で調べる、勉強して解決しなさい!という メッセージが含まれていたのは重々承知でした。 ここに質問する前には、自分なりに調べて、 これはどうしようもないって時だけ頼るようにしてるんですが、、、 watabe007さん、その他の皆さんに 甘えてしまって本当に申し訳ありませんでした。 でもまたまた助かりました!本当にありがとうございます! (もっともっと勉強します)

その他の回答 (4)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.5

先ほどの質問のヒントで応用できなければねえ。 質問者はもう少し勉強しないと丸投げ要求になってしまう。 Beep音ならAPIを使わなくても、Beepで音が出ると思うが。 Sheet1のシートのChangeイベントに Private Sub Worksheet_Change(ByVal Target As Range) MsgBox Target.Address Select Case Target.Address '-- Case "$A$1" If Target.Value Like "*テスト*" Then MsgBox "テスト" Dim WrkSndFile As String WrkSndFile = "C:\Documents and Settings\All Users\Documents\My Music\Sample Music\Beethoven's Symphony No. 9 (Scherzo).wma" 'PlaySound WrkSndFile, 0, SND_ASYNC Shell "mplay32.exe /play /close " & WrkSndFile End If Exit Sub '-- Case "$A$2" If Target.Value Like "*トマト*" Then MsgBox "トマト" End If '-- Case "$A$3" If Target.Value Like "*バナナ*" Then MsgBox "バナナ" End If End Select End Sub ーー 曲は適当な.wmaの曲などで変えてください。 曲を探すのが、面倒で、A1セルしか設定して無いが、A1セルに「テスト」を含む文字を打ち込むと、私の場合は有名な曲が流れました。実際に曲が質問者のパソコンに無いとコピペして実行してもダメなことは判りますね。 お遊びです。 上記はA2,A3セルはMsgboxの表示だけ。 好きなように変えてください。

mensgoo
質問者

お礼

imogasiさん、またも回答ありがとうございます。 下記の回答にも書いたのですが、 簡単に答えを教えず、ヒントだけ。 それからは自分の力で頑張りなさい! そうじゃないと力がつかない、というのは 本当に理解しています。 丸投げ状態のような形になってしまい すいませんでした。 でもとてもとても参考になりました。 ありがとうございました!

  • nagare
  • ベストアンサー率33% (280/831)
回答No.3

If .Address <> "$A$1" Then Exit Sub を見落としてました A1~4用にしないといけませんね 論理演算子を使いましょう

mensgoo
質問者

お礼

nagareさん、またもやありがとうございます。 論理演算子ですね、 と、いっても全然わかってないので、調べてみます!

回答No.2

今回は、素直にIf・・ElseIf・・Else文などで >セルA1にテストという文字が入ったらテスト.wavが鳴る をコードにすればいいでしょう。 その方法は、前回の回答でみなさんが十分に示しています。

mensgoo
質問者

お礼

cistronezkさん、回答ありがとうございます。 >If・・ElseIf・・Else うむ~、難しいですが、調べて頑張ってみます

  • nagare
  • ベストアンサー率33% (280/831)
回答No.1

If Not .Value Like "*テスト*" Then Exit Sub End With Shell "mplay32.exe /play /close c:\サウンド\テスト.wav" これだと”テスト”以外の場合、Exitしてしまいます あと少しなので、がんばってください

mensgoo
質問者

お礼

nagareさん、回答ありがとうございます。 頑張ってみます!

関連するQ&A

  • 特定のセルの表示が変わったら音を鳴らしたい!

    例えばですが、 BOOK1シートのA1のセルの位置に「テスト」という文字が入ったら音を鳴らしたいんですが、下記でうまくいきません。 音は鳴るんですが、BOOK1のすべてのセルの何かが変われば音が鳴ります、、、 A1のみに対して音を鳴らしたいんです。 皆さん、どうかご教授お願いします! 1. 標準モジュールに Public Declare Function Beep Lib "kernel32" (ByVal dwFreq As Long, ByVal dwDuration As Long) As Long 2. シートモジュールのChangeイベントに Private Sub Worksheet_Change(ByVal Target As Range) If Cells(A1).Value >= "テスト" Then Shell "mplay32.exe /play /close c:\サウンド\テスト.wav" End Sub

  • 計算結果で音が鳴らず困っています、、

    こちらで、ご教授してもらったものを使わせて頂いているのですが、 どうしてもうまくいかないことが出て、行き詰まってしまい、、、 皆さん、度々すいませんが手助けできましたらお願いします。 エクセルのセルの結果表示のところで、 在庫追加となったら音がなるようにしたいのですが、 手打ち(コピペなど)で結果表示の所に (例えばA3に)ブドウ追加と入れると指定した音が鳴ります。 ですが、結果表示の所は関数にしてて 計算結果によって(ブドウ追加って答えが出たら) 音が鳴るようにしたいのですが、音が鳴らなくて困っています。 A1の所が、ブドウ注文数4個になると、A3は"在庫あり"から"ブドウ追加"となるので 音が鳴るはずなんですが、鳴らないんです、、、 また、複数同時に結果表示が変わっても(ブドウ追加とバナナ追加が同時に起こっても)音が鳴るようにしたいのですが、少しイジるも、うまくいかず、やれるのかどうかもわかっていません。 Excel2003のBOOK1の中で セル A1 ブドウ注文数2個 A2 ブドウ在庫数3個 A3 =IF(A1>A2,"ブドウ追加","在庫あり")(←結果表示) A5 バナナ注文数2個 A6 バナナ在庫数3個 A7 =IF(A5>A6,"バナナ追加","在庫あり")(←結果表示) A9 トマト注文数2個 A10 トマト在庫数3個 A11 =IF(A9>A10,"トマト追加","在庫あり")(←結果表示) A13 ミカンなど続いていきます・・・。 A14 ・・・・・・・ A15 ・・・・・・・ ----------↓現在、教えてもらったものを少しイジった状態です↓--------- 1.標準モジュールに Public Declare Function Beep Lib "kernel32" (ByVal dwFreq As Long, ByVal dwDuration As Long) As Long 2.シートモジュールのchangeイベントに Private Sub Worksheet_Change(ByVal Target As Range)   With Target     '一度に複数のセルの値が変化した時はExit     If .Count > 0 Then Exit Sub     '変化したセルがA3,A7,A11の範囲に無ければExit     If Intersect(.Cells, Range("A3,A7,A11")) Is Nothing Then Exit Sub     Select Case True       Case .Value Like "*ブドウ追加*"         Shell "mplay32.exe /play /close c:\サウンド\ブドウ.wav"       Case .Value Like "*バナナ追加*"         Shell "mplay32.exe /play /close c:\サウンド\バナナ.wav"       Case .Value Like "*トマト追加*"         Shell "mplay32.exe /play /close c:\サウンド\トマト.wav"       End Select     End With End Sub

  • 計算結果で音を1回で止める方法を教えてください。

    以前、こちらで教えてもらったものを使わせてもらっているんですが、 これを少し改造したいんですが、色々イジってもわかりませんでしたのでご教授ください。 下記の式だと、A3やA7の計算結果で、注文数が在庫数を超えると セルの表示が変わり、各種設定した各フルーツ追加の音が鳴る設定なんですが、 例えばブドウ注文数4個になり、ブドウ在庫数3個を超えると セルの表示がブドウ追加となり、ブドウ追加!と音が鳴るんですが、 更にブドウが5個6個と追加されると、ずっとブドウ追加!と音が鳴り続けます。 これをブドウ追加!と音が鳴ったら、それでブドウ追加音は鳴らないようにしたいんです。 バナナが追加状態になった場合も、バナナ追加!と1回鳴って、 それ以降、バナナ追加が続いても音は終了と。 つまりA3やA7の計算結果1個につき、1回で音は終了にしたいんです。 ◆Excel2003のBOOK1の中で セル A1 ブドウ注文数2個(RSSによりランダムでリアルタイムで変わる) A2 ブドウ在庫数3個(固定数字) A3 =IF(A1>A2,"ブドウ追加"&PlayWave("C:\Sound\ブドウ追加音.wav"),"在庫あり") A5 バナナ注文数2個(RSSによりランダムでリアルタイムで変わる) A6 バナナ在庫数3個(固定数字) A7 =IF(A5>A6,"ブドウ追加"&PlayWave("C:\Sound\ブドウ追加音.wav"),"在庫あり") ◆標準モジュールに以下を書いています。 ' ※以下標準モジュールに貼り付けるユーザー定義関数 ' // Wave ファイルを再生する API ' // 複数の WAV の同時再生はできない。同期再生の場合は、 ' // 再生終了まで一切の操作ができない。 ' Private Declare Function PlaySound Lib "winmm.dll" Alias "PlaySoundA" ( _     ByVal lpszName As String, _     ByVal hModule As Long, _     ByVal dwFlags As Long) As Long Private Const SND_SYNC As Long = &H0 ' 同期再生 Private Const SND_ASYNC As Long = &H1 ' 非同期再生 Private Const SND_PURGE As Long = &H40 ' 再生停止 ' // Wave ファイルを再生する. ' Public Function PlayWave(ByVal WaveFileName As String) As String      ' @引数 WaveFileName : 再生する Wave ファイル名   ' 必ず長さ0の文字列を返す      Call PlaySound(WaveFileName, 0&, SND_SYNC)   PlayWave = vbNullString End Function

  • Excel VBA 一定の数値以下で音を鳴らす

    一つのセル内の数値(VBAにより、1秒ごとに更新される流動的な数値です)において、-2以下になるとすぐにBEEP音が鳴る設定をしたいのですが、何故か1分ごとにしか鳴りません。 今のモジュールは、標準モジュールに Public Declare Function Beep Lib "kernel32" (ByVal dwFreq As Long, ByVal dwDuration As Long) As Long Sheet1に Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 1 Then If Range("Q6") < -2 Then Call Beep(2000, 500) Call Beep(2000, 500) End If End If End Sub と入力しています。 改善方法をどうかご教授願います。

  • VBAにおけるセルの名前の参照方法

    現在、Aシート、Bシートがあり、BシートのA1セルに test という名前を付けました。(範囲はブック) Aシートが再計算されれば、BシートのA1セルをメッセージボックスで表示したいのですが、調べましたが、よくわかりませんでしたので、詳しい方教えてください。 範囲はブックになっているし、他に同じセルの名前もつけれないようになっているので、 このような記述で大丈夫かと思いましたがエラーが出でしまいました。 なぜでしょうか?やはりわざわざ毎回シート名から記述が必要なのでしょうか? Private Sub Worksheet_Change(ByVal Target As Range)      MsgBox (Range("test").Value) End Sub このようにシート名から書けば表示されました。 Private Sub Worksheet_Change(ByVal Target As Range)      MsgBox (Worksheets("B").Range("test").Value) End Sub

  • エクセルVBAでセル変化したら別のセルへコピーする

    おはようございます。VBAをはじめて浅い初心者です。 あるセルに数字および文字列が入力されたら違うセルへコピーしたいのですがどのようにすればできますか。 Private Sub Worksheet_Change(ByVal Target As Range)とか 使用してつくればいいのですか?教えてください。

  • Excel:列中に特定の文字列を表示するセルが出たらBeep音を鳴らす

    商品の品番の確認作業にエクセルを使っています。 作業の効率化にエクセルVBAを使いたいのですが、うまくいきません。 具体的な使用目的は以下の通りです。  納品された商品には製造メーカーのバーコードがついています。それをエクセルに読み込んで予定通りの商品であるか確認作業を行います。  まず、エクセルシートのA列にメーカーコードを入力しておきます、B列のセルをアクティブにした状態でメーカーのバーコードを読み取ります。するとセルにメーカーコードが自動入力されます。この文字列がA列の文字列と一致した場合にはC列のセルにOKの文字が出るように設定しています。コードが一致しない場合はNGが出ます。  現在はOKかNGかを目で確認しているのですが、商品数が多いので、NGの場合にBeep音が出るようになっていれば作業が早くなります。  過去の質問例を調べて、VBAのAMI関数を使うとBeep音を鳴らせることはわかりました。たとえば、セルC1にNGと表示された場合にBeep音を鳴らす、というところまではできたのですが、列CのいずれかのセルにNGと表示された場合にBeep音を鳴らす、という設定ができません。  わかる方アドバイスお願いします。  ちなみに、セルC1にNGと表示された場合にBeep音を鳴らすには以下のように設定しました。 標準モジュール Public Declare Function Beep Lib "kernel32" (ByVal dwFreq As Long, ByVal dwDuration As Long) As Long シートのモジュール Private Sub Worksheet_Change(ByVal Target As Range) If Range("C1") = "NG" Then Call Beep(2000, 500) End If End Sub

  • エクセルVBA セルの入力後「Delete」キーを押したか判断するプログラム

    セルに入力したあとその入力したキーが「Delete」キーかどうか判定するプログラムを作りたいのですが、下記のようにコードを書きました。 '標準モジュール Declare Function GetAsyncKeyState Lib "User32.dll" (ByVal vKey As Long) As Long 'Microsoft Excel Objects(ワークシート) Private Sub Worksheet_Change(ByVal Target As Range) If GetAsyncKeyState(46) <> 0 Then 'キーボードの「Delete」キーかどうか判定 ○○ Else ○○ End If End Sub ところが、「Delete」キーを押してもGetAsyncKeyState(46)の値が「0」になり、「Delete」キーを押してないことになってしまいます。どのようにすればよいのでしょうか? 回答よろしくお願いします。

  • エクセルVBAでシートモジュールでのパブリック変数

    エクセル2000です。 標準モジュールで取得したパブリック変数は他のシートモジュールで参照できますが、逆にシートモジュールで取得したパブリック変数は他のシートで参照できないのでしょうか? シートチェンジイベントで取得した文字列を変数nmに格納し、ワークブックモジュールで呼び出そうとしたら何もでてきませんでした。 どうやったらよいのでしょうか? 'シートモジュールの記述 Public nm As String Private Sub Worksheet_Change(ByVal Target As Range) Dim rw As Integer If Intersect(Target, Range("A1").CurrentRegion) Is Nothing Then Exit Sub If Selection.Count > 1 Then Exit Sub rw = Target.Row nm = IIf(Cells(rw, "A") = "", Cells(rw, "A").End(xlUp).Value, Cells(rw, "A").Value) 'MsgBox nm End Sub 'ThisWorkbookモジュールの記述 Private Sub Workbook_BeforeClose(Cancel As Boolean) If nm = "" Then Exit Sub MsgBox nm & "さん、ご苦労様でした。" End Sub

  • マクロ。セルを空白にした時の処理

    セルをDeleteで空白にした時の処理について教えて下さい。 まず現在下記のようなマクロがあります。 Private Sub SubProc1(ByVal Target As Range) Dim str1 As String Dim str2 As String  On Error Resume Next  If Application.Intersect(Target, Range("B18")) Is Nothing Then Exit Sub  If Range("B18") = "" Then Exit Sub  Application.ScreenUpdating = False str1 = "T-POT #" str2 = " G1 G2 MEST計測を行いました。" Range("A7").Value = str1 & Range("B18") & str2 End Sub B18セルに数字や文字も入力するとA7セルにB18セルの入力内容を含めた 文字が表示されるのですが、B18セル内の文字をDeleteで削除しても A7セルは特に反応なしです。 やりたいことはB18セルから文字をDeleteで削除した場合 A7セルからもB18セルの入力内容を削除したいです。( str1、str2だけが残るイメージ) 宜しくお願いします。

専門家に質問してみよう