はじめに
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アプリケーションの表現力を大きく向上させることができます。