19年と２週間超しの回答 ExcelのRange.Soundnote あるいは音声メモ

>Ｅｘｃｅｌ９５のＶＢＡで音声の再生マクロを作成したのですが、Ｅｘｃｅｌ９５のマシンで は動作しなくて困ってます。マクロの記述は以下の通りです。

>```vb
Sub Record1()
Worksheets("Sheet1").Range("A1").SoundNote.Import "C:\My Documents\Wnstart.WAV"
Worksheets("Sheet1").Range("A1").SoundNote.Play
Worksheets("Sheet1").Range("A1").SoundNote.Delete
End Sub
```

>原因が分かる方がいらっしゃったら御教授ください。
Little < hktvg mail.infoseek.co.jp >
nagano, - Tuesday, September 12, 2000 at 16:51:43 (JST)

VBAワールドは、Excel VBAおよびVBAに関する情報交換や会議を行うための専用ボード（掲示板）です。
http://family.uchida.ac/yasuo/vbaboard/vbaboard2000.html

## 答え
やあ、この原稿を最初に打っている日は2019/09/26 21時ごろだ。
6953日ほど回答に間があったけど、誰も回答がないみたいだから答えるよ。読んでくれるかな？
SoundNoteはExcel95 / Excel5.0でのみ使えます。さらにExcel95でもサウンドカード（音声、サウンドのA/D、D/A変換、マイク、スピーカー入出力、シンセがついたボード。いろいろな規格がある)+ドライバがないと再生できません。まずサウンドカードが正常か、ドライバが最新のものかチェックしてください。（当然Windows Updateはない) 
このためExcelには
[Application.CanPlaySounds property (Excel)](https://docs.microsoft.com/en-us/office/vba/api/excel.application.canplaysounds)
[Application.CanRecordSounds](https://docs.microsoft.com/en-us/office/vba/api/excel.application.canrecordsounds)
というプロパティが用意されています。したがって上記のVBAは

```vb
Sub Record2()
'For Excel 95/5.0 Only
If Application.CanplaySound Then
Worksheets("Sheet1").Range("A1").SoundNote.Import "C:\My Documents\Wnstart.WAV"
Worksheets("Sheet1").Range("A1").SoundNote.Play
Worksheets("Sheet1").Range("A1").SoundNote.Delete
End if
End Sub
```
としたほうがいいです。
もっとも君がもうExcel 95 なんてもう使っているとは思わないけど。でもSoundNoteを使ったSampleはネットにあまりないんだ。Excel95の時はインターネットの情報はそれほど充実していなかったし、いまみたいなゴミだらけで使えないものでもなかった。だから貴重なSampleにはその時ならどう答えたかも残しておいたほうがいいと思ったんだ。
以上が回答です。Excel 2016が出るまではね。
####補足
このプロパティ（派生したオブジェクトともいえる）は以後互換性のために残されましたがもとからExcel97より使用できませんでした。


##根拠
Excel VBA完全制覇という本の752ページに"Excel5.0/95で使用したサウンドメモを表します。"とあります。
https://books.google.co.jp/books?id=Ot0eBAAAQBAJ&pg=PA752&lpg=PA752&dq=%22soundnote%22+office+tanaka+%E3%82%B5%E3%82%A6%E3%83%B3%E3%83%89%E3%83%A1%E3%83%A2&source=bl&ots=M1m_u7WX_R&sig=ACfU3U2GFuPMv1nH25RP0gduZeYPFBrWlg&hl=ja&sa=X&ved=2ahUKEwj6zYb2pO7kAhWIc3AKHTsdDC8Q6AEwCnoECAkQAQ#v=onepage&q=%22soundnote%22%20office%20tanaka%20%E3%82%B5%E3%82%A6%E3%83%B3%E3%83%89%E3%83%A1%E3%83%A2&f=false

[Excel95 入門](http://www.kg-group.com/webContent/kg-group/school/excel/excel.html)
>■ セルにメモをつけるには
 ［挿入］-［メモ］コマンドを使う
 表計算のデータは数字や項目としての文字などが中心になります。
 データをより詳しく説明するためにはセルの幅や高さを広げてもかえって表が読みづらくなります。
 こんな時計算された結果に対してコメントを入れたり音声によるサウンドメモを付ける事でワークシートをいっそう意味のあるデータにすることができます。
 セルにメモを付けるには［挿入］メニューの［メモ］コマンドを実行します。
▼ メモを付けるセルをクリックして［挿入］－［メモ］コマンドを実行する。［メモ］ダイアログが表示される。
    １ ［内容］テキストボックスに文字を入力する
    ２ 入力したら[追加]ボタンをクリックする
    ３ ［一覧］リストボックスに参照セルとメモの内容が表示される
    ４ [ＯＫ]ボタンで閉じる
    ５ メモのついたセルは右隅にメモマークが表示される
    ６ セルにマウスポインタを位置づけるとメモが表示される。アクティブセルでなくてもよい。

>◆ サウンドを録音するにはコンピュータ本体に録音用のハードウエアとウインドウズにサウンドドライバが組み込まれている必要があります。

当時とMicrosoftはロータスに対抗するため、セルに何でも入れられるようにした。これもその一つの戦略として実装されたものだろう。今なら理解されるが、サウンドドライバがあってもマイクがついておらず、実際にはあまり使えなかった。

[SoundNote メンバー (Excel)](https://docs.microsoft.com/ja-jp/previous-versions/office/mt574994(v%3doffice.15))
2016/06/07
メソッド
名前 説明
Delete Range.Soudnote.Delete ~~サウンドコメント~~サウンドメモを削除
[Import](https://msdn.microsoft.com/ja-jp/library/mt575004(v=office.15)) `Range.SoundNote.Import "c:\hoge\hoge.wav"` サウンドメモをインポート failenameはString
[Play](https://msdn.microsoft.com/ja-jp/library/mt575006(v=office.15)) サウンド コメントを再生します。
[Record](https://msdn.microsoft.com/ja-jp/library/mt575005(v=office.15))  サウンド コメントを録音します。
プロパティ
名前 説明
[Application](https://docs.microsoft.com/ja-jp/office/vba/api/excel.soundnote.application)
オブジェクト修飾子を指定せずにこのプロパティを使用すると、Microsoft Excel アプリケーションを表す**application** オブジェクトを取得します。
対象となるオブジェクトが指定された場合は、指定されたオブジェクトを作成した Application オブジェクトを返します。OLE オートメーションを使っていて、オブジェクトのアプリケーションにアクセスするときなどに、このプロパティを使います。 読み取り専用です。

[Creator](https://msdn.microsoft.com/ja-jp/library/mt574997(v=office.15))
オブジェクトが Microsoft Excel で作成された場合、このプロパティは文字列 XCEL を返します。これは 16 進数の 5843454C と同値です。 Creator プロパティは、各アプリケーションに 4 文字の作成元のコードが付加される Macintosh 版 Microsoft Excel で使用するように設計されました。 たとえば、Microsoft Excel の作成元コードは XCEL です。
[Parent](https://msdn.microsoft.com/ja-jp/library/mt575001(v=office.15))

[NamedRange.SoundNote プロパティ](https://docs.microsoft.com/ja-jp/previous-versions/visualstudio/visual-studio-2010/f3e5aayx(v%3dvs.100))
プロパティ値
型: Microsoft.Office.Interop.Excel.SoundNote
解説
このプロパティは使用しないでください。 サウンド コメントは Microsoft Office Excel から削除されました。
.NET Framework セキュリティ
直前の呼び出し元に対する完全な信頼。 このメンバーは、部分的に信頼されているコードから使用することはできません。 詳細については、「部分信頼コードからのライブラリの使用」を参照してください。

[XmlMappedRange.SoundNote プロパティ](https://docs.microsoft.com/ja-jp/previous-versions/visualstudio/visual-studio-2010/7220wyh0(v%3dvs.100))
XmlMappedRange.SoundNote プロパティ
2011/08/09
This API supports the Visual Studio infrastructure and is not intended to be used directly from your code.
名前空間:  Microsoft.Office.Tools.Excel
アセンブリ:  Microsoft.Office.Tools.Excel (Microsoft.Office.Tools.Excel.dll 内)


###現在でもエラーは出ない。

```vb
Sub te()
Dim r As Range
Set r = Range(ActiveCell.Address)
r.SoundNote.Delete

r.SoundNote.Import "C:\Windows\Media\Alarm01.wav"
Stop
r.SoundNote.Play
End Sub
```

現在でもこのコードはエラーにならない。しかしStopの段階で、ローカルウィンドを見てもSoundNoteにwavファイルはない。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/126919/23ed30b6-2818-572b-5ce7-56332b7ef17f.png)
また録音はできるが、SoundNoteに音声は入らない。そもそもRecordがあっても止める命令がない。

##ところがOffice2016向け新機能のこれはいったい何だろう
[Office 2016 VBA 向け新機能]https://docs.microsoft.com/ja-jp/office/vba/library-reference/concepts/what-s-new-for-vba-in-office-2016
SoundNote オブジェクト (Excel) 	録音されたサウンド コメントを表します。
SoundNote.Application プロパティ (Excel) 	対象となるオブジェクトが指定されないる場合、このプロパティは、Microsoft Excel アプリケーションを表す Application オブジェクトを返します。 対象となるオブジェクトが指定された場合は、指定されたオブジェクトを作成した Application オブジェクトを返します。OLE オートメーションを使っていて、オブジェクトのアプリケーションにアクセスするときなどに、このプロパティを使います。 読み取り専用です。
SoundNote.Creator プロパティ (Excel) 	このオブジェクトを作成したアプリケーションを示す、32 ビットの整数値を返します。 取得のみ可能な Long 値です。
SoundNote.Parent プロパティ (Excel) 	指定されたオブジェクトの親オブジェクトを返します。 読み取り専用です。
SoundNote.Delete メソッド (Excel) 	サウンド コメントを削除します。
SoundNote.Import メソッド (Excel) 	指定したサウンド コメントをインポートします。
SoundNote.Play メソッド (Excel) 	サウンド コメントを再生します。
SoundNote.Record メソッド (Excel) 	サウンド コメントを録音します。

つまり以前のバージョンにあるプロパティ、メソッド一式がまるごと乗っている。しかしエラーにならないが機能はしない。
またApplicationのプロパティはTrueになってしまう。

オブジェクトブラウザを見ると
range.soundnoteと
Soundnote Classがある。
少なくともこれらはExcel 2013でも存在している。一体なにを削ったのだろう。

たしかに公式のヘルプたとえば
https://docs.microsoft.com/ja-jp/office/vba/api/excel.range.soundnote
range.soundnoteを開くと、
>Range.SoundNote プロパティ (Excel)
2019/05/11
####注意
このプロパティは、使用しないでください。 サウンド メモは Excel から削除されました。
####構文
expression.Soundnote
expression は Range オブジェクトを表す変数です。

としか記載されていない。SoundNoteが独立したオブジェクトとして記載されていることもない。
そういう意味では削られている。しかし検索すれば
https://docs.microsoft.com/ja-jp/office/vba/api/excel.soundnote.application
というURLにすぐにたどり着いてしまう。