音楽の再生2016.05.01 [更新日]2025.03.15
Excelで音楽を再生したいと思ったことはありませんか?
ここではExcelで音楽を再生するためのコードを紹介します。
音楽の再生はVBAのみでは不可能なため、Win32APIを使用しています。
このコードはExcel2010以降に対応しています。(macは非対応)
【お薦め】マクロ・プロシージャを管理する無料のツール!
Excelマクロ管理ツール
Excelマクロ管理ツール
サンプルコード2016.05.01 [更新日]2025.03.15
コードの貼り付け場所
事前に、再生用の音声ファイルを準備して下さい。
サンプルコードは、拡張子が「wav」「mid」「mp3」「wma」の音声ファイルに対応しています。
マクロ「音声ファイルを読み込む」を実行するとファイル選択ダイアログボックスが表示されます。ダイアログボックスで準備した音声ファイルを選択すると音声がメモリに読み込まれます。
音声をメモリに読み込むと再生できるようになります。
音声をメモリに読み込むタイミングで、メモリ上の音声に名前を設定しています(サンプルコードでは「sample」)。
マクロ「再生」やマクロ「停止」等では、この名前に対してコマンドを実行しています。
※メモリ上の音声の名前が重複しないように、複数の音声ファイルを読み込むと複数の音楽を同時に再生するといったことも可能です。その場合には、マクロ「再生」やマクロ「停止」内のコマンド文字列の名前も、再生や停止する音楽にあわせて変更する必要がありますので、その点に気を付けてください。
' ***(宣言セクションに記述)*** '------------------------------- ' Win32API '《MCI デバイスにコマンド文字列を送信》 ' https://learn.microsoft.com/ja-jp/previous-versions//dd757161(v=vs.85) Declare PtrSafe Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" ( _ ByVal lpstrCommand As String, _ ByVal lpstrReturnString As String, _ ByVal uReturnLength As Long, _ ByVal hwndCallback As LongPtr) As Long '------------------------------- ' 定数 '------------------------------- ' ファイル読み込み時に設定する名前 Private Const L_FILENAME As String = "sample" ' ***(ここまで)***
'----------------------------------------------------------------- ' 音声ファイルをダイアログボックスで選択し読み込む '----------------------------------------------------------------- '[作成日]2016.05.01 [更新日]2025.03.15 ' https://excel.syogyoumujou.com/vba/mci.html '----------------------------------------------------------------- Sub 音声ファイルを読み込む() '--------------------------------------- ' ファイルを選択 '--------------------------------------- Dim varFilePath As Variant '《ファイル選択ダイアログボックス》 ' ・ 引数1:ファイルフィルター ' ・ 引数2:ファイルインデックス(既定で表示するフィルター文字列の指定) ' ・ 引数3:ダイアログボックスタイトル ' ・ 引数4:ボタンテキスト(Macintosh用) ' ・ 引数5:複数選択の設定(True:複数選択可 False:複数選択不可) varFilePath = Application.GetOpenFilename("音声ファイル,*.wav;*.mid;*.mp3;*.wma", _ 1, _ "音声ファイルを選択してください", _ , _ False) '[キャンセル]ボタンをクリックした場合は抜ける If VarType(varFilePath) = vbBoolean Then Exit Sub ' 取得したファイルパスが配列の場合は最初のファイルパスを対象とする Dim strFilePath As String If IsArray(varFilePath) Then strFilePath = varFilePath(0) Else strFilePath = varFilePath End If '--------------------------------------- ' 音声ファイルをメモリに読み込み '--------------------------------------- Dim lngReturn As Long Dim strCommand As String ' ファイルパスをダブルクォーテーションで括る '(ファイルパスに空白があった場合の対応) strFilePath = """" & strFilePath & """" ' 送信用のコマンド文字列作成 strCommand = "Open " & strFilePath & " alias " & L_FILENAME '《MCI デバイスにコマンド文字列を送信》 ' ・ 引数1:実行する MCI コマンド文字列 ' ・ 引数2:結果を格納するためのバッファ(不要の場合は vbNullString を設定) ' ・ 引数3:引数2のバッファサイズ(文字数)(0 にすると 引数2 は使用されない) ' ・ 引数4:コールバック通知を受け取るウィンドウハンドル(通常 0) ' 戻り値:成功:0 エラー:0以外 lngReturn = mciSendString(strCommand, vbNullString, 0, 0) If lngReturn = 0 Then MsgBox "音声ファイルをメモリに読み込みました", vbInformation Else MsgBox "音声ファイルの読み込みに失敗しました", vbExclamation End If End Sub
'----------------------------------------------------------------- ' 読み込んだ音楽を再生する '----------------------------------------------------------------- Sub 再生() Call mciSendString("Play " & L_FILENAME & " from 0", vbNullString, 0, 0) End Sub
'----------------------------------------------------------------- ' 再生中の音楽を停止する '----------------------------------------------------------------- Sub 停止() Call mciSendString("Stop " & L_FILENAME, vbNullString, 0, 0) End Sub
'----------------------------------------------------------------- ' 再生中の音楽を一時停止する '----------------------------------------------------------------- Sub 一時停止() Call mciSendString("Pause " & L_FILENAME, vbNullString, 0, 0) End Sub
'----------------------------------------------------------------- ' 一時停止中の音楽を再生する '----------------------------------------------------------------- Sub 一時停止解除() Call mciSendString("Resume " & L_FILENAME, vbNullString, 0, 0) End Sub
'***************************************************************** ' Excelを閉じる前に必ず実行してください '***************************************************************** Sub 音声ファイルをメモリからクリア() Call mciSendString("Close All", vbNullString, 0, 0) End Sub
音声ファイルを読み込まないと、音楽の再生はできません。
Excelを閉じる前に「音声ファイルをメモリからクリア」を必ず実行してください。