セル上の英文を読み上げてもらう
はじめに
ネタができたらVBAの記事書こうと思っていたら、なかなかに久々になりました。
ネタって自然と湧き出てくるわけではないんですね。
やりたいこと
Excelのセル上の英語テキストを読ませたい
とりあえずやってみよう
まずはExcelの標準でできないかどうか、Google先生にお伺いをたてます。
「Excel」「VBA」「読み上げ」「音声」などを組み合わせて検索。
さすがにできないだろと思うことも、とりあえず訊くが吉です。
セルの読み上げ機能
こちらのページに「セルの読み上げ機能」というものがあり、「あれ? 終わった」と思いました。
が、これを実際に試してみると、なかなか面白いレベル。
昔の読み上げってこんな感じだったなあという。
Office TANAKA - Excel VBA Tips[テキストファイルを読み上げる]
VBAでもできるようです。
が、もう少しうまく読んでもらえるか調べてみましょう。
SAPI?
VocExcel / SAPI で読み上げ / エクセル マクロ
よくわかりませんが、SAPIというものを使う方法が書いてありました。
試しに
Sub 読み上げテスト() Dim Voice1 Set Voice1 = CreateObject("SAPI.SpVoice") Set Voice1.Voice = Voice1.GetVoices().Item(0) Voice1.Speak "Hello world" End Sub
上の方法と変わらない?
しかし「読み上げる人物が変る」という情報がありましたので
声のタイプを取得してみると
Sub 声タイプゲット() Dim Voice1 Dim cnt As Long Dim i As Long Set Voice1 = CreateObject("SAPI.SpVoice") cnt = Voice1.GetVoices.Count For i = 0 To cnt - 1 Set Voice1.Voice = Voice1.GetVoices().Item(i) Debug.Print Voice1.Voice.GetDescription() Next i End Sub
実行すると、イミディエイトウインドウに
Microsoft Haruka Desktop - Japanese Microsoft Zira Desktop - English (United States)
こんな感じで、表示されます。*1
Englishバージョンがある!
Ziraというのは名前でしょうか。
Voice1.GetVoices().Item(1)にして試したら、無事に英語っぽく読んでくれました。
ヤッタネ!!
選択セルを読んでもらう
ここまできたら、あとは簡単ですね。
Sub 読み上げ() Dim Voice1 Dim cnt As Long Dim r As Range Dim str As String Set Voice1 = CreateObject("SAPI.SpVoice") Set Voice1.Voice = Voice1.GetVoices().Item(1) For Each r In Selection str = r.Value If str <> "" Then Voice1.Speak str End If Next End Sub
クイックアクセスツールバーに追加
どうせなら、セルの読み上げ機能と同じように、クイックアクセスツールバーに追加したいところですね。
Excelマクロ/VBAで始める業務自動化プログラミング入門(1):Excelでプログラム作成を始めるメリットとマクロの基本 (3/5) - @IT
こちらにやり方が書いてあります。
アイコンや表示名は、変更ボタンから変えられます。
とりあえず再生アイコンにしてみました。
セルを選択 -> アイコン押す で、Ziraさんが英語を読み上げてくれます。
*1:Windows10。環境によって違うと思われます