CoCoのYDブログ

心に思い浮かんだことを少し掘り下げ発信します

【VBA】Excel VBAでBEEP音を鳴らす

こんにちは

前回BEEP音を鳴らす簡易的なものを作ってみました。

今回はそれを応用したこちらの質問について考えてみます。

okwave.jpプログラムの内容

1.A9~AZ9の間に"当たり"の文字があれば10秒間音の大きさを調整できるBEEP音を鳴らす。

2.可能なら"当たり"があればファンファーレのような効果音を鳴らす、"はずれ"があればBeep音を鳴らす。

 

1について音の大きさを変更する方法は分かりませんでした。

 ハードによるブザー音のため、変更はできないのでは?とのこと

2については.Findを使って調べてみましょう。

 

プログラムの作成

まず1にあったプログラムを作成してみます。

Declare Function BeepAPI Lib "kernel32.dll" Alias "Beep" _
(ByVal dwFreq As Long, ByVal dwDuration As Long) As Long

Sub test()
    Dim 検索範囲, 当たり, はずれ As Range

    With ThisWorkbook.Worksheets("Sheet1")
        Set 検索範囲 = .Range("A9:AZ9")
        Set 当たり = 検索範囲.Find(what:="当たり", lookat:=xlWhole)
        If 当たり Is Nothing Then
        Else
        Call BeepAPI(300, 10 * 1000)
        End If
    End With
End Sub

今回はセルの検索を行うためRangeとして変数を宣言しています。

6行目、With ~

 使用するシートの場所を指定してあげるとプログラムが見やすくなると思い記載しています。

 

7行目、Set 検索範囲

 検索する範囲を変数の検索範囲に指定しています。セルの値ではなくセル自体を変数に入れる際はSet関数を使用するみたいです。(なんとなくで使ってきたから意味はよく分かってなかったです)

 

8行目、Set 当たり = 検索範囲.Find(what:="当たり", lookat:=xlWhole)

長いのですが、検索範囲から"当たり"を探してあれば変数の当たりにセルを入力します。

 Set 変数名 = 検索範囲.find(what:=検索する文字,lookat:=xlwhole)

 lookat:=xlwholeは完全に一致している文字列の場合セルを返します

 

9行目、 If 当たり Is Nothing Then Else

 もし当たりがNothing(見つからなかった)場合の処理ですが、Thenの後にElseとなっているため何も処理を行わないようにしています。

逆に当たりが見つかった場合の処理をElseで行うようにしています。

 

11行目、Call BeepAPI(300, 10 * 1000)

 これは単純に300の高さのBeep音を10秒流しなさいという命令です。

 

では2を組み込んだプログラムを作成します。

Declare Function BeepAPI Lib "kernel32.dll" Alias "Beep" _
(ByVal dwFreq As Long, ByVal dwDuration As Long) As Long

Sub test()
     Dim 検索範囲, 当たり, はずれ As Range

     With ThisWorkbook.Worksheets("Sheet1")
         Set 検索範囲 = .Range("A9:AZ9")
         Set 当たり = 検索範囲.Find(what:="当たり", lookat:=xlWhole)
         If 当たり Is Nothing Then
         Else
         myPlayer = Shell("C:\Program Files\Windows Mediaa Player\wmplayer.exe /play C:\Users\●●\Desktop\ファンファーレ.mp3", 0)
         End If
         Set はずれ = 検索範囲.Find(what:="はずれ", lookat:=xlWhole)
         If はずれ Is Nothing Then
         Else
         Call BeepAPI(300, 10 * 1000)
         End If
     End With
End Sub

 見難くてすみません。が一応これで動きますw

Findの説明は上と同様なので省きます。今回の肝はmyPlayerのところですね。

myPlayer = Shell("C:\Program Files\Windows Mediaa Player\wmplayer.exe

これでプレイヤーを起動しますという意味です。その後に開くファイルの場所ですね。

/play C:\Users\●●\Desktop\ファンファーレ.mp3"

/play 以降が開くファイル名ですね。

最後の0がプレイヤーを表示しない場合です。表示する場合は1に変更してください。

 

これで質問にあった用件は音量以外満たしていると思います。

ただ当たりとはずれが混在する場合、効果音とBeep音が被ってしまってるんですよね^^;

そこは質問者がうまい具合に変更してくださると信じています。w