みかん_-_コピー

VBA PPTのカタカナ全角変換

前回「VBA 半角カタカナの全角変換」では、Excelシート上の文字列の中から、半角カタカナだけを対象に全角変換する処理を作成しました。

今回は、前回作成した処理を利用して、PowerPoint文書のテキストボックス文字列を対象に全角変換する処理に変えていきます。

プログラムの作成

前回ファイルを流用してファイル名は「test3.xlsm」として、
Sheet1モジュールに「test3」関数を新規追加、
前回プログラムから「KatakanaZenkaku」関数はそのまま流用します。

以下に「test3」関数のみプログラムを示します。

Public Sub test3()
    Dim oApplication As Object
    Set oApplication = CreateObject("PowerPoint.Application")
    
    Dim oPresentation As Object
    Set oPresentation = oApplication.Presentations(1)
    
    Dim nIndex As Long
    nIndex = oPresentation.Windows(1).Selection.SlideRange.SlideIndex
    
    Dim oSlide As Object
    Set oSlide = oPresentation.Slides(nIndex)
    
    Dim oShape As Object
    For Each oShape In oSlide.Shapes
        With oShape.TextFrame2.TextRange
            Dim sText As String: sText = .Text
            .Text = KatakanaZenkaku(sText)
        End With
    Next oShape
End Sub

プログラムを組み込んだExcelファイルを以下に添付します。

テスト用PowerPoint文書ファイル

テスト用のテキストボックス文字列を含んだPowerPoint文書ファイルを添付します。

動作確認

上記のテスト用PowerPoint文書ファイル「test.pptx」をダブルクリックして開き、1ページ目のスライドを選択して表示します。

Excelファイル「test3.xlsm」の開発タブ、マクロから、
マクロ名:Sheet1.test3を実行します。

実行

実行結果例は次のようになり、テキストボックス内の文字列のうち、半角カタカナ部分のみが全角文字に変換されました。

結果

プログラムの解説

それでは、「test3」関数の主な内容を説明します。

オブジェクト変数oApplicationの宣言と、CreateObject関数を使用して、PowerPointアプリケーションを参照できるようにoApplication変数にセットする処理です。今回は、すでにPowerPointアプリケーションを起動した状態でプログラムを実行しているので、起動中のアプリケーションを参照します。

    Dim oApplication As Object
    Set oApplication = CreateObject("PowerPoint.Application")

PowerPointアプリケーションで最初に開いた文書オブジェクトをoPresentation変数にセットします。

    Dim oPresentation As Object
    Set oPresentation = oApplication.Presentations(1)

文書中の選択スライドのスライド番号をnIndexに設定します。

    Dim nIndex As Long
    nIndex = oPresentation.Windows(1).Selection.SlideRange.SlideIndex

選択スライドのスライドオブジェクトをoSlideに設定します。

    Dim oSlide As Object
    Set oSlide = oPresentation.Slides(nIndex)

スライド中のShapeオブジェクトを1つずつ取り出します。ここでは、テキストボックスの前提としており、そのテキストをsTextに取り出してKatakanaZenkaku関数で文字列中の半角カタカナを全角変換したうえで、テキストオブジェクトに戻します。

    Dim oShape As Object
    For Each oShape In oSlide.Shapes
        With oShape.TextFrame2.TextRange
            Dim sText As String: sText = .Text
            .Text = KatakanaZenkaku(sText)
        End With
    Next oShape

2ページめのスライドを変換

次にテスト用PowerPoint文書ファイル「test.pptx」の2ページ目のスライドを選択してマクロ実行してみます。

実行前)

2ページ実行前

実行後)

2ページ実行後

半角カタカナは全角変換されましたが、、、

箇条書きの書式が変更されてしまった!

テキストボックスから文字列全体を取り出して、全角変換した後、文字列全体をテキストボックスに戻しているので、文字列途中の書式などは全てリセットされてしまうのです。

PowerPoint文書では、箇条書きのほかにも、文字列途中の文字色を変えたり、下線を引いたりなど、色々な装飾を施したりします。

そのため、書式が崩れてしまっては、全角変換できたとしても、あまり役立つものとならないでしょう。

次回は書式を保持して変換できるように改良していきたいと思います。


記事を気に入って頂き、お役に立てたら嬉しいです。