おすすめパワポ本12選!プロから学ぶ資料作成術

【パワポVBA】バラバラのテキストボックスを1つに連結するマクロ

PowerPoint VBAを使い、バラバラのテキストボックスを1つに連結するマクロをご紹介します。

選択中のすべてのテキストをつなげ、1つのテキストボックスにして貼り付けてくれます。

コードは神AI「ChatGPT」で開発しました。ChatGPTについては、次の記事で解説しています。

神AI「ChatGPT」でパワポVBAを開発【始め方から解説】
ChatGPTとは、質問を投げると人工知能が回答してくれるチャットサービスです。Excelでの数式や…
スポンサーリンク
スポンサーリンク

バラバラのテキストボックスを1つに連結するマクロ

Sub TextConcatenateAndPaste()

    '選択中のテキストボックスをY座標の小さい順にソート
    Dim shpArray() As shape
    ReDim shpArray(1 To ActiveWindow.Selection.ShapeRange.Count)
    For Each shp In ActiveWindow.Selection.ShapeRange
        i = i + 1
        Set shpArray(i) = shp
    Next shp
    Dim tempShp As shape
    For i = LBound(shpArray) To UBound(shpArray) - 1
        For j = i + 1 To UBound(shpArray)
            If shpArray(i).Top > shpArray(j).Top Then
                Set tempShp = shpArray(i)
                Set shpArray(i) = shpArray(j)
                Set shpArray(j) = tempShp
            End If
        Next j
    Next i

    'テキストボックス内のテキストを連結
    Dim txt As String
    For i = LBound(shpArray) To UBound(shpArray) - 1
        txt = txt & shpArray(i).TextFrame.TextRange.Text & vbCrLf
    Next i
    txt = txt & shpArray(UBound(shpArray)).TextFrame.TextRange.Text

    '新しいテキストボックスを作成してテキストを貼り付け
    Dim newShp As shape
    Set newShp = ActiveWindow.Selection.SlideRange.Shapes.AddTextbox(msoTextOrientationHorizontal, 0, 0, 200, 50)
    newShp.TextFrame.TextRange.Text = txt

    'テキストの折り返しを無効化
    newShp.TextFrame.WordWrap = msoFalse

    '選択中のテキストボックスと同じフォント、フォントサイズを使用
    newShp.TextFrame.TextRange.Font.Name = ActiveWindow.Selection.ShapeRange(1).TextFrame.TextRange.Font.Name
    newShp.TextFrame.TextRange.Font.NameFarEast = ActiveWindow.Selection.ShapeRange(1).TextFrame.TextRange.Font.NameFarEast
    newShp.TextFrame.TextRange.Font.Size = ActiveWindow.Selection.ShapeRange(1).TextFrame.TextRange.Font.Size
    
    '新しいテキストボックスを選択
    newShp.Select

End Sub

選択中のテキストボックスをY座標の小さい順にソートし、スライドの上部にあるテキストボックスから順に連結されるように処理しています。

ソートの処理をしていないと、テキストボックスの重なり順で連結されてしまうので、並べた順に連結されない場合があります。

マクロの使い方は、次の記事で解説しています。

PowerPointマクロ入門 | コピペで始める楽々コース
PowerPointでマクロを始めたいけど、難しそうでよく分からないという方向けの入門編です。PPD…

実行結果

連結したいテキストボックスをすべて選択します。選択順は問いません。

マクロを実行すると、テキストの並び順通りに連結されたテキストボックスが貼り付けられます。テキスト間は改行コードが入るように処理しています。

ActiveWindow.Selection.SlideRange.Shapes.AddTextbox(msoTextOrientationHorizontal, 0, 0, 200, 50)

貼り付け場所は上記コードの「0(X座標), 0(Y座標)」の値で調整してください。

テキストボックスをバラバラにする

テキストボックスを連結したい場合もあれば、バラバラにしたい場合もあります。テキストばらしはPowerPointの標準機能だけで行えます。

詳細は、次の記事で解説しています。

PowerPointでテキストを1文字ずつバラバラにする方法
PowerPointでテキストボックスの文字を1文字または1行ずつバラバラにする方法をご紹介します。…

マクロで自動化したい場合はこちら。

テキストばらしPowerPoint版 1行ずつ分割するマクロ
Illustratorのスクリプトでお馴染み「テキストばらし」のような処理ができるPowerPoin…