教えて!ExcelVBA!

ExcelVBAの基礎知識・書き方について紹介します。

【ExcelVBA API操作】音声ファイルを再生(sndPlaySound)する方法を教えて!

sndPlaySound関数は、WindowsAPIの一つで、サウンドを再生するための関数です。この関数を使用することで、ExcelVBAで音声ファイルを再生することができます。Windowsには、システムサウンドが数多く用意されており、それらを再生することも可能です。さらに、外部の音声ファイルも再生できるため、ExcelVBAで音声を再生する際には、非常に便利な機能です。

API宣言

ExcelVBAでは、sndPlaySound関数を使用する前にAPI宣言を行う必要があります。API宣言を行うことで、ExcelVBAがWindowsAPI関数を認識することができるようになります。API宣言は次のように行います。

Private Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" _
(ByVal lpszSoundName As String, ByVal uFlags As Long) As Long

解説

パラメータ 内容
Lib 使用する動的リンクライブラリ(DLL)の名前を指定します。ここでは "winmm.dll"となります。
Alias API関数名を指定します。ここでは"sndPlaySoundA"という関数名が指定されています。

引数については以下の通りです。

引数 内容
lpszSoundName サウンドファイルまたはリソースの名前を指定する文字列です。ファイルのパスやリソースの識別子などを指定します。ファイルの拡張子も含めて正確なパスを指定するか、Windowsが標準的にサポートしているサウンドの識別子(例: "SystemAsterisk"、"SystemExclamation")を指定します。
uFlags オプションのフラグを指定するためのパラメータです。代表的なオプションを以下で紹介します。

オプションには以下の設定値が指定できます。

定数 内容
SND_SYNC 0 サウンドが再生されるまで処理をブロックします。
SND_ASYNC 1 サウンドを非同期で再生します。サウンドが再生されるのを待たずに処理を続行します。
SND_LOOP 8 サウンドを繰り返し再生します。通常、SND_ASYNCフラグと一緒に使用されます。
SND_NOSTOP 16 既に再生中のサウンドがある場合、新しい再生を開始せずに終了します。

使い方

sndPlaySound関数を使用するには、以下のようにコードを記述します。

Sub PlaySound()
    sndPlaySound "C:\Windows\Media\chimes.wav", 0
End Sub

上記の例では、chimes.wavという音声ファイルを再生しています。sndPlaySound関数の第1引数には、再生する音声ファイルのパスを指定します。ここでは、C:\Windows\Media\chimes.wavというファイルを指定しています。第2引数には、再生オプションを指定します。0を指定することで、ファイルを再生することができます。

オプションは組み合わせることでさまざまな再生方法を実現することができます。例えば、以下のようにオプションを指定して再生することができます。

Sub PlaySound()
    sndPlaySound "C:\Windows\Media\chimes.wav", SND_ASYNC Or SND_LOOP
End Sub

上記の例では、SND_ASYNCオプションとSND_LOOPオプションを組み合わせて、chimes.wavを非同期でループ再生しています。

プログラミング例

以下に、音声ファイルを再生するためのプログラミング例を示します。

Sub PlaySound()
    Dim SoundFile As String
    SoundFile = "C:\Windows\Media\chimes.wav"
    If Dir(SoundFile) <> "" Then
        Call sndPlaySound(SoundFile, SND_ASYNC)
    Else
        MsgBox "ファイルが見つかりませんでした。"
    End If
End Sub

上記の例では、再生する音声ファイルを変数に格納しています。Dir関数を使用して、ファイルが存在するかどうかをチェックしてから再生するようにしています。ファイルが存在しない場合には、メッセージボックスを表示しています。

まとめ

sndPlaySound関数は、ExcelVBAで音声を扱う際に非常に便利な機能であるため、是非活用してください。