Excel VBA(マクロ)でセルの内容を声を変えて読上げ -その1
Windowsに標準で組み込まれている読上げの声で、Harukaの声以外を使って読上げる方法
Excel VBA(マクロ)でセルの内容を声を変えて読上げ -その2
読上げ内容を音声ファイルに保存する方法
Excel VBA(マクロ)でセルの内容を声を変えて読上げ -その3
スピード、ピッチ(声の音程)、更には、強調の指示方法
Excel VBA(マクロ)でセルの内容を声を変えて読上げ -その4
実際のシートに書いた内容で読上げする事例
Excel VBA(マクロ)でセルの内容を声を変えて読上げ -その5
シートに書いた内容を録音(音声ファイルに保存する)事例
Excel VBA(マクロ)でセルの内容を声を変えて読上げ -その6
読上げる内容を調整し易くする事例
Excel VBA(マクロ)でセルの内容を声を変えて読上げ -その7
XMLタグについて追加説明
について、紹介しました。
今回は、その6で紹介しました入力した1行の読上げだけでは部分的な確認が足りないので、選択したセルの範囲を読上げる事例説明をします。
前回、その7で、
読上げ内容の中にXMLタグを書き込んだら、その内容が有効になる。
しかし、次の行に記述すれば、同じこと。と、しました。
1行読上げでは、確認できないことになります。
そこで、選択した範囲を読上げるSubの紹介です。
Sub 範囲読上げ()
'選択した範囲の行を入れる変数
Dim cRw()
'選択範囲の行数と実際の行を入れる変数
Dim cnt, Rcnt As Integer
'選択範囲の行数
cnt = Selection.Rows.Count
'選択の行を入れる必要数に変数の再宣言
ReDim cRw(cnt)
'変数番号の初期化
Rcnt = 1
'選択した範囲の各行を選んで
For Each ix In Selection.Rows
'その行番号を収納
cRw(Rcnt) = ix.Row
'使った変数番号を+1繰り上げ
Rcnt = Rcnt + 1
Next
'話し手の設定
Call voi
'音声合成エンジン設定
Set spi = CreateObject("SAPI.SpVoice")
'割り込み許可
Application.EnableCancelKey = xlInterrupt
Application.ScreenUpdating = False
'現状のシート
Set sht = ActiveSheet
For ix = 1 To Rcnt - 1
'対象の行を設定
rw = cRw(ix)
'読上げ実行
Call 読上げsub
Next
Application.ScreenUpdating = True
'SAPIを解放
Set spi = Nothing
End Sub
セルの範囲を選択すると、「Selection」というオブジェクトで参照できます。
この中の「Rows」という各行の属性を確認することができます。
その行数は、「Selection.Rows.Count」で参照できます。
各行の行番号は、「Selection.Rows(1~).Row」で参照できます。
行番号が参照できれば、得られた行の読上げを実行させることで、選択範囲の読上げが可能です。
*ただし、3~5行目と7行目を選択した場合、最初の3~5行目だけになります。
この場合には、「Areas」属性を参照して、次のエリアも取得する必要があります。
ここでは、省略します。
Excelシート事例
A | B | C | D | E | |
---|---|---|---|---|---|
1 | スピード | 強調 | ピッチ | 話し手 | 内容 |
2 | 2 | -3 | 一郎 | いつもお世話になっています。早急なご対応をお願いします。 | |
3 | -1 | 4 | あゆみ | ありがとうございます。 | |
4 | 2 | -2 | はるか | お願いします。 | |
5 | 2 | Y | -2 | はるか | たとえ |
6 | 2 | -2 | はるか | 問題が発生しても、期限は守ってください。 | |
7 | 2 | -2 | はるか | お願いします。<emph>たとえ</emph>問題が発生しても、期限は守ってください。 |
この事例で、4~6行目の範囲を選択して読上げするのと、7行目を読上げするのは同じこと・・・
のはずなのですが、実際に試してみると強調部分が違います。
行ごとの読上げでは、毎回 SAPIを解放しているので、初期化の段階で影響が出ているのでしょう。
同じ話し手ならば、XMLタグを含めて1つの文章にした方が安定するかもしれません。
ただし、1行読上げの機能は使えなくなります。
その8へ続く