0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Excel VBA(マクロ)でセルの内容を声を変えて読上げ -その9- 太字部分を強調読上げする

Last updated at Posted at 2023-05-13

Excel VBA(マクロ)でセルの内容を声を変えて読上げ -その1
Windowsに標準で組み込まれている読上げの声で、Harukaの声以外を使って読上げる方法
Excel VBA(マクロ)でセルの内容を声を変えて読上げ -その2
読上げ内容を音声ファイルに保存する方法
Excel VBA(マクロ)でセルの内容を声を変えて読上げ -その3
スピード、ピッチ(声の音程)、更には、強調の指示方法
Excel VBA(マクロ)でセルの内容を声を変えて読上げ -その4
実際のシートに書いた内容で読上げする事例
Excel VBA(マクロ)でセルの内容を声を変えて読上げ -その5
シートに書いた内容を録音(音声ファイルに保存する)事例
Excel VBA(マクロ)でセルの内容を声を変えて読上げ -その6
読上げる内容を調整し易くする事例
Excel VBA(マクロ)でセルの内容を声を変えて読上げ -その7
XMLタグについて追加説明
Excel VBA(マクロ)でセルの内容を声を変えて読上げ -その8- 選択範囲を読上げる
選択したセルの範囲だけを読上げる
について、紹介しました。

その8で、強調についてはセルの範囲選択では上手くできず、文章途中に強調タグ(<emph></emph>)を入れると効果が出ると書きました。
XMLタグを記述することは、あまり一般的ではありません。
そこで、文中の強調したい箇所だけ、太字にして、マクロで勝手に強調するようにしてみます。

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>、期限は守ってください。
8 2 -2 はるか お願いします。たとえ問題が発生しても、期限は守ってください。

読上げSubの内容を書き換えました。
あまりスマートな記述ではありません。

Private Sub 読上げsub太字()
    'A-1:速度 B-2:強調 C-3:声色 D-4:話し手 E-5:読上げ内容
    '1列を読込
    For col = 1 To 5
        '強調文字確認
        If col = 5 Then
            Set rg = sht.Range(sht.Cells(rw, col), sht.Cells(rw, col))
            '太字交じりの文章は、BoldがNull
            If IsNull(sht.Cells(rw, col).Font.Bold) = True Then
                '文章用変数初期化
                bun = ""
                '太字フラッグ初期化
                bld = False
                '1文字目から最終文字まで
                For ch = 1 To Len(sht.Cells(rw, col))
                    '文字フォントが太字の場合
                    If sht.Cells(rw, col).Characters(ch, 1).Font.Bold = True Then
                        '太字フラッグが偽の場合(太字に切替る)
                        If bld = False Then
                            '強調タグを加えて、1文字を文書変数に追加
                            bun = bun & "<emph>" & Mid(sht.Cells(rw, col), ch, 1)
                            '太字フラッグを真に設定
                            bld = True
                        '太字継続
                        Else
                            '1文字を文書変数に追加
                            bun = bun & Mid(sht.Cells(rw, col), ch, 1)
                        End If
                    '文字フォントが太字ではない場合
                    Else
                        '太字フラッグが偽の場合(標準の継続)
                        If bld = False Then
                            '1文字を文書変数に追加
                            bun = bun & Mid(sht.Cells(rw, col), ch, 1)
                        '太字フラッグが真の場合(太字から標準に切替る)
                        Else
                            '強調終了タグを加えて、1文字を文書変数に追加
                            bun = bun & "</emph>" & Mid(sht.Cells(rw, col), ch, 1)
                            '太字フラッグを偽に設定
                            bld = False
                        End If
                    End If
                Next
                '最後まで太字なら
                If bld = True Then
                    '強調終了タグ追加
                    bun = bun & "</emph>"
                End If
                'SAPIに渡す文字を書換
                cel(5) = bun
            'セルのフォント太字がNullでは無い場合
            Else
                'SAPIに渡す文字をセル内容のまま取得
                cel(col) = sht.Cells(rw, col)
            End If
        '5列目以外
        Else
            cel(col) = sht.Cells(rw, col)
        End If
    Next
    'XML指示を初期化
    mae = ""
    ato = ""
    '速度
    Call rat(cel(1))
    '強調
    Call emp(cel(2))
    '声色
    Call pit(cel(3))
    '読み手
    Set spi.Voice = voic(tok(cel(4)))
        
    '読上げ
    spi.Speak mae & cel(5) & ato
End Sub

セルのフォントの太字属性は、

.Cells(行, 列).Font.Bold

で得られます。

すべて太字なら、「True」。すべて、標準なら、「False」。
標準に太字が混じっている場合には、「Null」となります。
そこで、「Null」の場合には、セルの文字を1文字ずつ判断して、切替り場所でタグを入れるようにしました。

If IsNull(sht.Cells(rw, col).Font.Bold) = True Then

の部分が、Null判断の行です。

もう少しスマートな記述ができると思いますが、直感的に書けていると思います。

その10へ続く

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?