【Excel VBA】図形(シェイプ)に文字を書き込む方法と書式設定

目次

はじめに

Excelの図形(シェイプ)は、単なる絵や図としてだけでなく、中に文字を書き込むことで、説明の吹き出しやボタン、見やすいラベルとして活用できます。このテキストの追加や書式設定をVBAで自動化できれば、レポートやマニュアルの作成効率が飛躍的に向上します。

今回は、VBAを使ってシェイプにテキストを挿入し、その配置やフォントサイズ、色などを自由に設定する方法を解説します。


文字を操作する基本:TextFrameオブジェクト

シェイプ内のテキストに関する操作は、主にShapeオブジェクトが持つTextFrameオブジェクトを通じて行います。このTextFrameオブジェクトのプロパティを操作することで、テキストの様々な書式をVBAで制御できます。


実践コード:シェイプに文字を追加し、書式を設定する

事前準備

まず、VBAで操作するために、ワークシート上に任意の図形を一つ作成し、「InfoBox」という名前を付けておきましょう。

(名前の付け方:図形を選択 → 「図形の書式」タブ → 「オブジェクトの選択と表示」から名前を変更)

VBAコード例

以下のコードは、「InfoBox」という名前のシェイプにテキストを追加し、その書式(配置、フォントサイズ、色)を設定するサンプルです。

Sub AddAndFormatTextInShape()

    ' "InfoBox" という名前のシェイプを操作対象とする
    ' Withステートメントで、TextFrameに対する設定をまとめて記述
    With ActiveSheet.Shapes("InfoBox").TextFrame
    
        ' テキストの垂直方向の配置を「上下中央」に設定
        .VerticalAlignment = xlVAlignCenter
        
        ' テキストの水平方向の配置を「左右中央」に設定
        .HorizontalAlignment = xlHAlignCenter
        
        ' 表示する文字列を設定
        .Characters.Text = "VBAでテキスト設定"
        
        ' CharactersオブジェクトのFontプロパティを更に操作
        With .Characters.Font
            ' フォントサイズを18ポイントに設定
            .Size = 18
            ' フォントの色を白に設定
            .Color = RGB(255, 255, 255)
            ' 太字に設定
            .Bold = True
        End With
        
    End With

End Sub

コードの解説

  • With ActiveSheet.Shapes("InfoBox").TextFrame Withステートメントを使うことで、TextFrameオブジェクトに対する複数のプロパティ設定をすっきりと記述できます。
  • .VerticalAlignment.HorizontalAlignment テキストの配置を指定します。xlVAlignCenter(上下中央)やxlHAlignCenter(左右中央)の他にも、xlVAlignTop(上揃え)やxlHAlignLeft(左揃え)などを指定できます。
  • .Characters.Text 実際にシェイプ内に表示したい文字列を代入します。.Charactersオブジェクトは、テキストそのものや、その文字の集合に関する設定を担います。
  • With .Characters.Font .Charactersが持つFontオブジェクトを操作することで、フォントに関する詳細な設定が可能です。.Sizeで大きさ、.Colorで色(RGB関数で指定)、.Boldで太字(True/False)などを設定できます。

補足:より高度な書式設定が可能なTextFrame2

VBAには、TextFrameとよく似たTextFrame2というオブジェクトも存在します。

  • TextFrame: テキスト全体に同じ書式を適用する、シンプルで分かりやすい従来からのオブジェクト。
  • TextFrame2: テキスト内の一部の文字だけ色を変えたり太字にしたり、といったより高度で複雑な書式設定が可能な、新しいオブジェクト。

ほとんどの場合はTextFrameで十分ですが、「VBAテキスト設定」の「で」だけ赤字にしたい、といった特殊な要件がある場合はTextFrame2の出番となります。

Sub SetTextWithTextFrame2()
    ' TextFrame2を使ったテキスト設定
    Dim txtRange As TextRange2
    Set txtRange = ActiveSheet.Shapes("InfoBox").TextFrame2.TextRange

    txtRange.Text = "高度なテキスト設定"

    ' 例えば、最初の4文字だけを赤色にする
    txtRange.Characters(1, 4).Font.Fill.ForeColor.RGB = RGB(255, 0, 0)
End Sub

TextFrame2は高機能な分、階層が少し深くなります。まずはTextFrameを使いこなし、必要になったらTextFrame2を調べてみる、というステップで学習を進めるのがおすすめです。


まとめ

今回は、VBAでシェイプにテキストを設定し、書式を整える方法を解説しました。

  • シェイプのテキスト操作は .TextFrame オブジェクトが基本。
  • .VerticalAlignment / .HorizontalAlignment でテキストの配置を決める。
  • .Characters.Text で文字列を、 .Characters.Font でフォントの書式を設定する。
  • 簡単な設定はTextFrame、文字ごとの複雑な設定はTextFrame2が担当。

このテクニックを使えば、マクロで生成したレポートに自動で注釈を入れたり、ユーザー操作のガイドを表示したりと、VBAアプリケーションの表現力を大きく向上させることができます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次